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.
137 lines
11 KiB
Markdown
137 lines
11 KiB
Markdown
# 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.
|