feat: add M95M02-only GAS and EEPROM profiles
Expose the existing registers through Modbus and service CAN using one GAS provider only in M95M02 builds. Include the EEPROM layout/driver, LOAD protection and calibration, firmware identity and shared CCS build workflow. Add transport/profile and SCI8 validation tests, documentation and the checked M95M02 firmware image.
This commit is contained in:
136
Doc/EEPROM_LAYOUT.md
Normal file
136
Doc/EEPROM_LAYOUT.md
Normal file
@@ -0,0 +1,136 @@
|
||||
# EEPROM 167: выбор AT25256B / M95M02
|
||||
|
||||
Маркировка платы `ATMLH516 5EBL` определяет AT25256B: **256 Кбит**, то есть
|
||||
**32 768 байт**. Расшифровка и характеристики приведены в
|
||||
[даташите Microchip](https://ww1.microchip.com/downloads/aemDocuments/documents/MPD/ProductDocuments/DataSheets/AT25128B-AT25256B-128-256-Kbit-SPI-Serial-EEPROM-Industrial-Grade-Data-Sheet-DS20006193.pdf).
|
||||
|
||||
Константы общей разметки находятся в
|
||||
[templates/include/balsam167_eeprom_layout.h](../../newProject/SETGUI/third_party/templates/c/set-protocol/include/balsam167_eeprom_layout.h).
|
||||
`spise2p.h` использует их для физического размера, количества слов и длины
|
||||
страницы. `message.c` — для адреса параметров. Размер массива параметров
|
||||
проверяется относительно `ANSWER_LEN` на этапе компиляции.
|
||||
|
||||
`F28335.cmd` включает тот же заголовок и экспортирует символы `_EEPROM_*` в
|
||||
`.map`. Путь к templates/c/set-protocol добавлен в search path линкера CLI и CCS.
|
||||
EEPROM не стала секцией CPU MEMORY: SPI-образ загружается в RAM загрузчиком.
|
||||
Расположение `.text`, `.cinit`, `.econst`, `.switch` не менялось.
|
||||
|
||||
| Область | Начало, байт | Конец, исключая | Размер |
|
||||
|---|---:|---:|---:|
|
||||
| Прошивка SCI8 | `0x0000` | `0x7EFC` | 32 508 |
|
||||
| Параметры | `0x7EFC` | `0x7FFE` | 258 |
|
||||
| Неиспользуемое слово | `0x7FFE` | `0x8000` | 2 |
|
||||
|
||||
`check_firmware.ps1` получает размер и резерв из общего заголовка и сверяет
|
||||
резерв с `ANSWER_LEN`. При нестандартном checkout передайте `-TemplatesRoot`;
|
||||
`build_logger.ps1` делает это автоматически. Исторические параметры не перенесены.
|
||||
|
||||
Чтение с платы, единицы адресов, порядок байтов и сохранение дампа описаны в
|
||||
[руководстве SETGUI](../../newProject/SETGUI/docs/BALSAM167_EEPROM.md).
|
||||
Для старой прошивки reader использует CMD_PEEK (2 байта за запрос).
|
||||
Версия 0.1.1 также поддерживает блочное чтение FC03, регистры 0x8000..0xBFFF,
|
||||
до 120 слов (240 байт) за запрос. Полный дамп требует 137 запросов.
|
||||
Границы и формат заданы в templates, GUI использует тонкий Python-порт.
|
||||
Блочное чтение выполняется с разрешёнными прерываниями для работы SPI Timer2.
|
||||
Запись через это окно запрещена; параметры и их расположение не изменяются.
|
||||
|
||||
Размер каждого нового BIN проверяется при сборке; прежний вариант с одним
|
||||
PEEK занимал 32 286 байт. Точный размер новой сборки указан в её manifest.
|
||||
Для реального увеличения памяти потребовались бы другая микросхема, проверка
|
||||
SPI-загрузчика и драйвера, а не только правка линкера.
|
||||
|
||||
|
||||
## Выбор типа памяти (прошивка 0.1.2)
|
||||
|
||||
По умолчанию остаётся AT25256B. Автоматического определения ёмкости нет:
|
||||
контрольные записи для определения типа не выполняются. Выбранный тип должен
|
||||
совпадать с физической микросхемой до запуска программы и чтения параметров.
|
||||
|
||||
### CCS12
|
||||
|
||||
Откройте `Source/Internal/Include/eeprom_config.h`:
|
||||
|
||||
```c
|
||||
#define EEPROM_M95M02 0 /* AT25256B, 32 КиБ */
|
||||
/* Для установленной M95M02 измените значение на 1. */
|
||||
```
|
||||
|
||||
После изменения выполните **Project → Clean**, затем **Rebuild**. Этот файл
|
||||
читают драйвер, обработчик команд и F28335.cmd; post-build использует тот же
|
||||
выбор. Не задавайте противоречащий ему отдельный define только компилятору CCS:
|
||||
тогда компилятор, линкер и проверка BIN могут получить разные настройки.
|
||||
|
||||
### Сборка скриптом
|
||||
|
||||
```powershell
|
||||
./build_logger.ps1 -Eeprom AT25256B -OutputDirectory ./Bin/EepromProfiles/AT25256B -ImageName UKSSTMS320F28335_AT25256B
|
||||
./build_logger.ps1 -Eeprom M95M02 -OutputDirectory ./Bin/EepromProfiles/M95M02 -ImageName UKSSTMS320F28335_M95M02
|
||||
```
|
||||
|
||||
Параметр скрипта передаётся компилятору, линкеру и проверке размера; исходный
|
||||
config не меняется. Скрипт по умолчанию собирает AT25256B. Рядом с BIN создаются
|
||||
manifest и SHA-256; поле `eeprom` в manifest различает аппаратные варианты.
|
||||
UART остаётся 115200; алгоритм UART и FIFO не изменялся.
|
||||
|
||||
| Параметр | AT25256B | M95M02-DR |
|
||||
|---|---:|---:|
|
||||
| Ёмкость, байт | 32768 | 262144 |
|
||||
| Адрес SPI | 2 байта | 3 байта |
|
||||
| Страница записи, байт | 64 | 256 |
|
||||
| Начало параметров, байт | 0x7EFC | 0x3FEFC |
|
||||
| Начало параметров, слова | 0x3F7E | 0x1FF7E |
|
||||
| Конец параметров, исключая | 0x7FFE | 0x3FFFE |
|
||||
| Максимальная область BIN | 32508 | 261884 |
|
||||
|
||||
Последние два байта не используются. У M95M02 старшие адресные биты передаются
|
||||
отдельным восьмибитным тактом, затем младшие 16 бит. Адреса и длины драйвера
|
||||
расширены до 32 бит только в сборке M95M02. Запись делится по физическим страницам;
|
||||
готовность определяется WIP в регистре состояния. На плате с новым чипом ещё
|
||||
нужна проверка записи/считывания и холодного SPI boot; тесты на ПК не заменяют её.
|
||||
|
||||
### SETGUI
|
||||
|
||||
На вкладках **EEPROM 167** и **Загрузка / запуск / прошивка** есть синхронный
|
||||
чекбокс **M95M02 · 256 КиБ**. Снято — AT25256B · 32 КиБ. Он выбирает протокол
|
||||
и допустимый диапазон ПК, но не перепрограммирует тип EEPROM работающей платы.
|
||||
Во время чтения/загрузки переключатель блокируется.
|
||||
|
||||
Для полного дампа нажмите «Вся EEPROM»: 32768 либо 262144 байта. Длина блока
|
||||
остаётся 240 байт. M95M02 требует блочного чтения; автоматический переход на
|
||||
PEEK запрещён. Неподходящая прошивка должна отклонить запрос, а не вернуть
|
||||
повторяющиеся первые 32 КиБ как полный дамп. Дамп можно передать кнопкой
|
||||
«Сравнить с файлом…» напрямую в сравнение BIN.
|
||||
|
||||
При загрузке BIN проверяется поле `eeprom`, если оно присутствует в manifest.
|
||||
Старые файлы без этого поля не позволяют проверить тип. Команда «В SEEPROM»
|
||||
использует отдельный подкод M95M02; старая прошивка его не исполняет. Операция
|
||||
может завершиться таймаутом при несовпадении типа; это не успешная запись.
|
||||
GUI ограничивает отдельную загрузку в RAM существующим пределом 199993 байт:
|
||||
ёмкость EEPROM 256 КиБ сама по себе не увеличивает буфер загрузки или RAM CPU.
|
||||
|
||||
### Замена микросхемы и параметры
|
||||
|
||||
Сначала сохраните полный дамп старой EEPROM и настройки платы. После установки
|
||||
M95M02 запустите её сборку через CCS, запишите соответствующий BIN и сохраните
|
||||
параметры штатной командой Save. Параметры автоматически не мигрируют с 0x7EFC
|
||||
на 0x3FEFC. Простое копирование старого полного дампа в начало новой памяти
|
||||
не переносит настройки в их новую область и оставляет старый вариант прошивки.
|
||||
|
||||
### Общий протокол templates
|
||||
|
||||
Реализация и границы: `balsam167_eeprom_layout.h`, `balsam167_eeprom_block.h`,
|
||||
`periph28335.c`. Публичные функции `*_profile` получают 0 (AT25256B) или 1
|
||||
(M95M02); старые функции и структура reader из четырёх uint32_t сохранены.
|
||||
Python — тонкий ctypes-порт. Профили ПМ67/2812 и STM этим выбором не изменяются.
|
||||
|
||||
Для M95M02 используется частное расширение окна FC03: адрес 0x8000…0xFFFF,
|
||||
quantity = 0x8000 | (bank << 8) | word_count, bank 0…3, word_count 1…120.
|
||||
Каждый запрос содержит свой банк 64 КиБ; общего переключаемого банкового
|
||||
регистра нет. Блок не пересекает границу банка. Это не стандартное количество
|
||||
регистров Modbus — пользоваться следует общим API templates.
|
||||
Подкод EXTEND записи: 4 для AT25256B, 0x44 для M95M02. Адрес назначения в словах,
|
||||
размер в байтах. Обе стороны проверяют границу области прошивки.
|
||||
|
||||
Проверки: C-тест полного дампа 256 КиБ с нечётного адреса, все переходы банков,
|
||||
CRC и выход за границы; Qt-тесты выбора и запрета fallback; host-тест реального
|
||||
SPI-автомата `python tests/eeprom_profiles/run_test.py`; сборка обоих вариантов TI.
|
||||
Reference in New Issue
Block a user