AT91SAM7 Embedded Flash Controller (EFC) |
![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Контроллер встроенной памяти (Embedded Flash Controller, EFC) входит как составная часть в контроллер памяти (Memory Controller, MC [2]), и предоставляет интерфейс к внутренней памяти FLASH через 32-битную внутреннюю шину. Это увеличивает быстродействие в режиме Thumb для выборки кода с системными 32-битными буферами. Контроллер EFC также предоставляет полный набор команд для программирования, очистки, блокировки на запись и разблокирования блоков памяти. Процессор AT91SAM7X512 оборудован двумя контроллерами EFC: EFC0 и EFC1, каждый их которых обслуживает свою половину памяти FLASH. У EFC1 не имеется функции битов защиты (Security bit) и битов общего назначения (GPNVM), подробнее см. [3]. Биты Security и GPNVM встроены только в EFC0, и они относятся к двум блокам памяти AT91SAM7X512. [Организация встроенной памяти FLASH] К встроенной памяти FLASH осуществляется прямой доступ через внутреннюю 32-битную шину. Доступ составлен из нескольких интерфейсов: • Один блок памяти (memory plane) организованный в нескольких страницах одинакового размера. Общий размер встроенной памяти FLASH, размер её страницы, организация блокировки регионов памяти FLASH описана подробно в даташите на соответствующий микроконтроллер ARM7. Таблица 19-1. Сколько бит блокировки (lock bits) и бит общего назначения (GPNVM bits) в микроконтроллерах серии AT91SAM7X.
Рис. 19-1. Организация адресного пространства встроенной памяти FLASH. [Операции чтения] Оптимизированный контроллер управляет процессом чтения встроенной в кристалл процессора памяти FLASH. Система из 2 x 32-битных буфера добавлена в порядке начала доступа к следующему адресу во время второго чтения, что увеличивает быстродействие процессора, когда он работает в режиме Thumb (16-битные инструкции). См. рис. 19-2, 19-3 и 19-4. Эта оптимизация касается только выборки кода, но не обращения к данным. Операции чтения могут быть выполнены как с добавлением тактов ожидания (wait state), так и без них. Может быть запрограммировано до 3 wait state с помощью поля FWS (Flash Wait State) в регистре режима FLASH (Flash Mode Register, MC_FMR), см. соответствующую врезку в разделе "Интерфейс программирования EFC". Если запрограммировать FWS как 0, то это разрешает доступ на чтение встроенной памяти FLASH за 1 такт ядра, без пропуска на такты ожидания. К памяти FLASH можно получить доступ через 8-, 16- и 32-битные операции чтения. Поскольку размер блока памяти FLASH меньше адресного пространства, зарезервированного под внутреннюю память, доступ к FLASH при выходе за её границы происходит с циклическим возвратом в начало области FLASH. Рис. 19-2. Оптимизация чтения кода программы в режиме Thumb для FWS=0. Рис. 19-3. Оптимизация чтения кода программы в режиме Thumb для FWS=1. Примечание: когда FWS = 1 в случае последовательных чтений все доступы выполняются за один такт (за исключением первого чтения в последовательности). Рис. 19-4. Оптимизация чтения кода программы в режиме Thumb для FWS=3. Примечание: когда FWS = 2 или 3 в случае последовательных чтений первый доступ получает FWS тактов задержки, второй доступ занимает один такт, третий занимает FWS тактов, четвертый 1 такт и т. д. [Операции записи] Внутренняя область памяти, зарезервированная для внутренней памяти FLASH, также может быть записана через буфер защелки, работающий только для записи. Операции записи учитывают только 8 младших бит адреса, и таким образом при выходе адреса за пределы области, ограниченной этими 8 битами, происходит циклический переход на начало, что повторяется 1024 раза по всему адресному пространству блока FLASH-памяти. Операции записи могут быть предотвращены путем программирования блока защиты памяти (Memory Protection Unit) процессора. Запись 8-битных и 16-битных данных во FLASH-память не допускается, и может привести к повреждению данных. Операции записи выполняются за время в количествах циклов ожидания, равное количеству циклов ожидания для чтения + 1, за исключением FWS = 3 (см. описание регистра режима FLASH MC_FMR в соответствующей врезке). [Команды FLASH] Контроллер EFC предоставляет набор команд для управления программированием памяти FLASH, блокировкой и разблокировкой секторов, последовательного программирования и блокировкой, и полной очисткой FLASH.
Чтобы запустить одну из этих команд, в поле FCMD регистра MC_FCR записывается номер команды. Как только регистр MC_FCR записан, флаг FRDY автоматически очищается. Как только текущая команда выполнена, флаг FRDY автоматически устанавливается. Если разрешено прерывание установкой бита FRDY в регистре MC_FMR, то активизируется линия прерывания контроллера памяти (Memory Controller, MC [2]). Все команды защищены одинаковым ключевым словом (ключ), которое должно быть записано в 8 старших бит регистра MC_FCR. Запись MC_FCR данными, которые не содержат корректного ключа и/или допустимой команды, не оказывают никакого эффекта и не влияют на плоскость памяти FLASH; однако установится флаг PROGE в регистре MC_FSR. Этот флаг автоматически очищается чтением регистра MC_FSR. Когда текущая команда записывает или очищает страницу в заблокированном регионе, команда не оказывает никакого влияния на память FLASH; однако установится бит LOCKE в регистре MC_FSR. Этот флаг автоматически очистится при чтении регистра MC_FSR. Рис. 19-5. Алгоритм запуска команды FLASH. Чтобы гарантировать допустимые операции с памятью FLASH, должно быть корректно запрограммировано поле количества микросекундных циклов (Flash Microsecond Cycle Number, FMCN) в регистре режима FLASH (Flash Mode Register, MC_FMR). Подробнее см. врезку с описанием регистра MC_FMR. [Программирование FLASH] Память FLASH программируется страницами. Таким образом, если необходимо поменять только несколько байт на странице, то предварительно нужно прочитать всю страницу целиком во временный буфер, заменить в этом буфере нужные байты, и после этого очистить нужную страницу и записать её. Для программирования FLASH может быть использовано несколько команд. Технология FLASH требует, чтобы перед программированием была произведена очистка - либо всей памяти FLASH, либо одной страницы, которая будет записана. За один раз может быть очищена вся память, либо может быть автоматически очищена одна страница путем очистки бита NEBP в регистре MC_FMR перед записью команды в регистр MC_FCR. Путем установки бита NEBP в регистре MC_FMR страница может быть запрограммирована за несколько шагов, если она была перед этим очищена (см. рис. 19-6). Рис. 19-6. Пример частичного программирования страницы FLASH. Режим частичного программирования (Partial Programming) работает только с 32-битными (или большей разрядности) границами. Он не может использоваться с разрядностью данных, которые меньше 32 бита (например, 8 или 16 бит). После программирования страница (весь блокируемый регион) может быть заблокирована на запись, чтобы предотвратить различные последовательности записи или очистки. Бит защиты может быть автоматически установлен после программирования, если использовать команду программирования страницы WPL. Записываемые данные сохраняются во внутреннем буфере-защелке. Размер буфера-защелки соответствует размеру страницы FLASH. Содержимое буфера-защелки циклически повторяется в адресном пространстве при пересечении адреса через границу страницы FLASH, количество повторов равно количество страниц в области памяти FLASH. Примечание: запись 8- и 16-битных данных не допускается. Такая операция может привести с непредсказуемому повреждению данных. Данные записываются в буфер-защелки перед записью команды программирования в регистр команд (Flash Command Register, MC_FCR). Последовательность алгоритма следующая: • Записывается вся страница памяти FLASH полностью, по любому адресу страницы, находящемуся во внутренней области памяти FLASH, с использованием 32-битного доступа. При этом в реальности данные записываются во внутренний буфер-защелку. Могут быть детектированы 2 ошибки в регистре MC_FSR после завершения последовательности программирования: • Programming Error (ошибка программирования): в регистр команд MC_FCR было записано неправильное ключевое слово или недопустимая команда. [Команда Erase All] Вся память полностью может быть очищена командой Erase All (EA), записанной в регистр команд MC_FCR. Операция Erase All разрешена только в том случае, если не установлен ни один бит блокировки (lock bit). Таким образом, если как минимум один регион заблокирован FLASH, установится бит LOCKE в регистре MC_FSR, и выполнение команды будет отменено. Если был записан в лог. 1 бит LOCKE в регистре MC_FMR, то будет запущено прерывание. Когда программирование завершено, установиться бит FRDY в регистре состояния FLASH (MC_FSR). Если было разрешено прерывание установкой бита FRDY в регистре MC_FMR, то будет активизирована линия прерывания контроллера MC. Во время последовательности программирования могут быть детектированы две ошибки (через регистр статуса MC_FSR): • Programming Error (ошибка программирования): в регистр команд MC_FCR было записано неправильное ключевое слово или недопустимая команда. [Защита от программирования битом блокировки] Биты блокировки (Lock bits) связаны с несколькими страницами на всей плоскости встроенной памяти FLASH. Они позволяют задать блокируемые регионы в памяти FLASH, защищенные от записи или очистки. После выхода с завода чип процессора может получить блокировку некоторых регионов внутренней памяти FLASH. Эти заблокированные регионы зарезервированы для приложения по умолчанию. Подробности см. в описании привязки по умолчанию карты встроенной памяти FLASH. Заблокированные секторы могут быть разблокированы для очистки и последующего программирования другим приложением или данными. Последовательность блокировки следующая: • В регистр команд MC_FCR должно быть записано следующее значение: (0x5A << 24) | (lockPageNumber << 8 & PAGEN) | SLB lockPageNumber это номер страницы соответствующего блокируемого региона. • Когда блокировка завершена, установится бит FRDY в регистре статуса (MC_FSR). Если было разрешено прерывание установкой бита FRDY в регистре MC_FMR, то будет активизирована линия прерывания контроллера MC. Ошибка программирования, связанная с ошибочным ключевым словом и/или недопустимой командой, записанными в регистр команд MC_FCR, может быть детектирована по содержимому регистра MC_FSR. Можно очистить биты блокировки, которые были установлены ранее. Тогда заблокированные регионы могут быть очищены или запрограммированы. Последовательность разблокировки следующая: • В регистр команд MC_FCR должно быть записано следующее значение: (0x5A << 24) | (lockPageNumber << 8 & PAGEN) | CLB lockPageNumber это номер страницы соответствующего разблокируемого региона. • Когда разблокировка завершена, установится бит FRDY в регистре статуса (MC_FSR). Если было разрешено прерывание установкой бита FRDY в регистре MC_FMR, то будет активизирована линия прерывания контроллера MC. Ошибка программирования, связанная с ошибочным ключевым словом и/или недопустимой командой, записанными в регистр команд MC_FCR, может быть детектирована по содержимому регистра MC_FSR. Команда разблокировки программирует бит блокировки (lock bit) в состояние лог. 1; соответствующий бит LOCKSx в регистре MC_FSR будет читаться как 0. Команда блокировки программирует бит блокировки в состояние лог. 0; соответствующий бит LOCKSx в регистре MC_FSR будет читаться как 1. Примечание: доступ к FLASH в режиме чтения разрешен, когда выполнены команды блокирования или разблокировки. [Биты GPNVM] Энергонезависимые биты общего назначения (General-purpose NVM, или сокращенно биты GPNVM) не связаны с плоскостью памяти встроенной памяти FLASH. Они также не относятся к контроллеру EFC1 чипа AT91SAM7X512. Эти биты общего назначения предназначены для защиты других частей кристалла процессора. Они могут быть установлены (активированы) или очищены каждый по отдельности. Подробнее описание назначения бит GPNVM см. а даташите на процессор. Последовательность активизации бита GPNVM следующая: • Запустите команду установки бита GPNVM (Set General Purpose Bit, SGPB) путем записи в регистр команд MC_FCR команды SGPB и номера устанавливаемого бита GPNVM в поле PAGEN. Во время последовательности программирования могут быть детектированы две ошибки (через регистр статуса MC_FSR): • Programming Error (ошибка программирования): в регистр команд MC_FCR было записано неправильное ключевое слово или недопустимая команда. Можно деактивировать бит GPNVM, который был установлен ранее. Последовательность очистки следующая: • Запустите команду очистки бита GPNVM (Clear General-purpose Bit, CGPB) путем записи в регистр команд MC_FCR команды CGPB и номера очищаемого бита GPNVM в поле PAGEN. Во время последовательности программирования могут быть детектированы две ошибки (через регистр статуса MC_FSR): • Programming Error (ошибка программирования): в регистр команд MC_FCR было записано неправильное ключевое слово или недопустимая команда. Команда очистки бита GPNVM запрограммирует его в состояние лог. 0; соответствующий бит GPNVMx в регистре MC_FSR будет читаться как 0. Команда установки бита GPNVM запрограммирует его в состояние лог. 1; соответствующий бит GPNVMx в регистре MC_FSR будет читаться как 1. Примечание: доступ к памяти FLASH в режиме чтения разрешен, когда выполняются команды установки, очистки или чтения бит GPNVM. [Бит защиты] Цель бита защиты (security bit) - предотвратить внешний доступ к внутренней системной шине (это не относится к контроллеру EFC1 чипа AT91SAM7X512). При этом будут запрещены функции JTAG, быстрого программирования FLASH (Fast Flash Programming) и интерфейса последовательного тестирования FLASH (Flash Serial Test Interface). Будучи установленным, этот бит можно сбросить только путем внешнего аппаратного запроса ERASE для всего кристалла процессора. Подробнее про вывод корпуса, соответствующий управлению аппаратной функцией ERASE, см. даташит на процессор. При выдаче ERASE будет очищена вся память FLASH, разблокированы все её регионы и сброшены все биты GPNVM и сброшен сам бит защиты. Бит защиты в регистре MC_FSR очищается только при выдаче ERASE. Последовательность активизации (установки) бита защиты следующая: • Запустите команду установки бита защиты (Set Security Bit command, SSB) записью в регистр команд MC_FCR. Когда активен бит защиты, то бит SECURITY в регистре MC_FSR установлен. [Интерфейс программирования EFC] Интерфейс программирования EFC интегрирован в контроллер памяти MC (см. [2]). Смещение адресов регистров отсчитывается относительно адреса 0xFFFFFF00. Процессор AT91SAM7X512 оборудован двумя контроллерами EFC: EFC0 и EFC1. Привязка регистров показана в таблицах ниже. Таблица 19-3. Регистры EFC0.
Таблица 19-4. Регистры EFC1.
Регистр режима FLASH (MC Flash Mode Register). Работает на чтение и запись.
FRDY: Flash Ready Interrupt Enable, разрешение прерывания по готовности FLASH. LOCKE: Lock Error Interrupt Enable, разрешение прерывания по ошибке, связанной с блокировкой. PROGE: Programming Error Interrupt Enable, разрешение прерывания по ошибке программирования. NEBP: No Erase Before Programming, не делать очистку перед программированием. FWS: Flash Wait State, количество тактов ожидания при доступе к FLASH. Это поле задает количество тактов ожидания для операций чтения и записи:
FMCN: Flash Microsecond Cycle Number, количество тактов на микросекунду. Перед записью энергонезависимых бит (Non Volatile Memory, NVM), это относится к битам блокировки (Lock bits), битам общего назначения (General Purpose NVM, GPNVM) и биту защиты (Security bit), это поле должно быть установлено в количество тактов основной частоты процессора (Master Clock, MCK), приходящихся на одну микросекунду. Когда записывается остальная память FLASH, это поле определяет количество тактов MCK в 1.5 микросекунды. Количество должно быть округлено вверх до ближайшего целого значения. Внимание: значение 0 разрешается только для очень большого периода тактов MCK не меньше 30 микросекунд. Внимание: чтобы гарантировать корректность операций с памятью FLASH, поле FMCN должно быть правильно запрограммировано. Регистр команд FLASH (MC Flash Command Register). Работает только на запись.
FCMD: Flash Command, команда FLASH.
PAGEN: Page Number, номер страницы.
Примечание: в зависимости от команды, все или некоторые из битов PAGEN могут не иметь значения. KEY: Write Protection Key, ключ защиты от ошибочной записи. В это поле следует записать значение 0x5A, чтобы разрешить выполнение команды, заданной битами поля FCMD. Если в поле KEY записано другое значение, то команда записи не будет выполнена и действие команды будет отменено. Регистр состояния FLASH (MC Flash Status Register). Работает только на чтение.
FRDY: Flash Ready Status, состояние готовности FLASH. LOCKE: Lock Error Status, состояние ошибки, связанной с блокировкой. PROGE: Programming Error Status, состояние ошибки программирования. SECURITY: Security Bit Status, состояние бита защиты (не относится к EFC1 микроконтроллера AT91SAM7X512). GPNVMx: General-purpose NVM Bit Status, состояние бит GPNVM (не относится к EFC1 микроконтроллера AT91SAM7X512). LOCKSx: Lock Region x Lock Status, состояние блокировки региона x. [Ссылки] 1. ARM-based Flash MCU SAM7X512 / SAM7X256 / SAM7X128 DATASHEET site:atmel.com. |