Программирование ARM nRF52: контроллер энергонезависимой памяти NVMC Tue, January 25 2022  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

nRF52: контроллер энергонезависимой памяти NVMC Печать
Добавил(а) microsin   

Контроллер энергонезависимой памяти NVMC (Non-Volatile Memory Controller) используется для записи и стирания внутренней памяти FLASH [2] и UICR [3].

Примечание: расшифровку незнакомых терминов и аббревиатур см. в Словарике [6].

Перед тем, как может быть выполнена реальная запись в энергонезависимую память, NVMC должен быть разрешен NVMC для записи с помощью CONFIG.WEN. Подобным образом, чтобы можно было выполнить реальное стирание, NVMC также должен быть разрешен для стирания в CONFIG.EEN, см. описание регистра CONFIG. Пользователь должен гарантировать, что запись и стирание не разрешены одновременно. Невыполнение этого условия может привести к непредсказуемому поведению чипа.

Ресурс записи/стирания памяти FLASH ограничен. К примеру, для nRF51822 гарантированное количество циклов записи/стирания 20000, а для nRF52832 всего лишь 10000. Время хранения информации 10 лет при температуре 40°C. Подробнее см. даташит на используемый микроконтроллер, раздел "Absolute maximum ratings".

[Запись в память FLASH]

Когда разрешена запись FLASH, она записывается путем записи полного 32-разрядного слова по байтовому адресу, выровненному на размер слова (4 байта).

Исходное, "стертое" состояние бит памяти FLASH это лог. 1. NVMC может записывать в биты только лог. 0. Таким образом, если в какой-то бит записан лог. 0, в него нельзя записать лог. 1 без полного стирания страницы FLASH, где находится слово с этим нулевым битом.

Как показано в общем описании памяти [2], память FLASH поделена на несколько страниц, каждая из страниц в свою очередь поделена на несколько блоков. Один и тот же блок FLASH может быть записан только лишь nWRITE раз до выполнения операции стирания через стирание страницы или полное стирание (с использованием ERASEPAGE или ERASEALL соответственно). Размер страницы и размер блока зависят от модели чипа. Например, для nRF52832 размер страницы составляет 4096 байт, а размер блока 512 байт.

С помощью регистрового интерфейса NVMC могут записываться только 32-разрядные слова. Чтобы записать во FLASH порцию данных, меньшую по размеру, чем 32 бита, записывайте эти данные как 32-битное слово, установив на нем в лог. 1 все биты, которые не должны быть изменены (не используются). Следует отметить, что в этом случае по-прежнему действует ограничение на количество операций записи в блок (nWRITE).

Время записи слова FLASH определяется tWRITE. Когда NVMC занят операцией записи FLASH, работа CPU приостанавливается.

Разрешается записывать только те данные, адрес которых выровнен на размер слова (адрес нацело делится на 4). Попытка записи по произвольному адресу байта или по адресу, выровненному на половину слова, может привести к отказу hard fault.

[Стирание страницы FLASH]

Когда разрешено стирание, память FLASH может стираться постранично с помощью регистра ERASEPAGE.

После стирания страницы FLASH все её биты данных переходят в состояние лог. 1. Время стирания страницы определяется tERASEPAGE. Когда NVMC занят операцией стирания FLASH, работа CPU приостанавливается.

[Запись регистров конфигурации пользователя (UICR)]

Регистры UICR записываются точно так же, как и память FLASH. После того, как регистр UICR было записан, новая конфигурация UICR вступит в силу только после сброса.

Точно так же, как и для FLASH, регистры UICR могут записываться только nWRITE раз, после чего для последующей записи должна быть выполнена операция стирания (ERASEUICR или ERASEALL).

Время записи слова в UICR определяется tWRITE. Когда NVMC занят операцией записи UICR, работа CPU приостанавливается.

[Стирание регистров конфигурации пользователя (UICR)]

