Постоянное запоминающее устройство
Структура
Микросхема содержит два сегмента ПЗУ для хранения пользовательских настроек, необходимых для автоматической инициализации регистров после подачи напряжения питания или сигнала сброса.
ПЗУ с параллельным доступом
ПЗУ с параллельным доступом активируется непосредственно при включении питания и содержит 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, чтобы подтвердить успешность записи.
Если считанные значения не совпадают с заданными, операцию программирования следует повторить.
ПЗУ с последовательным доступом

Второй сегмент ПЗУ предназначен для инициализации регистров конфигурации и ячеек памяти микровычислителей при включении питания. ПЗУ содержит 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 | C1ResGntr1 | 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 484 | 232 cpu2 | C2KampS | C2KampC | C2KbiasS | C2KbiasC | C2fbias | C2ExPhShft | C2ExoStngs |
| 2 x 492 | C2EXInc | C2Amp_th | C2InputStngs | C2Lock_th | C2Zero | C2Mask | C2KonturStngs | C2ResGntr1 |
| 2 x 500 | C2Vcnt_bound | IC_addr | ADC_config | Mask_Stat | Flags_delay | MR_lock | CMP_lth | AFE_config |
| 2 x 508 | Mode_config | – | – | – | – | – | – | – |
Запись и чтение ПЗУ производится с помощью управляющих регистров BOTP_addr, BOTP_data, BOTP_out, BOTP_ctrl.
Для корректной работы ПЗУ (записи и чтения, в т.ч. при инициализации после включения питания) требуется настройка тактирования. Исходя из значения частоты FINT требуется записать в регистр BOTP_clkdel такое значение для деления частоты FINT (в соответствии с таблицей из описания регистров), чтобы тактовая частота на блок ПЗУ не превышала 10 МГц (значение будет уточнено после проведения испытаний на плюсе и минусе).
Для записи данных в ячейку ПЗУ по указанному адресу требуется записать целевой адрес в регистр BOTP_addr, а записываемое значение — в регистр BOTP_data. Установить бит NCEN в лог. «0», бит SLEEP в лог. «0», бит PGM в лог. «1». Затем установить напряжение VPP с 4.0В на 9.5В на время 200 мс, переключить напряжение VPP на 4.0В, сбросить бит PGM, установить бит REN и проверить записанное значение с помощью считывания ячейки BOTP_data.
Внимание! Если Вы прожгли бит INIT_on, при подаче питания микросхема не отвечает, то вероятной причиной является отсутствие надлежащей настройки делителя частоты. Для того чтобы микросхема ответила в этом состоянии нужно найти её IC_addr, путем последовательной записи в регистр BUS_addr всех 255 возможных значений от 1 до 255. После нахождения адреса, нужно запрограммировать делитель BOTP_clkdel на значение не менее ## ( определеяется по результаа испытаний)
Внимание! Чтение ячеек последовательной ПЗУ после инициализации по событию подачи питания или сброса будет давать нулевые значения. Для того чтобы прочитать необходимо выставить бит OVERRIDE_UVAL, снять бит INIT_on, далее снять MANUAL_NRST_PLL, далее установить MANUAL_NRST_PLL, и тогда ячейки ПЗУ будут читаться.