Постоянное запоминающее устройство
Структура
Микросхема содержит два сегмента ПЗУ для хранения пользовательских настроек, необходимых для автоматической инициализации регистров после подачи напряжения питания или сигнала сброса.
ПЗУ с параллельным доступом
ПЗУ с параллельным доступом активируется непосредственно при включении питания и содержит 2 ячейки, которые неразрывно связаны с управляющими регистрами PLL_config и INIT_conf. На рисунке ниже представлена структура ячейки ПЗУ.

Доступ к настройкам PLL_config и INIT_conf осуществляется через управляющий регистр UOTP_ctrl, который содержит три бита: WATCH_ROM_UVAL, PROG_NEW_UVAL и OVERRIDE_UVAL. По умолчанию значения регистров PLL_config и INIT_conf равны нулю.
Для временного переопределения этих значений (до снятия питания) необходимо записать требуемые данные в соответствующие регистры (PLL_config и INIT_conf), а затем установить бит OVERRIDE_UVAL в логическую «1». При этом заданные значения сохраняются даже при выполнении программного сброса с помощью бита MANUAL_NRST_PLL (путем записи нуля, а затем единицы).
Для программирования этих значений в энергонезависимую память ПЗУ необходимо выполнить следующую последовательность действий:
- Записать в регистры PLL_config и INIT_conf нужные параметры.
- Убедиться в корректности записи путем обратного чтения (при
OVERRIDE_UVAL = 1). - Установить бит PROG_NEW_UVAL и подать напряжение программирования 9,8 В ± 0,3 В на вывод
VPP. - По истечении заданного времени снять напряжение
VPPи сбросить бит PROG_NEW_UVAL. - Установить бит WATCH_ROM_UVAL в логическую «1».
- Считать значения из PLL_config и INIT_conf, чтобы подтвердить успешность записи.
Если считанные значения не совпадают с заданными, операцию программирования следует повторить.
Обратите внимание: в состав регистра INIT_conf входит бит OTP_init_on — разрешение автозагрузки конфигурации из BOTP при включении питания. Прожигать его в значение «1» допускается только после полного прожига и успешной проверки BOTP — см. Порядок программирования ПЗУ.
ПЗУ с последовательным доступом

