Files
templates/c/protocan-boot/projects
Andrey 41e24629ce Расширить DEIF, загрузку CAN и общую обработку сигналов
Добавить общее ядро DEIF, эмуляцию приборов и переносимые панели Python/Qt.
Расширить загрузчики F2812 и F28335, обновление Flash и профиль STM Invertor.
Добавить альтернативный МНК Eigen, модели неисправностей и диагностику сигналов.
Обновить справочники устройств, проекты CCS и регрессионные проверки.
2026-10-24 15:40:51 +03:00
..

Отдельные проекты CCS: F28335 и F2812

Весь комплект находится внутри templates/c/protocan-boot: проекты CCS, исходники загрузчиков, аппаратные порты, linker command files, необходимая поддержка TI, CLI-сборка, тесты и документация. Зависимости от исходников 28335_periph и BALZAM_167 при сборке отсутствуют. Требуется установленный TI C2000 compiler с поддержкой COFF ABI; проверена версия 22.6.0.LTS.

Проект CCS Контроллер Обновляемая память Схема
ccs/f28335 — F28335_CAN_AB TMS320F28335 M95M02, 256 КиБ A/B, trial, CONFIRM, rollback
ccs/f2812 — F2812_CAN_NOR TMS320F2812 / ПМ67 AM29LV800BT-70EI, 1 МиБ, x16 Один выделенный NOR-слот, проверяемый manifest, CAN recovery

F2812 не использует EEPROM. Его карта, GPIO, частота CAN, допустимые адреса приложения и состояние протокола отделены от F28335.

Открытие в Code Composer Studio

  1. Project → Import CCS Projects, каталог поиска — c/protocan-boot/projects/ccs.
  2. Выбрать F28335_CAN_AB и F2812_CAN_NOR. Оставить проекты в исходном расположении: не включать Copy projects into workspace, поскольку переносимые ссылки PCAN_ROOT ведут к общей библиотеке выше проектов.
  3. Выбрать Debug либо Release, затем Build Project. Оба проекта содержат собственные .project, .cproject, .ccsproject.
  4. OUT/MAP появятся в ccs/<контроллер>/<Debug|Release>/.

В targetConfigs сохранены существующие конфигурации Sauris SAU510: F28335 — Iso Plus v.2, F2812 — Iso Plus. Для другого адаптера выбрать свой Connection в Target Configuration. Компиляция и импорт не подключаются к JTAG и не программируют плату.

Для отдельных workspace с ограниченными правами CCS допускает переменную TI_APPDATA_DIR с доступным для записи каталогом. Это служебный cache IDE, он не относится к исходникам загрузчиков.

Сборка без запуска IDE

Из корня templates:

python c/protocan-boot/projects/build.py --device f28335
python c/protocan-boot/projects/build.py --device f2812
python c/protocan-boot/projects/build.py --device f28335 --configuration Release
python c/protocan-boot/projects/build.py --device f2812 --configuration Release

Можно передать --compiler <каталог-ti-cgt-c2000> и --output <каталог>. Скрипт читает состав исходников и настройки из этих же CCS-проектов, полностью пересобирает их и проверяет реальные COFF LOAD-адреса официальным ofd2000. Проверка отклоняет загружаемый RAM-код без Flash LOAD, пересечения, отсутствующие boot branch/C entry, запись CSM/OTP и посторонних внутренних секторов. Рядом с OUT сохраняются MAP, build.log и manifest с SHA-256.

Результаты:

  • ccs/f28335/Debug/F28335_CAN_AB.out;
  • ccs/f2812/Debug/F2812_CAN_NOR.out.

OUT — постоянный загрузчик для первоначальной установки через JTAG во внутреннюю Flash соответствующего TMS. Образ самого приложения передаётся по CAN в его внешнюю память. Для автоматического запуска должен быть выбран внутренний Flash boot; у ПМ67 необходимо также учитывать штатную логику CPLD выбора источника reset/boot из big_dsp_module платы.

F28335 / M95M02

Проект использует существующий порт и формат журнала без изменения адресов: PERIPH 0–31: Type = 1 + PERIPH / 16, Device ID = PERIPH mod 16. УМП1 — 1/5, УМП2 — 1/6, задатчик — 1/8. Product 0x2833, HW 1, CAN 250000 бит/с. Приложение и загрузчик используют один аппаратный номер платы; прежний общий адрес 3/7 отменён. Код загрузчика — внутренний сектор A 0x338000..0x33FF7F, boot — 0x33FFF6. Слоты M95M02 имеют по 130560 октетов, параметры — прежние 258 октетов по адресу 0x3FEFC. Приложение загружается в RAM ниже CPU word-адреса 0xE000.

