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.
11 KiB
EEPROM 167: выбор AT25256B / M95M02
Маркировка платы ATMLH516 5EBL определяет AT25256B: 256 Кбит, то есть
32 768 байт. Расшифровка и характеристики приведены в
даташите Microchip.
Константы общей разметки находятся в
templates/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. Для старой прошивки 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:
#define EEPROM_M95M02 0 /* AT25256B, 32 КиБ */
/* Для установленной M95M02 измените значение на 1. */
После изменения выполните Project → Clean, затем Rebuild. Этот файл читают драйвер, обработчик команд и F28335.cmd; post-build использует тот же выбор. Не задавайте противоречащий ему отдельный define только компилятору CCS: тогда компилятор, линкер и проверка BIN могут получить разные настройки.
Сборка скриптом
./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.