Когда стирание разрешено, UICR может быть стерт с помощью регистра ERASEUICR.

После стирания UICR все биты в UICR установятся в лог. 1. Время, занимаемое стиранием UICR, определяется tERASEPAGE. Когда NVMC занят операцией стирания UICR, работа CPU приостанавливается.

[Полное стирание]

Когда стирание разрешено, вся память FLASH и UICR могут быть стерты с использованием регистра ERASEALL. ERASEALL стирает заводские конфигурационные регистры FICR [4].

Время, занимаемое выполнением команды ERASEALL, определяется tERASEALL. Когда NVMC занят операцией стирания, работа CPU приостанавливается.

[Кэш]

В NVMC может быть разрешен кэш инструкций (instruction cache, I-Cache) для шины ICODE. Распределение адресов в карте памяти см. в [2].

Попадание в кэш (cache hit) означает, что код инструкции будет выбран из быстрой памяти без задержек на такты ожидания (0 wait-state) вместо долгого обращения к физической ячейке FLASH. При промахах мимо кэша (cache miss), при доступе к инструкциям добавляется некоторое количество тактов ожидания (wait-states). Это происходит из-за необходимости физического доступа к коду программ (выборки инструкции или данных), находящегося в памяти FLASH. Количество тактов ожидания зависит от рабочей частоты процессора (подробнее см. [6]).

Разрешение кэша может повысить производительность CPU и снизить количество циклов ожидания при доступе к FLASH. Повышение производительности зависит от частоты попаданий к кэш. Однако когда кэш разрешена, она потребляет дополнительный ток. Если уменьшение среднего тока из-за уменьшенного доступа к флэш-памяти больше, чем потребляемый ток кэш-памяти, то средний ток для выполнения программного кода уменьшится.

Когда кэш запрещена, она не потребляет дополнительный ток, и не поддерживает состояние своих данных.

Можно разрешить профайлинг кэша (cache profiling), чтобы проанализировать производительность кэша для программы, используя регистр ICACHECNF. Когда профайлинг разрешен, регистры IHIT и IMISS инкрементируются для каждого попадания и промаха кэша соответственно. Регистры профайлинга попаданий и промахов не переходят в 0 при своем переполнении. Если достигнуто их максимальное значение, то для получение корректных значений профайлинга рассматривайте более короткий интервал накопления статистики попаданий и промахов.

[Регистры NVMC]

Таблица 1. Экземпляры NVMC, базовый адрес начала адресного пространства регистров.

Баз. адрес Периф. устройство Экз. Описание
0x4001E000 NVMC NVMC Non-Volatile Memory Controller

Таблица 2. Обзор регистров NVMC.

Регистр Смещ. Описание
READY 0x400 Флаг готовности.
CONFIG 0x504 Регистр конфигурации.
ERASEPAGE 0x508 Регистр для стирания страницы в области Code.
ERASEPCR1 Устаревшее обозначение ERASEPAGE.
ERASEALL 0x50C Регистр для стирания всей энергонезависимой памяти пользователя.
ERASEPCR0 0x510 Устарело. Регистр для стирания страницы в области Code, делает то же самое, что и ERASEPAGE.
ERASEUICR 0x514 Регистр для стирания регистров информации конфигурации пользователя (UICR).
ICACHECNF 0x540 Регистр конфигурации кэша кода инструкций (I-Code).
IHIT 0x548 Регистр попаданий в кэш инструкций.
IMISS 0x54C Регистр промахов кэша инструкций.

Смещение адреса: 0x400. Это регистр только для чтения, показывает готовность интерфейса NVMC (занят ли NVMC какой-либо операцией).

Биты регистра READY:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A R READY 0: Busy, контроллер NVMC занят выполнением какой-либо операции.
1: Ready, контроллер NVMC готов для запуска операции записи или стирания.

Смещение адреса: 0x504. Задает рабочую конфигурацию NVMC.