После установки постоянного загрузчика новое приложение 167 передаётся существующим клиентом SETGUI CAN / ProtoCAN Boot. Оно обязано содержать hooks READY/CONFIRM и watchdog: пример интеграции реализован в ветке 167. Без CONFIRM следующий reset возвращает подтверждённый active. Полная последовательность — документация порта F28335.

F2812 / AM29LV800BT

Профиль: Device Type 3, Device ID 6, Product 0x2812, HW 1, CAN 250000 бит/с, SYSCLKOUT 150 МГц. CAN находится на GPIOF6 TX / GPIOF7 RX. F2812 использует программную арифметику rts2800_ml.lib; F28335 — FPU32 и rts2800_fpu32.lib.

Внутренний сектор A загрузчика: 0x3F6000..0x3F7F7F, boot — 0x3F7FF6. Внешняя NOR подключена по CPU word-адресу 0x100000. Новый CAN-раздел задан явно в ports/tms320f2812/boot2812.h:

Область CPU word-адреса включительно Размер
Существующая нижняя область: прежние образы/параметры/FPGA 0x100000..0x15FFFF 768 КиБ
Новый SCI8 CAN-образ: обычные сектора 12/13/14 0x160000..0x177FFF 192 КиБ
Неизменяемые этим загрузчиком top-boot сектора 15/16/17 0x178000..0x17DFFF 48 КиБ
Новый manifest: последний top-boot сектор 18 0x17E000..0x17FFFF 16 КиБ

Это новое явное размещение CAN-образа, а не автоматическое определение свободного места в уже заполненном чипе. Перед первоначальной установкой согласовать эти два выделенных участка с фактической картой NOR конкретной платы. В известном исходнике FPGA начинается с 0x130000, а новый CAN-слот находится выше; драйвер не изменяет ничего ниже 0x160000 и в секторах 15–17.

После reset доступно 3 секунды для ENTER_BOOT. Открытая сессия удерживает загрузчик; пустой/повреждённый manifest оставляет CAN recovery постоянно. Для обновления уже работающего приложения нужно войти в это окно после reset; приложение F2812 само по себе пока не получает обработчик ENTER_BOOT от добавления отдельного проекта загрузчика.

Перед записью требуется AMD manufacturer 0x0001, device 0x22DA. Сначала стирается сектор manifest, затем три сектора образа. Запись проверяет каждое слово. VERIFY повторно читает NOR, проверяет CRC32, SCI8, entry, перекрытия и запрещённые назначения. COMMIT повторяет проверку, сохраняет manifest с собственной CRC, два magic-слова публикуются последними. Стирание сообщает BUSY каждые 250 мс, продлевая живую сессию.

Это single-slot схема: при обрыве обновления последнего CAN-образа остаётся recovery, автоматический A/B rollback для F2812 не заявляется. Полное стирание NOR, запись внутренней Flash по CAN и программирование FPGA отсутствуют.

Образ приложения — TI SCI8 AA 08, максимум 196608 октетов. Старый flat BIN основного контроллера автоматически не мигрируется. Допустимый payload:

  • L0 0x8000..0x8EFF;
  • H0 0x3F8000..0x3F9FFF;
  • внешняя SRAM zone2 0x80000..0xFFFFF.

Стек M1, L1 0x9000..0x9FFF, RAM InitFlash 0x8F00..0x8FFF, периферия, внутренняя Flash и NOR не допускаются как назначения SCI8. .ebss приложения может занять L1 после перехода в его C runtime; инициализированный payload работающую RAM загрузчика перезаписывать не должен. Настройка приложения F2812/его linker — отдельная от импорта загрузчика операция.

Геометрия x16, ID и команды AA/55/A0/80/30/F0 взяты из оригинального datasheet AMD Am29LV800B. Аппаратные GPIO/CPLD и XINTF-тайминги перенесены из действующих big_dsp_module.c / flash_tools.c ПМ67, без зависимости от этих файлов при сборке.

Проверки

$env:CC = 'C:/msys64/ucrt64/bin/gcc.exe'
python c/protocan-boot/tests/run_tests.py

Проверяются протокол, CRC, сессии/BUSY, A/B F28335 с trial/rollback/CONFIRM, NOR F2812 с настоящими AMD command cycles, ID, readback, запрещёнными секторами, обрывами COMMIT, повреждением CRC/SCI8 и тайм-аутом DQ7. Вариант с CMake/CTest также поддерживается.

Подтверждены реальные import/build обоих проектов в CCS 12.3, CLI-сборки Debug/Release TI 22.6 COFF и проверки секций OUT. Физические JTAG/CAN/XINTF, режим boot и поведение конкретной платы при отключении питания требуют стенда; физическое программирование этим комплектом автоматически не выполнялось.