Files
Balsam_167/Doc/EEPROM_LAYOUT.md
Andrey 5d9818291b 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.
2026-10-09 16:17:37 +03:00

11 KiB
Raw Blame History

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.