Биты регистра CONFIG:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id                                                             A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW WEN Задает режим доступа к памяти программ. Настоятельно рекомендуется активировать доступ на запись или стирание только в те моменты времени, когда это реально необходимо. Разрешение записи или стирания переводит кэш в недостоверное состояние, и кэш остается в недостоверном состоянии.
0: Ren, разрешен доступ только на чтение.
1: Wen, запись разрешена.
2: Een, стирание разрешено.

Смещение адреса: 0x508. Регистр для стирания страницы FLASH в области Code.

Биты регистра ERASEPAGE:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW ERASEPAGE Регистр для запуска операции стирания страницы в области Code. Записываемое значение это абсолютный адрес, принадлежащей стираемой странице (адрес первого слова на странице FLASH).

Обратите внимание, что должно быть разрешено стирание кода путем записи Een в поле CONFIG.WEN перед тем, как страницу можно будет стереть. Попытка стереть страницу, которая не находится в области кода, может привести к непредсказуемому поведению, например может быть стерта не та страница.

Смещение адреса: 0x50C. Регистр для стирания всей энергонезависимой памяти пользователя (FLASH и UICR).

Биты регистра ERASEALL:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW ERASEALL Регистр для запуска операции стирания всей памяти пользователя, включая UICR.
0: NoOperation, нет операции.
1: Erase, запуск стирания памяти чипа.

Обратите внимание, что должно быть разрешено стирание кода путем записи Een в поле CONFIG.WEN перед тем, как можно будет записать ERASEALL, чтобы выполнить полное стирание.

Смещение адреса: 0x510. Регистр для стирания страницы в области Code. Эквивалент ERASEPAGE.

Смещение адреса: 0x514. Регистр для стирания регистров конфигурации пользователя (User Information Configuration Registers).

Биты регистра ERASEUICR:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id                                                               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW ERASEUICR Регистр для запуска операции стирания регистров конфигурации пользователя (UICR).
0: NoOperation, нет операции.
1: Erase, запуск стирания UICR.

Смещение адреса: 0x540. Регистр конфигурации кэша I-Code.

Биты регистра ICACHECNF:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id                                               B               A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW CACHEEN Разрешение кэша.
0: Запрет кэша, делает содержимое всех ячеек кэша недостоверным.
1: Разрешение кэша.
B RW CACHEPROFEN Разрешение профайлинга кэша.
0: запрет cache profiling.
1: разрешение cache profiling.

Смещение адреса: 0x548. Регистр счетчика попаданий в кэш I-Code.

Биты регистра IHIT:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW HITS Количество попаданий в кэш.

Смещение адреса: 0x54C. Регистр счетчика промахов мимо кэша I-Code.

Биты регистра IMISS:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW MISSES Количество промахов кэша.

[Электрические параметры NVMC]

Таблица 3. Интервалы времени программирования FLASH.

Симв. Описание min Typ. MAX Ед.
nWRITE,BLOCK Количество разрешенных операций записи в блок между операциями стирания страницы, которой этот блок принадлежит.   181    
tWRITE Время записи одного слова. 67.5   338 мкс
tERASEPAGE Время стирания одной страницы FLASH. 2.05   89.7 мс
tERASEALL Время полного стирания FLASH. 6.72   295.3

Таблица 4. Размер кэша.

Симв. Описание min Typ. MAX Ед.
nWRITE,BLOCK Количество разрешенных операций записи в блок между операциями стирания страницы, которой этот блок принадлежит.   2048   байт

[Ссылки]

1. NVMC Non-volatile memory controller nRF52832 site:nordicsemi.com.
2. nRF52: память.
3. nRF52: регистры конфигурации пользователя UICR.
4. FICR Factory information configuration registers nRF52832 site:nordicsemi.com.
5. CPU nRF52832 Product Specification site:nordicsemi.com.
6. nRFxx: аббревиатуры и термины.

 

Добавить комментарий


Защитный код
Обновить

Top of Page