# Обновление внутренней Flash F28335 по CAN В постоянный загрузчик ProtoCAN добавлена запись приложения во внутреннюю Flash. Сектор A (`0x338000…0x33FFFF`, адреса в 16-битных словах) остаётся загрузчиком; обновляются только B–H (`0x300000…0x337FFF`). RS-232 и обновление EEPROM A/B сохраняют прежние команды. Поддерживается текущая аппаратная конфигурация M95M02: её неактивный слот используется для временного хранения полного образа. ## Первичная установка 1. Собрать обновлённый постоянный загрузчик из зависимости SETGUI: ```powershell python K:/git_project/newProject/SETGUI/third_party/templates/c/protocan-boot/projects/build.py --device f28335 --configuration Release --output K:/git_project/28335_periph/outputs/can-flash-20261021/loader ``` Нужны установленный TI C2000 COFF compiler и официальный TI Flash API v2.10 F28335. Его include/lib подключены в Debug и Release CCS-проекта. 2. Через JTAG установить новый `F28335_CAN_AB.out` **только в сектор A**. Использовать существующий режим установки постоянного загрузчика с маской A; полное стирание чипа удалит приложение. Разметка EEPROM и параметры не меняются. 3. Аппаратный режим запуска должен выбирать Flash boot. Старый запуск непосредственно SPI ROM не передаёт управление постоянному загрузчику и не разрешает CAN handoff. Существующий загрузчик без этой доработки отклоняет новую команду выбора памяти. Обновить сам сектор A через действующий RS Flash или CAN нельзя: он защищён от записи. ## Обновление приложения из SETGUI 1. Открыть общую страницу «Прошивка», выбрать **CAN / ProtoCAN Boot** и подключить CAN-адаптер. Штатная скорость PERIPH — 250000 бит/с. 2. Выбрать нужный PERIPH: УМП1 — Type 1 / Device 5, УМП2 — 1/6, задатчик — 1/8. Product Type — `0x2833`, аппаратная ревизия — 1. 3. В поле **«ProtoCAN: память прошивки»** выбрать **«Внутренняя Flash F28335»**. 4. Открыть `*_flash_rs.bin` из папки `rs` штатного комплекта сборки. Это тот же SCI8 Flash BIN с FAB1, который используется для RS Flash. RAM BIN из `can` либо `eeprom`, COFF OUT и образ с аппаратным входом сектора A не подходят. 5. Запустить обновление и дождаться подтверждения записи и перезапуска. Максимум — 130560 октетов SCI8, до 64 непересекающихся секций. Исполняемый entry обязан присутствовать в данных приложения. EEPROM-кандидат после такого обновления не создаётся: при обычном reset постоянный boot предпочитает проверенную Flash, а подтверждённый EEPROM-образ остаётся резервным источником запуска. ## Последовательность и сохранность `ENTER_BOOT → SELECT_MEMORY(1) → BEGIN_IMAGE → BEGIN_COMPAT → ERASE staging → DATA → VERIFY → COMMIT Flash → REBOOT`. Новая управляющая команда `0x10` имеет один октет данных: 0 — прежняя EEPROM A/B, 1 — внутренняя Flash. Она принимается только в текущей ненулевой сессии до любых метаданных. Каждая новая сессия начинает с EEPROM по умолчанию; сменить цель после начала передачи нельзя. Старый клиент без этой команды сохраняет прежнее поведение. На VERIFY загрузчик заново читает staging EEPROM, проверяет транспортную CRC32, границы SCI8, перекрытия, наличие entry и FAB1, CRC будущей физической Flash. Перед COMMIT эти проверки выполняются повторно. Только затем TI Flash API стирает маску `0x00FE` (B–H), записывает данные порциями до 128 слов и проверяет каждую порцию. FAB1 записывается последним; затем проверяется CRC уже физической Flash. Код и таблицы TI API копируются из A в RAM `0x8000…0x97FF`. На время аппаратных вызовов IRQ запрещены: секторы A–H используют общий банк Flash. Сам CAN-сервис и его очередь остаются в постоянном загрузчике. Подтверждение COMMIT приходит после полной записи и проверки; клиент ждёт до 180 секунд и затем отдельно запрашивает reset. При отказе erase/program/readback COMMIT возвращает ошибку. Частичный образ с недействительным FAB1/CRC не запускается; boot A сохраняется для восстановления. Подтверждённый EEPROM-слот и параметры не изменяются. Прежний неактивный слот EEPROM используется как staging и при этом теряет свой старый резервный образ. ## Проверка ```powershell python tests/can_boot/run_flash_test.py python tests/protected_boot/run_test.py ``` `CAN_FLASH_IMAGE` позволяет передать тесту настоящий Flash BIN текущей сборки. Сквозной тест использует реальный клиент SETGUI, ядро ProtoCAN, аппаратный CAN-порт, EEPROM-журнал и Flash writer; подменяются только физические CAN/SPI/Flash. Проверяются сохранность A и параметров, резервный EEPROM-слот, CRC, неверные адреса, обрезание, перекрытия, изменение staging после VERIFY и обрыв erase/данных/FAB1. Debug и Release собраны TI C2000 22.6.0.LTS; проверены реальные COFF LOAD-адреса в секторе A. Испытание физических CAN, SPI, питания и автономного запуска на плате ещё требуется. В ходе разработки плата не программировалась.