Второй сегмент ПЗУ предназначен для инициализации регистров конфигурации и ячеек памяти микровычислителей при включении питания. ПЗУ содержит 512 16-битных слов. Если выставлен бит OTP_init_on, после снятия сигнала сброс (при наличии тактирования), контроллер инициализации последовательно считывает данные ячеек ПЗУ и записывает в соответствующие регистры. Порядок записи жестко определен и неизменен.(см таблицу 12).
Таблица 12. Соответствие адресов ячеек памяти ПЗУ и конфигурационных регистров
| + | 2 x 0 | 2 x 1 | 2 x 2 | 2 x 3 | 2 x 4 | 2 x 5 | 2 x 6 | 2 x 7 |
|---|---|---|---|---|---|---|---|---|
| 2 x 0 | 0 cpu1 | 1 cpu1 | 2 cpu1 | 3 cpu1 | 4 cpu1 | 5 cpu1 | 6 cpu1 | 7 cpu1 |
| 2 x 8 | 8 cpu1 | 9 cpu1 | 10 cpu1 | 11 cpu1 | 12 cpu1 | 13 cpu1 | 14 cpu1 | 15 cpu1 |
| 2 x 16 | 16 cpu1 | 17 cpu1 | 18 cpu1 | 19 cpu1 | 20 cpu1 | 21 cpu1 | 22 cpu1 | 23 cpu1 |
| 2 x 24 | 24 cpu1 | 25 cpu1 | 26 cpu1 | 27 cpu1 | 28 cpu1 | 29 cpu1 | 30 cpu1 | 31 cpu1 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2 x 232 | C1KampS | C1KampC | C1KbiasS | C1KbiasC | C1fbias | C1ExPhShft | C1ExoStngs | C1EXInc |
| 2 x 240 | C1Amp_th | C1InputStngs | C1Lock_th | C1Zero | C1Mask | C1KonturStngs | C1ResCntrl | C1Vcnt_bound |
| 2 x 248 | 233 cpu1 | 234 cpu1 | 235 cpu1 | 236 cpu1 | 233 cpu2 | 234 cpu2 | 235 cpu2 | 236 cpu2 |
| 2 x 256 | 0 cpu2 | 1 cpu2 | 2 cpu2 | 3 cpu2 | 4 cpu2 | 5 cpu2 | 6 cpu2 | 7 cpu2 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2 x 488 | C2KampS | C2KampC | C2KbiasS | C2KbiasC | C2fbias | C2ExPhShft | C2ExoStngs | C2EXInc |
| 2 x 496 | C2Amp_th | C2InputStngs | C2Lock_th | C2Zero | C2Mask | C2KonturStngs | C2ResCntrl | C2Vcnt_bound |
| 2 x 504 | IC_addr | ADC_config | Mask_Stat | Flags_delay | MR_lock | CMP_lth | AFE_config | Mode_config |
Запись и чтение ПЗУ производится с помощью управляющих регистров BOTP_addr, BOTP_data, BOTP_out, BOTP_ctrl.
Для корректной работы ПЗУ (записи и чтения, в т.ч. при инициализации после включения питания) требуется настройка тактирования. Исходя из значения частоты FINT требуется выбрать значение BOTP_clkdel в соответствии с таблицей делителей в описании регистров так, чтобы частота тактирования ПЗУ Fclk_rom = FINT / N не превышала 1 МГц. Например, при FINT = 10 МГц значение BOTP_clkdel должно быть не меньше 3: при BOTP_clkdel = 2 делитель N = 8 даёт Fclk_rom = 1,25 МГц (превышает 1 МГц), а при BOTP_clkdel = 3 делитель N = 12 даёт Fclk_rom ≈ 833 кГц. При FINT = 60 МГц минимально допустимое значение — BOTP_clkdel = 11 (N = 64, Fclk_rom ≈ 938 кГц): при BOTP_clkdel = 10 делитель N = 56 даёт Fclk_rom ≈ 1,07 МГц, что превышает ограничение.
Для записи данных в ячейку ПЗУ по указанному адресу требуется записать целевой адрес в регистр BOTP_addr, а записываемое значение — в регистр BOTP_data. Установить бит NCEN в лог. «0», бит SLEEP в лог. «0», бит PGM в лог. «1». Затем поднять напряжение на выводе VPP с уровня чтения 3,3 В до напряжения программирования 9,8 В ± 0,3 В, выдержать 200 мс, после чего вернуть напряжение VPP на уровень чтения 3,3 В, сбросить бит PGM, установить бит REN и проверить записанное значение с помощью считывания ячейки BOTP_data.
Внимание! Если Вы прожгли бит OTP_init_on, при подаче питания микросхема не отвечает, то вероятной причиной является отсутствие надлежащей настройки делителя частоты. Для того чтобы микросхема ответила в этом состоянии нужно найти её IC_addr, путём последовательной записи в регистр BUS_addr всех 255 возможных значений от 1 до 255 (см. раздел Методика подключения → Обнаружение микросхемы). После нахождения адреса, нужно запрограммировать делитель BOTP_clkdel на значение, обеспечивающее Fclk_rom ≤ 1 МГц (подробно в описании BOTP_clkdel).
Внимание! Чтение ячеек последовательной ПЗУ после инициализации по событию подачи питания или сброса будет давать нулевые значения. Для того чтобы прочитать необходимо выставить бит OVERRIDE_UVAL, снять бит OTP_init_on, далее снять MANUAL_NRST_PLL, далее установить MANUAL_NRST_PLL, и тогда ячейки ПЗУ будут читаться.
Порядок программирования ПЗУ
Автозагрузка конфигурации при включении питания включается битом OTP_init_on регистра INIT_conf. Этот бит принадлежит ПЗУ с параллельным доступом (UOTP) и должен прожигаться в последнюю очередь — только после полного прожига и успешной проверки BOTP. Правильная последовательность программирования ПЗУ:
- Тактирование. Настройте PLL_config и выберите значение BOTP_clkdel по таблице делителей (см. описание регистров) так, чтобы частота тактирования ПЗУ Fclk_rom = FINT / N не превышала 1 МГц.
- Прожиг UOTP без автозагрузки. Запишите и прожгите в UOTP регистры PLL_config и INIT_conf с выбранным значением BOTP_clkdel; бит OTP_init_on при этом должен быть равен 0 (последовательность прожига — в разделе ПЗУ с параллельным доступом).
- Полный прожиг BOTP. Прожгите все 512 ячеек BOTP, обязательно включая область регистров конфигурации — ячейки 504–511 (IC_addr, ADC_config, Mask_Stat, Flags_delay, MR_lock, CMP_lth, AFE_config, Mode_config — см. таблицу 12). Пропускать ячейки нельзя: незаполненная (пустая) ячейка читается как ноль, и при автозагрузке соответствующий регистр будет инициализирован нулём.
- Проверка BOTP. Прочитайте все 512 ячеек и убедитесь, что содержимое совпадает с заданным (о порядке чтения — предупреждение выше). При несовпадении повторите прожиг.
- Включение автозагрузки. Повторно прожгите INIT_conf в UOTP со значением OTP_init_on = 1 (до этого бит должен быть прожжён нулём). Значение BOTP_clkdel и остальные биты изменять нельзя.
- Проверка автостарта. Снимите питание (или подайте сброс) и убедитесь, что микросхема самостоятельно инициализировалась из ПЗУ и работоспособна.
Внимание! Если прожечь бит OTP_init_on до программирования BOTP (как минимум — области регистров конфигурации, ячейки 504–511), то при каждом включении питания контроллер инициализации запишет во все регистры содержимое пустой ПЗУ — нули: микровычислители будут выключены (Mode_config = 0), микросхема не будет отвечать по последовательному интерфейсу (IC_addr = 0) и окажется полностью неработоспособной. Микросхема при этом не повреждается, но будет находиться в неизвестном состоянии — для её возвращения к работоспособности потребуются значительные усилия.