Работа с OTP

В первую очередь микросхема 1986ВЕ8Т выделяется из всей линейки наличием вместо Flash памяти – однократно программируемой памяти (OTP). Чтобы запрограммировать данную память, необходимо выполнить определенную последовательность действий. По информации, полученной от службы технической поддержки, последовательность программирования OTP следующая:

Прошивка происходит в 3 этапа и для каждого необходим свой алгоритм FLM:

  1. Программирование, используется - 1.flm.
  2. Допрограммирование, используется - 2.flm.
  3. Верификация, используется - 3.flm.

(Алгоритмы FLM можно запросить через support@milandr.ru.)

Для использования данных файлов необходимо обеспечить тактирование процессора от внешнего генератора HSE0 с частотой 48 МГц. Внутри эта частота делится на 2, что дает 24МГц. Т.е. частоту близкую к максимальной частоте работы ОТР - 25МГц, период 40нс. Это частота на которой необходимо проводить верификацию ОТР, хотя в рабочем режима память на такой частоте работать не будет благодаря задержкам WaitCycle.

На отладочной плате на HSE0 подключен резонатор, его необходимо выпаять, а на расположенное рядом посадочное место припаять генератор на 48МГц. Вид с обратной стороны платы адаптера:

hse1_gen48mhz_forotp.jpg

Для того чтобы "прожечь" биты требуется дополнительный источник напряжения на 7,2В. На демоплате для этого есть отдельный разъем.

В итоге последовательность действий должна быть такой:

1 - Подача основного питания 3,3В.

2 - Подача напряжения программирования 7,2В.

3 - В Keil выбрать алгоритм 1.flm - нажать Download - "Программирование"

4 - В Keil выбрать алгоритм 2.flm - нажать Download - "Допрограммирование"

5 - В Keil выбрать алгоритм 3.flm - нажать Download - "Верификация".

В настройках программатора FlashDownload, там, где выбирается алгоритм flm, необходимо выставить "Do not Erase" для всех flm. При запуске 1.flm и 2.flm должна быть выставлена опция Programm. При запуске 3.flm (этап верификации) ее стоять не должно.

6 - Если верификация не прошла успешно, то повторить операции "Допрограммирование" и "Верификация" еще один раз. Если после повторного "Допрограммирования" "Верификация" все-равно проходит не успешно, то микросхема бракуется.

7 - Снять напряжение 7,2В.

8 - Снять основное напряжение.

Рекомендации, полученные от тех. поддержки:

Для того чтобы не "убить" сразу весь кристалл, отработать прошивку или версию ПО рекомендуется записывать в старшие адреса OTP памяти. Например, выбрать небольшой диапазон и осуществить туда прошивку. Запуск прошивки с такого адреса возможен через отладчик, для которого необходимо подключить setup.ini файл. Данная операция описана в мануале для запуска программы из ОЗУ, здесь подход аналогичный. Адрес памяти необходимо выбирать с учетом требований к значениям VTOR - указателю начала таблицы векторов.

Когда тестовая прошивка пройдет успешно, можно зашить финальный релиз программы в стартовые адреса, по которым программа запускается при ресете.

Кроме прошивки с помощью flm, на форуме представлен вариант прошивки через UART от одного из пользователей. У него есть интересное решение с возможностью отработки нескольких прошивок - архив PRG_OTP_UART.rar.

Вопросы

- Можно ли вторично прожигать уже прожженые 1-цы при повторном программировании?

Нет, разработчик ОТР памяти делать так не рекомендует.


- При вторичном программировании, но без подачи HV, при 5-кратном считывании проскакивают ошибки. Нормально ли это?

Высокое напряжение необходимо только при программировании. Наличие этого напряжения при считывании никакого влияния не оказывает. Жесткие реплики - это в своем роде стойкость (сопротивление) ячейки памяти к считыванию. На этапе программирования используются наиболее жествие реплики, чтобы убедиться что ячейка "прожжена" и читается правильно. При верификации используются менее жесткие реплики. В реальной эксплуатации используются наиболее мягкие реплики.

Верификация при более жестких репликах гарантирует, что в эксплуатации чтение будет успешно при различных внешних факторах, таких как температура и прочее. На этапе верификации возникновение ошибок при чтении недопустимо. На этапе программирования при чтении могут проскакивать ошибки, поскольку реплики доступа к памяти максимально жесткие.