20. Контроллер встроенной флэш-памяти (EFC)
20.1 Обзор
Контроллер встроенной флэш-памяти (EFC) является частью контроллера памяти (MC) и предоставляет интерфейс для доступа к блокам флэш-памяти по внутренней 32-битной шине. Это позволяет значительно увеличить скорость выборки команд из флэш-памяти при работе ядра процессора в режиме Thumb (16-битная система команд) благодаря работе 32-битного буфера. Более того, контроллер встроенной флэш-памяти поддерживает полный набора команд для чтения, записи, стирания флэш-памяти, установки и снятия битов защиты.
20.2 Функциональное описание
20.2.1 Организация встроенной флэш-памяти
Интерфейсы встроенной флэш-памяти непосредственно подключены к внутренней 32-битной шине, построенной на основе нескольких нижеследующих интерфейсов.
- Простая организация памяти: нескольких страниц одинакового размера.
- Два 32-битных буфера чтения, предназначенных для увеличения скорости чтения флэш-памяти (см. "Команды чтения" на стр. 101).
- Один буфер записи для хранения данных при программировании одной страницы флэш-памяти. Размер этого буфера равен размеру одной страницы и доступ к нему разрешен только для записи. Кроме того, с помощью буфера записи осуществляется адресация флэш-памяти во всей области размером 1 Мбайт (см. "Команды записи" на стр. 101).
- Несколько бит защиты (блокировочные биты) для запрета стирания и записи флэш-памяти. Каждая защищаемая область флэш-памяти (все области имею равный размер) состоит фиксированного числа страниц, размещенных последовательно. Каждая одна такая область непосредственно связана только с одним битом защиты.
- Несколько бит энергонезависимой памяти - NVM-биты (Non Volatile Memory) общего назначения. Каждый из этих битов отвечает за управление определенными узлами микроконтроллера. Для получения более подробной информации о каждом NVM-бите см. соответствующие главы этого документа.
Размер встроенной флэш-памяти, размер её страниц и организация битов защиты описаны в главе 9 "Память".
Таблица 20-1. Число бит защиты и NVM-бит общего назначения для членов семейства AT91SAM7S
AT91SAM7S256 |
AT91SAM7S128 |
AT91SAM7S64 |
AT91SAM7S321 |
AT91SAM7S32 |
Параметр |
2 |
2 |
2 |
2 |
2 |
Число NVM-бит |
16 |
8 |
16 |
8 |
8 |
Число бит защиты |
Рисунок 20-1. Карта распределения встроенной флэш-памяти памяти
20.2.2 Команды чтения
Для ускорения процесса чтения флэш-памяти в контроллер EFC встроен специально предназначенный 32-битный буфер. Благодаря наличию этого буфера при работе процессора в режиме Thumb (16-битная система команд) обращение к флэш-памяти происходит в два раза реже, за счет чего увеличивает скорость выборки команд и, следовательно, увеличится скорость работы процессора (рис. 20-2, рис. 20-3 и рис. 20-4).
Эта оптимизация осуществляется только при выборке команд, а при чтении данных из флэш-памяти - не осуществляется.
Команды чтения могут быть выполнены как без включения дополнительных циклов ожидания, так и с ними. Допустима установка только до трех (включительно) циклов ожидания в поле FWS (Flash Wait State) регистра режима флэш-памяти MC_FMR (см. "Регистр режима флэш-памяти", стр. 110). При FWS = 0 обращение к встроенной флэш-памяти осуществляется за один цикл.
Доступ к флэш-памяти возможен 32-битный (словарный), 16-битный (полуслово) и 8-битный.
Поскольку размер встроенной флэш-памяти меньше микроконтроллера, чем размер адресного пространства выделенной для нее внутренней памяти (1 Мбайт), то в контроллере памяти реализовано т.н. дублирование этого блока флэш-памяти по всему выделенному для нее адресному пространству. Например, для AT91SAM7S64 флэш-память размером 64 Кбайта отображена в этом адресном пространстве ровно 1024/64 = 16 раз (прим. переводчика).
Рисунок 20-2. Оптимизация при чтении кода команды в режиме Thumb для FWS = 0
Рисунок 20-3. Оптимизация при чтении кода команды в режиме Thumb для FWS = 1
Рисунок 20-4. Оптимизация при чтении кода команды в режиме Thumb для FWS = 3
20.2.3 Команды записи
Область внутренней памяти, зарезервированной для встроенной флэш-памяти, также может быть записана только через специальный буфер. При выполнении команд записи во флэш-память во внимание принимаются только младшие 8 бит адреса (т.к. речь идет о 32-битных данных, то фактически во внимание принимаются 10 младших бит адреса). В свою очередь старшие 10 бит адреса внутренней области (1 Мбайт), зарезервированной для флэш-памяти, адресуют это т.н. окно, размер которого равен 256 словам (1024 байта). Тактом образом, вся эта внутренняя память состоит из 1024 таких окон.
Любая команда записи во встроенную флэш-память может быть запрещена с помощью модуля защиты памяти MPU (Memory Protection Unit).
Запись во флэш-память память возможна только словарно (32 бита), поэтому любая попытка записи полуслов (16 бит) или байт (8 бит) будет вызывать непредсказуемый результат.
Команды записи выполняются за число циклов ожидания (поле FWS в регистре MC_FMR), указанных для команд чтения, плюс еще один дополнительный цикл, кроме случая при FWS = 3 (см. "Регистр режима флэш-памяти", стр. 110).
20.2.4 Система команд контроллера флэш-памяти
В состав EFCS входят команды для программирования флэш-памяти, команды установки защиты (снятия защиты) ее областей, команды последовательного программирования и установки защиты флэш-памяти, команда полного стирания всей флэш-памяти.
Таблица 20-2. Система команд контроллера флэш-памяти
Команда |
Значение |
Мнемоника |
Запись страницы |
0x01 |
WP |
Установка биты защиты |
0x02 |
SLB |
Запись страницы и установка биты защиты |
0x03 |
WPL |
Снятие бита защиты |
0x04 |
CLB |
Стирание всей флэш-памяти |
0x08 |
EA |
Установка NVM-бита общего назначения |
0x0B |
SGPB |
Снятие NVM-бита общего назначения |
0x0D |
CGPB |
Установка бита секретности |
0x0F |
SSB |
Перед выполнением любой из указанных команд в поле FCMD регистра MC_FCR должен быть указан код этой команды. Поскольку доступ к регистру MC_FCR возможен только по чтению, то флаг FRDY автоматически сбрасывается. После окончания выполнения команды флаг FRDY автоматически устанавливается, что может вызывать соответствующее прерывание, если оно разрешено через контроллер памяти (MC).
Все команды флэш-памяти защищены от случайного выполнения с помощью одного общего ключевого слова (keyword), которое необходимо указывать в старших 8 битах регистра MC_FCR каждый раз при выполнении очередной команды.
Команда с неверно указанным ключевым словом и/или неверно указанным кодом этой команды не будет выполнена, даже в том случае, если установлен флаг PROGE в регистре MC_FSR. Этот флаг будет автоматически сброшен при очередном чтении регистра MC_FSR.
Попытка выполнения команды записи или стирании страницы, размещенной в защищенной области, не окажет влияния на содержимое флэш-памяти (фактически, эта команда будет проигнорирована), даже в том случае, если установлен флаг PROGE в регистре MC_FSR. Этот флаг будет автоматически сброшен при очередном чтении регистра MC_FSR.
Рисунок 20-5. Блок-схема процесса выполнения команды
Для правильного выполнения команд флэш-памяти в поле длительность цикла в микросекундах (FMCN) в регистре режима контроллера флэш-памяти (MC_FMR) должно быть записано корректное значение (см. "Регистр режима контроллера флэш-памяти памяти", стр. 110).
20.2.4.1 Программирование флэш-памяти
Всего несколько команд могут использоваться для программирования флэш-памяти.
Согласно технологии работы флэш-памяти требуется обязательное ее стирание непосредственно перед процессом ее программирования. Может быть выполнено либо стирание всей области флэш-памяти, либо отдельной страницы с помощью сброса флага NEBP в регистре MC_FMR непосредственно записью кода команды в регистр MC_FCR.
При установке флага NEBP в регистре MC_FMR страница может быть запрограммирована за определенное число этапов, если перед этим она уже очищена (см. рис. 20-6).
Рисунок 20-6. Пример программирования участка страницы флэш-памяти
После окончания процесса программирования страница может быть защищена от случайного или преднамеренного стирания или записи (при защищается вся область, в которую входит эта страница). С помощью команды WPL защита может быть установлена автоматически сразу после окончания цикла записи страницы.
Записываемые данные хранятся во внутреннем буфере, размер которого равен размеру одной страницы флэш-памяти. Этот внутренний буфер охватывает все адресное пространство внутренней флэш-памяти, т.е. фактически может быть целиком отображен на любую из ее страниц.
Примечание: запись байтами (8 бит) или полусловами (16 бит) запрещена, т.к. как вызывает искажение записываемых данных.
Процесс записи данных во флэш-память, предварительно размещенных во внутреннем буфере, управляется с помощью командного регистра флэш-памяти (MC_FCR). Ниже приведена последовательность работы с этим регистром.
- Запись всей страницы, которая может быть размещена по любому адресу внутри всего адресного пространства флэш-памяти, возможна только словарно (32-битные данные).
- Цикл записи страницы начинается сразу после того, как в регистре MC_FCR указан номер этой страницы и сама код команды записи. При этом автоматически сбрасывается флаг FRDY в регистре статуса программирования флэш-памяти (MC_FSR).
- Сразу после завершения цикла программирования устанавливается флаг FRDY в регистре статуса программирования флэш-памяти (MC_FSR). Если разрешены прерывания от флага FRDY, то в контроллере памяти (MC) возникнет соответствующий сигнал прерывания.
В процессе выполнения цикла программирования могут возникать ошибки, которые фиксируются в регистре MC_FSR. Ниже приведены эти ошибки.
- Ошибка программирования (Programming Error): в регистр MC_FSR было записано неверное ключевое слово и/или указана недопустимая команда.
- Ошибка защиты (Lock Error): была осуществлена попытка программирования защищенной области. Для выполнения корректного программирования этой области ее защита предварительно должна быть снята с помощью команды снятия защиты.
20.2.4.2 Команда полного стирания флэш-памяти
Вся реализованная на кристалле флэш-память может быть очищена, если в регистре MC_FCR записана команда "стереть все" - EA (Erase All).
Стирание всей флэш-памяти возможно только тогда, когда ни одна из ее областей не защищена от стирания и записи (не установлен не один из флагов защиты флэш-памяти). В противном случае (установлен хотя бы один из флагов защиты) эта команда будет проигнорирована. Если установлен флаг LOCKE в регистре MC_FMR, то возникнет соответствующий сигнал прерывания.
После выполнения последней команды программирования или стирания флэш-памяти в регистре MC_FSR автоматически будет установлен флаг FRDY. При этом на выходе контроллера памяти (MC) сразу же возникнет сигнал соответствующего прерывания, если оно разрешено.
В процессе выполнения цикла программирования могут возникать ошибки, которые фиксируются в регистре MC_FSR. Ниже приведены эти ошибки.
- Ошибка программирования (Programming Error): в регистр MC_FSR было записано неверное ключевое слово (keyword) и/или указана недопустимая команда.
- Ошибка защиты (Lock Error): была осуществлена попытка программирования защищенной области. Для выполнения корректного программирования этой области ее защита предварительно должна быть снята с помощью команды снятия защиты.
20.2.4.3 Биты защиты флэш-памяти
Каждый из битов защиты привязан к определенной области флэш-памяти, состоящей из определенного числа страниц. Назначение этих битов - защита флэш-памяти от случайного или преднамеренного ее стирания/программирования.
В процессе производства микроконтроллера в нем могут быть установлены некоторые из битов защиты. Их назначение - защита определенной области флэш-памяти, в которой по умолчанию размещена программа, записанная в микроконтроллер при его производстве. Перед программированием/стиранием защищенной области ее защита должна быть снята.
Ниже указана последовательность установки защиты одной области:
<
в регистр команды флэш-памяти должно быть записано следующее значение: (0x5A << 24) | (lockPageNumber << 8 & PAGEN) | SLB, где lockPageNumber - порядковый номер защищаемой области.
после завершения выполнения команды защиты будет установлен флаг FRDY в регистре MC_FSR. При этом на выходе контроллера памяти (MC) сразу же возникнет сигнал соответствующего прерывания, если оно разрешено.
ul>
Если в процесс выполнения команды возникла ошибка (в регистре MC_FCR указано неверное ключевое слово и/или неверный код команды), то это факт будет зафиксирован в регистре MC_FSR.
После установки защиты ее можно снять, ниже указана последовательность снятия защиты одной области:
- в регистр команды флэш-памяти должно быть записано следующее значение: (0x5A << 24) | (lockPageNumber << 8 & PAGEN) | CLB, где lockPageNumber - порядковый номер защищаемой области.
- после завершения выполнения команды защиты будет установлен флаг FRDY в регистре MC_FSR. При этом на выходе контроллера памяти (MC) сразу же возникнет сигнал соответствующего прерывания, если оно разрешено.
Если в процесс выполнения команды возникла ошибка (в регистре MC_FCR указано неверное ключевое слово и/или неверный код команды), то это факт будет зафиксирован в регистре MC_FSR.
Выполнение команды снятия бита защиты физически выполняет запись "1" в соответствующий бит, хотя при чтении регистра MC_FSR соответствующий бит LOCKx читается как "0". И наоборот, выполнение команды установки бита защиты физически выполняет запись "0" в соответствующий бит, а при чтении регистра MC_FSR соответствующий бит LOCKx читается как "1".
Примечание: независимо от наличия защиты флэш-памяти доступ к ней по-прежнему возможен по чтению.
20.2.4.4 NVM-биты общего назначения
Биты общего назначения - NVM-биты - не связаны со встроенной флэш-памятью, а предназначены для защиты других узлов микроконтроллера. Каждый из этих битов может быть установлен (сброшен) независимо от остальных. Для получения подробностей о NVM-битах см. соответствующие главы этого документа.
Ниже приведена последовательность активации NVM-битов общего назначения.
- Выполнение команды "установка NVM-битов общего назначения" (Set General Purpose NVM Bit - SGPB) посредством записи в "регистр команд флэш-памяти" (MC_FCR) кода этой команды и количества этих бит в поле PAGEN этого же регистра.
- после завершения выполнения команды SGPB будет установлен флаг FRDY в регистре MC_FSR. При этом на выходе контроллера памяти (MC) сразу же возникнет сигнал соответствующего прерывания, если оно разрешено.
В процессе выполнения цикла программирования могут возникать ошибки, которые фиксируются в регистре MC_FSR. Ниже приведены эти ошибки.
- Ошибка программирования: в регистр MC_FSR было записано неверное ключевое слово и/или указана недопустимая команда.
- В поле PAGEN регистра MC_FCR указано число бит общего назначения, большее, чем максимально допустимое кол-во реализованных в кристалле NVM-бит.
Ниже приведена последовательность очистки NVM-битов общего назначения.
- Выполнение команды "очистка NVM-битов общего назначения" (Clear General Purpose NVM Bit - CGPB) посредством записи в "регистр команд флэш-памяти" (MC_FCR) кода этой команды и количества этих бит в поле PAGEN этого же регистра.
- после завершения выполнения команды CGPB будет установлен флаг FRDY в регистре MC_FSR. При этом на выходе контроллера памяти (MC) сразу же возникнет сигнал соответствующего прерывания, если оно разрешено.
В процессе выполнения цикла программирования могут возникать ошибки, которые фиксируются в регистре MC_FSR. Ниже приведены эти ошибки.
- Ошибка программирования: в регистр MC_FSR было записано неверное ключевое слово и/или указана недопустимая команда.
- В поле PAGEN регистра MC_FCR указано число бит общего назначения, большее, чем максимально допустимое кол-во реализованных в кристалле NVM-бит.
Выполнение команды "очистка NVM-битов общего назначения" физически выполняет запись "1" в соответствующий бит, хотя при чтении регистра MC_FSR соответствующий бит GPNVMx читается как "0". И наоборот, выполнение команды "установка NVM-битов общего назначения" физически выполняет запись "0" в соответствующий бит, а при чтении регистра MC_FSR соответствующий бит GPNVMx читается как "1".
Примечание: независимо от состояния NVM-битов общего назначения доступ к флэш-памяти всегда возможен по чтению.
20.2.4.5 Бит секретности
Бит секретности предназначается для предотвращения внешних попыток доступа к внутренней системной шине. После установки бита секретности запрещается работа интерфейса JTAG, интерфейса быстрого программирования флэш-памяти и доступ к флэш-памяти по последовательному интерфейсу. Доступ к флэш-памяти через указанные выше интерфейсы вновь разрешается только при полной очистке кристалла по внешнему выводу ERASE - см. главу 4. "Назначение выводов". При подаче на вывод ERASE высокого логического уровня (см. п. 7.4. "вывод управления стиранием") происходит очистка всей реализованной на кристалле флэш-памяти, всех битов защиты флэш-памяти, всех NVM-битов общего назначения и только после всего этого производится очистка бита секретности.
Ниже приведена последовательность установки бита секретности.
- Выполнение команды "установка бита секретности" (Set Security Bit - SSB) посредством записи в "регистр команд флэш-памяти" (MC_FCR) кода этой команды.
- после завершения выполнения команды SSB будет установлен флаг FRDY в регистре MC_FSR. При этом на выходе контроллера памяти (MC) сразу же возникнет сигнал соответствующего прерывания, если оно разрешено.
Сразу после установки бита секретности в регистре MC_FSR будет установлен флаг SECURITY.
|