Перейти к основному содержимому

Программирование OTP-памяти

Микросхема содержит энергонезависимую память (OTP) для хранения конфигурации, которая автоматически загружается в регистры при подаче питания или сбросе. После программирования OTP микросхема самостоятельно инициализируется — ПК-приложение для штатной работы больше не требуется.

OTP состоит из двух независимых частей (подробно — в разделе ПЗУ):

  • BOTP (последовательная, 512 слов) — загружает при старте все конфигурационные регистры и память микровычислителей. Это «слепок» настроек преобразователя (соответствие ячеек и регистров).
  • UOTP (параллельная, 2 ячейки) — хранит PLL_config и INIT_conf (настройки тактирования и инициализации, описание).
Где нажимать

Все кнопки прожига OTP находятся в одном месте: вкладка Terminal → правая колонка, панель с заголовком Actions:. Других окон для программирования нет. Если вы не видите кнопок Create BOTP / Prog BOTP / Prog UOTP — значит, вы не в панели Actions: вкладки Terminal.

Полный сценарий программирования​

Пошагово, от подключения до проверки автозагрузки:

  1. Подключите микросхему. В левой панели (ConnectPanel) откройте COM-порт кнопкой Open COM, затем найдите микросхему кнопкой Find IC в окне Test Board (меню → Utilities → Test Board, подробнее).
  2. Настройте регистры во вкладке Terminal так, как они должны быть при старте микросхемы (контур, тактирование, AFE и т.д.). Для BOTP также подготовьте файлы проекта (base_ram.txt, cpu1_data.hex, cpu2_data.hex) и нажмите ParseAll в левой панели.
  3. Write to IC (панель Actions:) — запишите настроенные регистры в микросхему (в оперативную память), чтобы проверить конфигурацию «вживую» до прожига.
  4. Прожиг 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; при неудаче повторите).
  5. Прожиг BOTP (слепок регистров): Create BOTP (из файлов проекта) → Prog BOTP → Verify BOTP — должны записаться и совпасть все 512 слов.
  6. Включение автозагрузки — строго последний шаг: установите бит OTP_init_on (INIT_conf, бит 4) в таблице регистров → Create U22B (пересоберите hex с новым INIT_conf!) → Prog UOTP.
  7. Финальная проверка: снимите питание (или подайте сброс) — микросхема должна сама загрузить настройки из OTP и работать без приложения.
Не прожигайте OTP_init_on до BOTP!

Бит 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 (слепок регистров)​

  1. Подключите микросхему (Find IC) и подготовьте проект: нужные значения регистров сохраните в base_ram.txt (кнопка Store to txt), данные микровычислителей должны быть в cpu1_data.hex/cpu2_data.hex, затем нажмите ParseAll (левая панель, ConnectPanel).
  2. Create BOTP (панель Actions:) — приложение соберёт файл rom_BOTP.hex (512 слов) из распарсенных файлов проекта (cpu1_data.hex + cpu2_data.hex + base_ram.txt), а не из чипа и не из текущей таблицы регистров. Если файлы не были распарсены — Create BOTP ничего не сделает (в логе: «Before parse all files!»).
  3. Prog BOTP — прожигает слепок в BOTP. Появятся два диалога подтверждения — ответьте «Да» на оба. Приложение запишет 512 слов и автоматически проверит каждое; при несовпадении сообщит об ошибке и остановится.
  4. Verify BOTP — перечитает BOTP и сравнит с ожидаемым (сообщение Verify BOTP PASSED …). Подтверждения не требует.

Прожигать BOTP нужно целиком, все 512 слов: пустая (непрожжённая) ячейка читается как ноль, и если при автозагрузке в область регистров конфигурации попадут нули — микросхема после включения питания будет неработоспособна.

Сама по себе записанная BOTP ещё не включает автозагрузку: регистры начнут загружаться автоматически только после прожига бита OTP_init_on (шаг 6 полного сценария выше).

Программирование UOTP (PLL_config, INIT_conf)​

  1. Установите нужные значения PLL_config и INIT_conf в таблице регистров вкладки Terminal (введите вручную или загрузите через Load from IC / Load from txt / Load from hex). Перед прожигом рекомендуется записать их в чип кнопкой Write to IC и убедиться, что тактирование работает корректно.
  2. Create U22B (панель Actions:) — сформирует файл rom_u22b.hex из значений PLL_config и INIT_conf, отображённых в таблице регистров (Create U22B читает таблицу UI, а не сам чип). Если после изменения значений не нажать Create U22B повторно, в hex-файле останутся старые значения. Если файла ещё нет и вы нажмёте Prog UOTP, приложение сообщит: «Файл rom_u22b.hex не найден! Сначала нажмите 'Create U22B'.»
  3. Prog UOTP — прожигает значения в UOTP (напряжение VPP приложение подаст само). Два диалога подтверждения — «Да» на оба. После прожига приложение автоматически читает фактическое содержимое ПЗУ и выводит результат: UOTP programmed: ROM VERIFY PASSED … либо UOTP ROM VERIFY FAILED со списком несовпадений (в этом случае прожиг можно повторить).
UOTP прожигается дважды

Первый проход — до прожига 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 нет):

  1. В регистре UOTP_ctrl снимите бит OVERRIDE_UVAL (0) и установите бит WATCH_ROM_UVAL (1) — чтение PLL_config/INIT_conf станет возвращать фактическое содержимое ПЗУ UOTP. Важно: при OVERRIDE_UVAL=1 чтение возвращает значения оперативных регистров, а не ПЗУ — «проверка через OVERRIDE» даёт ложный результат.
  2. Прочитайте PLL_config и INIT_conf и сравните с тем, что прожигали.
  3. Аппаратное описание процедуры — в разделе ПЗУ → параллельный доступ.

Справочник кнопок прожига​

Все кнопки — в панели 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 для диагностики); для штатного прожига не нужна
Не путайте с Program

Prog BOTP / Prog UOTP прожигают энергонезависимую OTP. Кнопка Program в левой панели (ConnectPanel) к прожигу отношения не имеет — она записывает оперативную конфигурацию из файла base_ram.txt (действует до сброса питания).

Если микросхема перестала отвечать​

Если после прожига бита OTP_init_on (автозагрузка из OTP при старте) микросхема не отвечает — возможны две причины:

  1. OTP_init_on прожжён до BOTP (или BOTP прожита не полностью). При каждом включении питания все регистры инициализируются нулями из пустой ПЗУ: Mode_config = 0 (микровычислители выключены), IC_addr = 0 (микросхема не отвечает по адресу). Именно так проявляется ошибка порядка прожига. Исправление: найти микросхему (шаги ниже) и прожечь BOTP полностью — как минимум область регистров конфигурации (слова 504–511).
  2. Неверно задан делитель тактирования OTP (BOTP_clkdel): инициализация выполняется на частоте выше 1 МГц и не завершается. Исправление: найти микросхему, записать корректный INIT_conf и перепрограммировать UOTP.

В обоих случаях микросхема не повреждена. Порядок восстановления:

  1. Найдите адрес микросхемы, перебирая в регистре BUS_addr значения 1…255 до отклика (см. Методика подключения → Обнаружение микросхемы).
  2. Выполните исправление по соответствующей причине выше.
  3. Проверьте автостарт: снимите питание (или подайте сброс) — микросхема должна инициализироваться и отвечать.

Подробно — в разделах ПЗУ и Порядок программирования ПЗУ.

Связанные ресурсы​