Программирование OTP-памяти
Микросхема содержит энергонезависимую память (OTP) для хранения конфигурации, которая автоматически загружается в регистры при подаче питания или сбросе. После программирования OTP микросхема самостоятельно инициализируется — ПК-приложение для штатной работы больше не требуется.
OTP состоит из двух независимых частей (подробно — в разделе ПЗУ):
- BOTP (последовательная, 512 слов) — загружает при старте все конфигурационные регистры и память микровычислителей. Это «слепок» настроек преобразователя (соответствие ячеек и регистров).
- UOTP (параллельная, 2 ячейки) — хранит PLL_config и INIT_conf (настройки тактирования и инициализации, описание).
Все кнопки прожига OTP находятся в одном месте: вкладка Terminal → правая колонка, панель с заголовком Actions:. Других окон для программирования нет. Если вы не видите кнопок Create BOTP / Prog BOTP / Prog UOTP — значит, вы не в панели Actions: вкладки Terminal.
Полный сценарий программирования
Пошагово, от подключения до проверки автозагрузки:
- Подключите микросхему. В левой панели (ConnectPanel) откройте COM-порт кнопкой Open COM, затем найдите микросхему кнопкой Find IC в окне Test Board (меню → Utilities → Test Board, подробнее).
- Настройте регистры во вкладке Terminal так, как они должны быть при старте микросхемы (контур, тактирование, AFE и т.д.). Для BOTP также подготовьте файлы проекта (
base_ram.txt,cpu1_data.hex,cpu2_data.hex) и нажмите ParseAll в левой панели. - Write to IC (панель
Actions:) — запишите настроенные регистры в микросхему (в оперативную память), чтобы проверить конфигурацию «вживую» до прожига. - Прожиг UOTP без автозагрузки (тактирование и делитель ПЗУ): выставьте в таблице регистров
PLL_configиINIT_confс выбранным BOTP_clkdel (Fclk_rom ≤ 1 МГц) и сбитым битомOTP_init_on→ Create U22B → Prog UOTP. Прожиг проверяется автоматически (в логеUOTP programmed: ROM VERIFY PASSED …либоUOTP ROM VERIFY FAILED; при неудаче повторите). - Прожиг BOTP (слепок регистров): Create BOTP (из файлов проекта) → Prog BOTP → Verify BOTP — должны записаться и совпасть все 512 слов.
- Включение автозагрузки — строго последний шаг: установите бит
OTP_init_on(INIT_conf, бит 4) в таблице регистров → Create U22B (пересоберите hex с новым INIT_conf!) → Prog UOTP. - Финальная проверка: снимите питание (или подайте сброс) — микросхема должна сама загрузить настройки из OTP и работать без приложения.
Бит OTP_init_on включает автозагрузку всех регистров из BOTP при каждом включении питания. Если прожечь его до полного прожига и проверки BOTP (минимум — области регистров конфигурации, слова 504–511: IC_addr … Mode_config), микросхема при каждом включении будет загружать нули из пустой ПЗУ: микровычислители выключены (Mode_config = 0), адрес по интерфейсу сброшен (IC_addr = 0) — микросхема не работает и не отвечает. Она будет находиться в неизвестном состоянии, и для её возвращения к работоспособности потребуются значительные усилия. Полный порядок программирования — в разделе ПЗУ → Порядок программирования ПЗУ.
Напряжение программирования VPP (9,8 В ± 0,3 В) приложение подаёт самостоятельно в момент прожига: для BOTP импульс VPP формирует прошивка ESP32 при каждой записи слова, для UOTP — само приложение. Флажок vpp9v вручную ставить не нужно — это отдельный ручной режим подачи VPP для диагностики (со своим предупреждением).
Предварительные условия
Перед прожигом убедитесь, что:
- микросхема обнаружена (Find IC нашёл адрес);
- микросхема не в standby (флажок STNDBY снят);
- сброс отпущен (флажок NRESET снят);
- для BOTP — файлы проекта распарсены (ParseAll); для UOTP — значения
PLL_config/INIT_confвыставлены в таблице (см. разделы ниже).
Прожиг OTP необратим и рассчитан на ограниченное число перезаписей. Любая кнопка Prog … требует двойного подтверждения — последовательно появятся диалоги «Подтверждение программирования OTP» и «Окончательное подтверждение». Перед прожигом обязательно проверьте конфигурацию и выполните Verify.
Программирование BOTP (слепок регистров)
- Подключите микросхему (Find IC) и подготовьте проект: нужные значения регистров сохраните в
base_ram.txt(кнопка Store to txt), данные микровычислителей должны быть вcpu1_data.hex/cpu2_data.hex, затем нажмите ParseAll (левая панель, ConnectPanel). - Create BOTP (панель
Actions:) — приложение соберёт файлrom_BOTP.hex(512 слов) из распарсенных файлов проекта (cpu1_data.hex+cpu2_data.hex+base_ram.txt), а не из чипа и не из текущей таблицы регистров. Если файлы не были распарсены —Create BOTPничего не сделает (в логе: «Before parse all files!»). - Prog BOTP — прожигает слепок в BOTP. Появятся два диалога подтверждения — ответьте «Да» на оба. Приложение запишет 512 слов и автоматически проверит каждое; при несовпадении сообщит об ошибке и остановится.
- Verify BOTP — перечитает BOTP и сравнит с ожидаемым (сообщение
Verify BOTP PASSED …). Подтверждения не требует.
Прожигать BOTP нужно целиком, все 512 слов: пустая (непрожжённая) ячейка читается как ноль, и если при автозагрузке в область регистров конфигурации попадут нули — микросхема после включения питания будет неработоспособна.
Сама по себе записанная BOTP ещё не включает автозагрузку: регистры начнут загружаться автоматически только после прожига бита OTP_init_on (шаг 6 полного сценария выше).
Программирование UOTP (PLL_config, INIT_conf)
- Установите нужные значения PLL_config и INIT_conf в таблице регистров вкладки Terminal (введите вручную или загрузите через Load from IC / Load from txt / Load from hex). Перед прожигом рекомендуется записать их в чип кнопкой Write to IC и убедиться, что тактирование работает корректно.
- Create U22B (панель
Actions:) — сформирует файлrom_u22b.hexиз значенийPLL_configиINIT_conf, отображённых в таблице регистров (Create U22B читает таблицу UI, а не сам чип). Если после изменения значений не нажатьCreate U22Bповторно, в hex-файле останутся старые значения. Если файла ещё нет и вы нажмётеProg UOTP, приложение сообщит: «Файл rom_u22b.hex не найден! Сначала нажмите 'Create U22B'.» - Prog UOTP — прожигает значения в UOTP (напряжение VPP приложение подаст само). Два диалога подтверждения — «Да» на оба. После прожига приложение автоматически читает фактическое содержимое ПЗУ и выводит результат:
UOTP programmed: ROM VERIFY PASSED …либоUOTP ROM VERIFY FAILEDсо списком несовпадений (в этом случае прожиг можно повторить).
Первый проход — до прожига BOTP: PLL_config + INIT_conf с выбранным BOTP_clkdel и OTP_init_on = 0 (гарантирует правильное тактирование ПЗУ к моменту включения автозагрузки). Второй проход — после успешного Verify BOTP: тот же INIT_conf, но с OTP_init_on = 1. Перед вторым прожигом обязательно пересоздайте hex кнопкой Create U22B — Prog UOTP берёт значения из файла, а не из таблицы.
Проверить UOTP вручную (кнопки Verify UOTP нет):
- В регистре UOTP_ctrl снимите бит
OVERRIDE_UVAL(0) и установите битWATCH_ROM_UVAL(1) — чтениеPLL_config/INIT_confстанет возвращать фактическое содержимое ПЗУ UOTP. Важно: приOVERRIDE_UVAL=1чтение возвращает значения оперативных регистров, а не ПЗУ — «проверка через OVERRIDE» даёт ложный результат. - Прочитайте PLL_config и INIT_conf и сравните с тем, что прожигали.
- Аппаратное описание процедуры — в разделе ПЗУ → параллельный доступ.
Справочник кнопок прожига
Все кнопки — в панели Actions: вкладки Terminal:
| Кнопка / флажок | Что делает |
|---|---|
| Create BOTP | Формирует rom_BOTP.hex из файлов проекта (cpu1/cpu2_data.hex + base_ram.txt), 512 слов |
| Prog BOTP | Прожиг BOTP (необратимо, двойное подтверждение, авто-VPP) |
| Verify BOTP | Перечитывает BOTP и сравнивает с ожидаемым |
| Create U22B | Формирует rom_u22b.hex из таблицы регистров (PLL_config, INIT_conf) |
| Prog UOTP | Прожиг UOTP (необратимо, двойное подтверждение, авто-VPP, авто-проверка содержимого ПЗУ) |
| vpp9v | Ручная подача VPP (override для диагностики); для штатного прожига не нужна |
Prog BOTP / Prog UOTP прожигают энергонезависимую OTP. Кнопка Program в левой панели (ConnectPanel) к прожигу отношения не имеет — она записывает оперативную конфигурацию из файла base_ram.txt (действует до сброса питания).
Если микросхема перестала отвечать
Если после прожига бита OTP_init_on (автозагрузка из OTP при старте) микросхема не отвечает — возможны две причины:
OTP_init_onпрожжён до BOTP (или BOTP прожита не полностью). При каждом включении питания все регистры инициализируются нулями из пустой ПЗУ:Mode_config= 0 (микровычислители выключены),IC_addr= 0 (микросхема не отвечает по адресу). Именно так проявляется ошибка порядка прожига. Исправление: найти микросхему (шаги ниже) и прожечь BOTP полностью — как минимум область регистров конфигурации (слова 504–511).- Неверно задан делитель тактирования OTP (BOTP_clkdel): инициализация выполняется на частоте выше 1 МГц и не завершается. Исправление: найти микросхему, записать корректный
INIT_confи перепрограммировать UOTP.
В обоих случаях микросхема не повреждена. Порядок восстановления:
- Найдите адрес микросхемы, перебирая в регистре
BUS_addrзначения 1…255 до отклика (см. Методика подключения → Обнаружение микросхемы). - Выполните исправление по соответствующей причине выше.
- Проверьте автостарт: снимите питание (или подайте сброс) — микросхема должна инициализироваться и отвечать.
Подробно — в разделах ПЗУ и Порядок программирования ПЗУ.
Связанные ресурсы
- ПЗУ — структура BOTP/UOTP и таблица ячеек
- Вкладка Terminal — где находятся кнопки
- Описание протокола программирования BOTP по SPI — файл
workstation4ad3s/PROG_BOTP_SPI_WRITE.mdрепозитория DCsoyuz/ad3s.