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, базовый адрес начала адресного пространства регистров.
Таблица 2. Обзор регистров NVMC.
Смещение адреса: 0x400. Это регистр только для чтения, показывает готовность интерфейса NVMC (занят ли NVMC какой-либо операцией). Биты регистра READY:
Назначение бит:
Смещение адреса: 0x504. Задает рабочую конфигурацию NVMC. Биты регистра CONFIG:
Назначение бит:
Смещение адреса: 0x508. Регистр для стирания страницы FLASH в области Code. Биты регистра ERASEPAGE:
Назначение бит:
Обратите внимание, что должно быть разрешено стирание кода путем записи Een в поле CONFIG.WEN перед тем, как страницу можно будет стереть. Попытка стереть страницу, которая не находится в области кода, может привести к непредсказуемому поведению, например может быть стерта не та страница. Смещение адреса: 0x50C. Регистр для стирания всей энергонезависимой памяти пользователя (FLASH и UICR). Биты регистра ERASEALL:
Назначение бит:
Обратите внимание, что должно быть разрешено стирание кода путем записи Een в поле CONFIG.WEN перед тем, как можно будет записать ERASEALL, чтобы выполнить полное стирание. Смещение адреса: 0x510. Регистр для стирания страницы в области Code. Эквивалент ERASEPAGE. Смещение адреса: 0x514. Регистр для стирания регистров конфигурации пользователя (User Information Configuration Registers). Биты регистра ERASEUICR:
Назначение бит:
Смещение адреса: 0x540. Регистр конфигурации кэша I-Code. Биты регистра ICACHECNF:
Назначение бит:
Смещение адреса: 0x548. Регистр счетчика попаданий в кэш I-Code. Биты регистра IHIT:
Назначение бит:
Смещение адреса: 0x54C. Регистр счетчика промахов мимо кэша I-Code. Биты регистра IMISS:
Назначение бит:
[Электрические параметры NVMC] Таблица 3. Интервалы времени программирования FLASH.
Таблица 4. Размер кэша.
[Ссылки] 1. NVMC Non-volatile memory controller nRF52832 site:nordicsemi.com. |