Программирование AVR Использование Atmel Serial DataFlash Fri, December 13 2024  

Поделиться

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

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


Использование Atmel Serial DataFlash Печать
Добавил(а) microsin   

В прошлом инженеры из последних сил отбивались от приложений хранения данных в памяти FLASH. Традиционные устройства памяти FLASH с их большими размерами страницы от 4 до 128 килобайт делали сложным изменение нескольких байт в их памяти. Обычно системные инженеры должны были обеспечивать внешние буферы RAM, чтобы затенять страницы памяти FLASH, в которых происходят модификации данных.

Микросхемы Atmel Serial DataFlash предоставили новые возможности для разработки приложений, где используется хранение данных. У них малый размер страницы 264 байта для плотностей до 8 мегабит, и они специально разработаны для предоставления гибкости внешнего управления, чтобы максимально упростить процесс модификации данных. Кроме того, в Serial DataFlash реализован простой последовательный интерфейс, упрощающий подключение к памяти, что повышает надежность системы и снижает излучаемый шум.

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

• Цифровые автоответчики
• Запись голоса в сотовых телефонах
• Портативные диктофоны
• Хранение изображения в цифровых камерах
• Хранилище отсканированного факса для отложенной передачи/приема
• Сохранение игры и очков в системах видеоигр
• Хранение номера телефона и текста в пейджерах
• Хранилище данных в наладонниках
• Системы сбора данных

Примечание: приведенное далее описание базируется на микросхеме Serial DataFlash AT45D041. Остальные представители семейства Serial DataFlash управляются и используются аналогично, с незначительными различиями, касающимися емкости устройства, размера страниц и буферов, количества страниц.

[Функциональное описание]

Блок-схема микросхем Atmel Serial DataFlash показывает, что устройство состоит из массива FLASH-памяти, двух буферов данных и простого интерфейса ввода/вывода (рис. 1). В отличие от обычных устройств памяти FLASH, к которым осуществляется доступ к произвольным ячейкам памяти с помощью многочисленных сигналов адреса и параллельной шины данных, Serial DataFlash использует интерфейс SPI с последовательным доступом к данным. SPI используется для передачи как адреса, так и данных.

AT45D041 block diagram fig01

Рис. 1. Блок-схема AT45D041 Serial DataFlash.

[Массив памяти Serial DataFlash]

AT45D041, первое устройство в семействе микросхем Serial DataFlash, состоит из 2048 одинаковых страниц данных. Размер страницы AT45D041 составляет 264 байта вместо 256 байт. Таким образом общая емкость памяти (4325376 бит) устройства на 128 килобит больше 4 мегабит.

Системные инженеры могут использовать все 264 байт для хранения данных. Альтернативно 8 дополнительных данных страницы (256+8=264) можно использовать для механизмов контроля и коррекции ошибок (error detection and correction, EDC), или связанной управляющей информации, такой как указатели, флаги, направления маршрутизации телефонных сообщений. Эта информация, которая потенциально важна для работы системы, может использоваться микроконтроллером или процессором, чтобы определить, как задействовать данные, хранящиеся в связанной странице.

Например, в цифровой системе голосовых сообщений страницы AT45D041 сохраняют сжатые данные оцифрованного звука. Управляющая информация страницы могла бы содержать номер почтового ящика, показывающий, какой пользователь может получить доступ к голосовому сообщению на этой странице. Дополнительно система может установить здесь флаг уровня приоритета, обозначающего срочность сообщения. Если сообщение занимает больше одной страницы памяти FLASH, то система может хранить в дополнительных данных указатель, который говорит о том, в какой странице хранится следующая порция данных сообщения. Дополнительные 8 каждой страницы AT45D041 предоставляют такую область хранения подобной управляющей информации.

Устройство также предоставляет возможность защищенного хранения не часто изменяемой информации с помощью вывода защиты от записи (Write Protect, ~WP). Когда на вывод ~WP подан лог. 0, первые 256 страниц массива памяти не могут быть запрограммированы. Не часто обновляемая информация, как в примере системы голосовых сообщений, приведенном выше, могла бы хранить идентификационную информацию пользователя или такие параметры, как допустимая длина сообщения, период хранения сообщения и количество сообщений, которое может иметь отдельный пользователь. Защищенная область также могла бы использоваться для сохранения информации голосового меню, времени/даны, защищенных данных или таблиц перекодировки. Другой хороший пример - загрузчик DSP Blackfin, специальная программа, которая предназначена для загрузки и обновления программного обеспечения. 

Буферы данных. В AT45D041 есть два встроенных, двунаправленных буфера, предназначенных для ускорения обмена данными с устройством. Эти буферы предоставляют встроенный псевдо-кэш, и позволяют устройству AT45D041 принимать данные во время активных операций очистки/программирования. Каждый буфер имеет длину 264 байта, т. е. такую же длину, как страница FLASH, и каждый их буферов работает независимо друг от друга. Система может также использовать буферы данных как временную память, работающую на чтение и запись. Таким образом, эти встроенные буферы могут устранить необходимость использовать дополнительную внешнюю RAM или RAM, содержащуюся в микроконтроллере или процессоре.

Буферы AT45D041 это статическое ОЗУ (static RAM, SRAM), поэтому данные в этих буферах сохранны пока не пропало напряжение питания (оно не снизилось ниже минимально допустимого уровня напряжения питания). Однако поскольку это не динамическая, а статическая память, то буферы не нужно обновлять, данные не поменяются, пока в буферы не будут целенаправленно загружены новые данные. При загрузке новых данных будут изменены только те байты, на которые указывает операция, остальные байты останутся не измененными. Например, если пользователь загрузил только 200 байт в буфер, то остальные 64 байта сохранят свои предыдущие значения.

Последовательный интерфейс облегчает возможность апгрейда. Последовательный доступ, примененный в схеме последовательного интерфейса Serial DataFlash, и разводка выводов интерфейсная снимает практические ограничения на обновление памяти на любую плотность или ширину слова. Стандартный произвольный доступ через параллельный интерфейс FLASH должен использовать выделенные адресные выводы для подключения к микроконтроллеру или процессору системы. По мере увеличения требований к плотности должны быть добавлены сигналы адреса, в результате чего увеличивается количество используемых выводов и размер корпусов. Аналогично параллельный интерфейс FLASH требует выделенных линий ввода/вывода, и когда ширина слова увеличивается до 16 или 32 бит, также должны быть добавлены сигналы ввода/вывода данных, что опять-таки увеличивает размер корпуса.

Интерфейс Serial DataFlash использует только 7 сигнальных линий, 3 из которых выделены для последовательной шины (SCK, SI и SO). Остальные сигнальные линии Serial DataFlash включают вход выборки (chip select, ~CS), вход сброса (~RESET), вход защиты от записи (~WP) и выход сигнала готовности/занятости (RDY/~BUSY).

[Функционирование SPI]

Serial DataFlash можно использовать с микроконтроллером любого типа, однако интерфейс устройства также совместим с режимами 0 и 3 стандартного интерфейса SPI [4], который очень популярен в мире микроконтроллеров.

SPI это дуплексный аппаратный интерфейс и протокол. Он может передавать слова любой длины, но чаще всего используются 8-битные слова, удобные для обмена с микросхемами serial EEPROM и Serial DataFlash. До появления микросхем EEPROM с интерфейсом SPI инженеры использовали стандартный интерфейс Microwire для микросхем EEPROM для подключения к порту SPI микроконтроллера. Хотя порт SPI микроконтроллера мог работать на частотах 2 МГц (и впоследствии выше), скорость обмена с EEPROM была ограничена частотой тактов 1 МГц. Затем появились микросхемы EEPROM с интерфейсом SPI, такие как AT25010, AT25020, AT25040 Serial CMOS EEPROM компании Atmel, совместимые со стандартным интерфейсом SPI. И-за высоких частот SPI и совместимости по интерфейсу эти устройства EEPROM стали очень популярны; то же самое относится и к микросхемам Serial DataFlash.

Управление потоком данных. Вывод входа последовательных тактов Serial Data Clock (SCK) микросхем Serial DataFlash должен быть подключен к главному микроконтроллеру или процессору, или (что используется редко) к какому-нибудь генератору. Все циклы программирования в Serial DataFlash полностью независимы, т. е. тактовые сигналы для этого генерируются внутри микросхемы, так что сигнал are SCK управляет только вводом данных в микросхему и выводом данных из неё.

Вывод ~CS Serial DataFlash работает так же, как вход выборки (chip select) любого устройства памяти. Перевод ~CS в лог. 0 выбирает устройство (разрешает работу его интерфейса); перевод ~CS в лог. 1 отменяет выборку устройства и переводит его в состояние покоя. Когда ~CS = 1, микросхема Serial DataFlash игнорирует любые данные, присутствующие на выводе Serial Data Input (SI), и выход Serial Data Output (SO) остается в состоянии высокого сопротивления. Также вход выборки ~CS функционирует как триггер, запускающий внутреннюю автономную операцию чтения или записи. Специфика для каждой такой операции, и как ~CS относится к ней, обсуждается далее в разделах "Операции чтения" и "Операции программирования".

Таблица 1. Возможности интерфейса Serial DataFlash.

Максимальная скорость шины 10 МГц
Количество активных выводов 3 или 4
Максимальный размер памяти Не определено
Размер слова данных 8 бит
Возможность блочной записи Есть
Возможность последовательного чтения Есть
Количество устройств на шине Ограничено количеством портов у мастера шины
Поддерживаемые режимы SPI 0 и 3

Рабочие режимы SPI. У интерфейса SPI есть четыре рабочих режима: 0, 1, 2 и 3. Рабочий режим SPI определяет фазу и полярность тактов для передачи или приема данных. Другими словами, режим определяет, какой перепад тактов управляет каким направлением передачи данных (рис. 2).

AT45D041 SPI mode fig02

Рис. 2. Режим SPI определяется по тому, какой перепад сигнала тактов управляет направлением передачи данных.

Примечание: вывод данных не происходит на спаде того же периода тактов, что и ввод данных, вместо этого на спаде следующего периода тактов.

Serial DataFlash поддерживает только самые используемые режимы SPI, 0 и 3. В этих режимах перепад нарастания уровня SCK всегда вдвигает данные в микросхему, а спад SCK всегда выдвигает данные из микросхемы. Поддержка только режимов 0 и 3 устраняет необходимость интегрировать в микросхему Serial DataFlash специальные регистры выбора режима. Обратите внимание на разницу между режимами на рис. 2, которая заключается в том, с какого уровня начинает работать SCK. Когда Serial DataFlash видит фронт нарастания уровня на SCK, это говорит о необходимости защелкивания входных данных. Пока разработчик придерживается этих соглашений тактирования, любой микроконтроллер или процессор может быть использован в качестве мастера шины SPI - микросхема Serial DataFlash не ограничена возможностью подключения к SPI-совместимым устройствам.

Подключение Serial DataFlash к микроконтроллеру. Atmel AT89S8252 это микроконтроллер с системой команд MCS-51, у которого есть интерфейс SPI. Он поддерживает полнодуплексные, 3-проводные синхронные передачи данных на максимальной частоте бит 6 МГц. При разрешении функции SPI AT89S8252 выводы P1.5 - P1.7 порта 1 могут быть подключены к Serial DataFlash. Этот микроконтроллер содержит набор регистров специальных функций (Special Function Registers, SFR). Среди этих SFR есть регистр управления SPI (SPI Control Register), который находится по SFR-адресу D5H (таблица 2). Биты CPOL и CPHA управляют режимом SPI, а биты SPR0 и SPR1 управляют скоростью данных (таблица 3).

Таблица 2. SPI Control Register микроконтроллера AT89S8252 (SFR D5h).

   Бит 7       Бит 6       Бит 5       Бит 4       Бит 3       Бит 2       Бит 1       Бит 0   
SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0

Таблица 3. Назначение бит SPI Control Register.

Символ Функция
SPIE SPI Interrupt Enable (разрешение прерывания SPI)
SPE SPI Enable (разрешение SPI)
1: разрешает канал SPI и подключает сигналы SS, MOSI и SC к портам P1.4 - P1.7
0: запрещает канал SPI
DORD Data Order (порядок следования бит)
MSTR  Master/Slave Select (выбор: главное или подчиненное устройство SPI)
CPOL Clock Polarity (полярность тактов)
1: SCK в лог. 1 при ожидании (когда не идет передача)
0: SCK в лог. 0 при ожидании (когда не идет передача)
CPHA Clock Phase (фаза тактов). Бит CPHA вместе с битом CPOL определяет режим SPI (аппаратный протокол взаимодействия главного и подчиненного устройства)
SPR0
SPR1
SPI Clock Rate Select (выбор скорости SPI)

Альтернативно можно подключить Serial DataFlash к любому микроконтроллеру, который программно может управлять своими выводами портов. Как показано на рис. 3, Atmel AT89CXX можно подключить к Serial DataFlash. Из-за программной реализации SPI скорость передачи ограничена 2.1 МГц, хотя Serial DataFlash могла бы работать на частоте до 10 МГц.

AT45D041 Serial DataFlash connect fig03

Рис. 3. Serial DataFlash можно подключить к любому микроконтроллеру, у которого есть возможность предоставить сигнал тактов SCK.

[Функция сброса]

У Serial DataFlash есть функция сброса, которая прерывает любую выполняющуюся операцию и принудительно переводит внутреннюю машину состояний устройства в состояние ожидания (idle state). Функция сброса активизируется удерживанием в лог. 0 вывода ~RESET. Эта функция может использоваться как система защиты при сбоях питания, когда системный монитор питания обнаруживает пропадание питания или его снижение ниже минимального рабочего предела. Сброс Serial DataFlash во время его рабочих операций предотвращает любые операции, которые могут привести к ошибке и повреждению данных (для дополнительной информации см. секцию "Механизмы защиты от записи").

Если Serial DataFlash сброшена перед завершением операции программирования/очистки страницы, то не гарантируется состояние данных на программируемой странице; Serial DataFlash должно полностью завершить операцию полностью, чтобы все данные на странице были достоверны. Если пользователь хочет гарантии достоверности операции программирования/очистки, чтобы она завершилась перед сбросом устройства, то система должна либо подождать максимальное время tEP или tP [], опрашивая вывод RDY/~BUSY, либо опросом регистра состояния (см. секцию "Регистр состояния"), чтобы определить момент завершения операции программирования/стирания.

Если система должна обработать высокоуровневое прерывание, и должно сбросить Serial DataFlash до завершения операции программирования/стирания, то система должна позднее запрограммировать эту страницу FLASH заново теми же самыми данными. Сброс устройства не изменит содержимое внутренних буферов RAM, поэтому буферы, которые использовались для выполнения внутренней операции программирования/стирания перед тем, как устройство было сброшено, будут содержать те же самые данные. Таким образом, может быть использована простая команда Buffer to Main Memory Page Program with Built-In Erase, чтобы перепрограммировать страницу FLASH заново.

[Командный интерфейс]

В дополнение к базовым функциональным блокам памяти FLASH, устройство Serial DataFlash содержит командный интерфейс пользователя (Command User Interface, CUI), машину состояний, которая управляет всеми внутренними операциями. CUI предоставляет для системы доступ к внутренней машине состояний Serial DataFlash. CUI принимает пользовательские команды, транслирует их операции машины состояний и проверяет правильность команд.

Регистр состояния. Машина состояния содержит регистр состояния (Status Register), который предоставляет обратную связь для функций устройства (таблица 4). Чтение регистра состояния начинается с загрузки команды Status Register Read (opcode 57H) в Serial DataFlash. Далее читаются 8 бит данных из вывода SO. Нельзя записать данные в регистр состояния, данные будут выводиться после того, как последний бит opcode будет введен в устройство.

Таблица 4. Назначение бит регистра состояния.

   Бит 7       Бит 6       Бит 5       Бит 4       Бит 3       Бит 2       Бит 1       Бит 0   
RDY/~BUSY COMP Density Code Зарезервировано для
будущего использования

Первым выводимым битом из регистра состояния будет бит 7, самый значащий бит этого регистра (most-significant bit, MSB). Достоверные данные будут продолжать вводиться плоть до бита 3 включительно, в то время как биты 2, 1 и 0 будут содержать неизвестные значения, потому что они зарезервированы для будущего использования. После того, как бит 0 регистра состояния будет выведен, вывод продолжится снова (пока на выводе ~CS остается лог. 0 и продолжают поступать такты), начиная с бита 7. Данные в регистре состояния всегда обновляются, поэтому выводимая последовательность может содержать новые данные.

Вы можете использовать регистр состояния, чтобы определить, занята микросхема Serial DataFlash или нет (еще один способ, как Вы помните, состоит в опросе состояния READY/~BUSY). Микросхема будет занята во время операций Main Memory Page to Buffer Transfer, Main Memory Page to Buffer Compare, Buffer to Main Memory Page Program with Built-In Erase, Buffer to Main Memory Page Program without Built-In Erase, Main Memory Page Program или Auto Page Rewrite. Первый бит (MSB), выведенный из регистра состояния, показывает статус готовности/занятости, который определяется из внутреннего статуса внутренней машины состояний. Если этот бит равен 0, то Serial DataFlash занята выполнением одной из перечисленных выше операций; если этот бит равен 1, то устройство не занято, и готово принять новую команду.

Второй выведенный бит регистра состояния (бит 6) показывает результат сравнения последней операции Main Memory Page to Buffer Compare. Если данные на странице основной памяти совпадает с содержимым буфера, то этот бит будет 0; если хотя бы один бит не совпадает, то выводимый бит 6 будет равен 1.

Следующие три выводимых бита (биты 5 .. 3) показывают плотность (емкость) устройства Serial DataFlash. Таблица вариантов емкостей показана в таблице 5.

Таблица 5. Коды плотностей регистра состояния.

Бит 5 Бит 4 Бит 3 Плотность устройства
0 0 0 512 килобита
0 0 1 1 мегабит
0 1 0 2 мегабита
0 1 1 4 мегабита
1 0 0 8 мегабита
1 0 1 16 мегабит
1 1 0 32 мегабит
1 1 1 64 мегабита

Таблица команд. Чтобы начать операцию Serial DataFlash, система должна отправить ей нужную команду. Таблица 6 показывает последовательность бит для каждой операции Serial DataFlash. Все операции (кроме Status Register Read) начинаются с opcode, за которым идут 3 байта адреса, которые также вдвигаются по тактам в Serial DataFlash.

Три байта адреса (24 бита) используются для адресации в массиве памяти или в буфере AT45D041. Как показано на рис. 4, четыре MSB-бита зарезервированы (они идут первыми); затем идут 11 бит, которые обозначают номер страницы; остальные 9 бит обозначают определенный адрес байта на 264-байтной странице или в буфере. Эта 24-битная схема адресации позволяет адресовать до 16 мегабайт. 4 зарезервированных бита AT45D041 будут использоваться в устройствах большей емкости, и они должны быть заполнены нулями для гарантии совместимости вверх.

AT45D041 Command Sequence fig04

Рис. 4. Последовательность команды для операций чтения/записи AT45D041 (кроме операции Status Register Read).

Примечания:

1. "r" обозначает биты, зарезервированные для устройств с большей емкостью.
2. Рекомендуется, чтобы "r" были нулями для плотностей 4 мегабита или меньше.
3. Для плотностей больше 4 мегабита биты "r" становятся старшими значащими битами адреса страницы микросхем соответствующей плотности.

Таблица 6.

AT45D041 table6

Таблица 7.

AT45D041 table7

[Операции чтения для AT45D041]

Путем указания соответствующего opcode, данные могут быть прочитаны напрямую из основной памяти, или через буферы. (рис. 5).

AT45D041 Read Operations fig05

Рис. 5. Схема чтения данных AT45D041.

Main Memory Page Read. Команда чтения страницы основной памяти позволяет пользователю читать данные непосредственно из одной из 2048 страниц, пропуская оба буфера данных и оставляя их содержимое неизменным. Для запуска чтения страницы в устройство вдвигается команда Main Memory Page Read (52H), за которой идут 4 зарезервированных бита, за ними идут 20 бит адреса и 32 пустых, не имеющих значения бита (так называемые биты don’t care). 4 зарезервированных бита будут использоваться в адресе для будущего расширения емкости устройства, и они для совместимости должны быть обнулены. 32 бита don’t care передаются для того, чтобы дать время на инициализацию машине состояний Serial DataFlash.

Когда данные читаются из основной памяти, Вы должны указать адрес страницы и адрес первого байта, который должен быть прочитан на странице. Адрес страницы требует 11 бит, адрес байта в буфере требует еще 9 бит. При чтении данных из основной памяти, если достигнут конец страницы, Serial DataFlash вернется обратно к началу этой страницы.

После перехода 1 -> 0 на выводе ~CS импульсы SCK загружают 8 бит opcode, 4 зарезервированных бита, 20 бит адреса и 32 бита don’t care через вывод SI; после этого данные могут быть прочитаны последовательно через вывод SO. Вывод ~CS должен оставаться в лог. 0 во время всей этой последовательности; переход 0 -> 1 на выводе ~CS прервет операцию чтения и переведет в третье состояние вывод SO.

Buffer Read. Чтение буфера позволяет прочитать данные непосредственно из одного из двух буферов. Чтобы начать чтение буфера, в устройство передается команда Buffer Read (54H для буфера 1, 56H для буфера 2), за которой идут 15 зарезервированных бит, 9 бит адреса и 8 бит don’t care. 15 зарезервированных бит могут использоваться в будущем для расширения, и они должны быть равны 0 для обеспечения совместимости вверх. 9 бит адреса требуются, чтобы указать первый читаемый байт из 264-байтного буфера. 8 бит don’t care посылаются в устройство, чтобы дать время на инициализацию машине состояний Serial DataFlash. При чтении из буфера, если был достигнут конец буфера, то Serial DataFlash переведет чтение обратно на начало буфера.

После того, как произойдет переход 1 -> 0 на выводе ~CS, импульсы SCK загрузят 8 бит opcode, 15 зарезервированных бит, 9 бит адреса и 8 бит don’t care через вывод SI; после этого данные буфера могут быть прочитаны через вывод SO. Вывод ~CS должен оставаться в лог. 0 во время всей этой последовательности; переход 0 -> 1 на выводе ~CS прервет операцию чтения и переведет в третье состояние вывод SO.

Примечание: Вы можете читать из одного из буферов, в то время как машина состояния Serial DataFlash перемещает данные из другого буфера в основную память (рис. 6).

AT45D041 virtual read while write operations fig06

Рис. 6. Serial DataFlash поддерживает одновременное чтение во время внутреннего процесса записи.

Main Memory Page to Buffer Transfer. Внутренняя машина состояния Serial DataFlash может автоматически скопировать данные из основной памяти в один из буферов, 1 или 2. Это дает возможность модифицировать один или несколько байт на странице основной памяти через модификацию буфера, и затем записать этот буфер обратно в основную память.

Для запуска копирования передается команда Main Memory Page to Buffer Transfer (53H для буфера 1, 55H для буфера 2), за которой идут 4 зарезервированных бита, 11 бит адреса и 9 бит don’t care. 4 зарезервированных бита могут использоваться для будущего расширения, и должны быть нулями для обеспечения совместимости вверх. 11 бит адреса требуются для указания страницы основной памяти, которая будет копироваться в выбранный буфер.

После того, как произойдет переход 1 -> 0 на выводе ~CS, импульсы SCK загрузят 8 бит opcode, 4 зарезервированных бита, 11 бит адреса и 9 бит don’t care через вывод SI. Копирование данных начнется после перевода вывода ~CS из лог. 0 в лог. 1. Вы можете использовать вывод RDY/~BUSY или опрос бита RDY/~BUSY в регистре состояния, чтобы определить момент завершения копирования. Подробнее про доступ и интерпретацию бит Status Register см. секцию "Регистр состояния".

Main Memory Page to Buffer Compare. Внутренняя машина состояния Serial DataFlash может автоматически сравнить данные на основной странице памяти с данными одного из буферов, 1 или 2. Эта операция полезна после выполнения команды Buffer to Main Memory Page Program или Main Memory Page Program с целью проверки успешности программирования.

Для запуска операции сравнения посылается команда Main Memory Page to Buffer Compare (60H для буфера 1, 61H для буфера 2), за которой идут 4 зарезервированных бита, 11 бит адреса и 9 бит don’t care. 4 зарезервированных бита могут использоваться для будущего расширения, и должны быть нулями для обеспечения совместимости вверх. 11 бит адреса требуются для указания страницы основной памяти, которая будет сравниваться с выбранным буфером.

После того, как произойдет переход 1 -> 0 на выводе ~CS, импульсы SCK загрузят 8 бит opcode, 4 зарезервированных бита, 11 бит адреса и 9 бит don’t care через вывод SI. Операция сравнения данных начнется после перевода вывода ~CS из лог. 0 в лог. 1. Вы можете использовать вывод RDY/~BUSY или опрос бита RDY/~BUSY в регистре состояния, чтобы определить момент завершения операции. Подробнее про доступ и интерпретацию бит Status Register см. секцию "Регистр состояния".

Примечание: по завершению операции сравнения машина состояния обновляет бит 6 в регистре состояния. Этот бит будет показывать результат сравнения.

[Операции программирования AT45D041]

Путем указания соответствующего opcode, данные могут быть записаны в основную память или в один из двух буферов (рис. 7).

AT45D041 Program Operations fig07

Рис. 7. Операции записи DataFlash.

Buffer Write. Эта операция позволяет записать данные непосредственно в один из двух буферов SRAM. Для запуска записи буфера передается команда Buffer Write (84H для буфера 1, 87H для буфера 2), за которой идут 15 зарезервированных бит и 9 бит адреса. 15 зарезервированных бит могут использоваться в будущем для расширения, и они должны быть равны 0 для обеспечения совместимости вверх. 9 бит адреса требуются, чтобы указать первый читаемый байт из 264-байтного буфера.

После того, как произойдет переход 1 -> 0 на выводе ~CS, импульсы SCK загрузят 8 бит opcode, 15 зарезервированных бит, 9 бит адреса и 8 бит don’t care через вывод SI; после этого данные буфера могут быть последовательно записаны через вывод SI. Если будет достигнут конец буфера, то Serial DataFlash автоматически переведет запись обратно в начало буфера. Вывод ~CS должен оставаться в лог. 0 во время всей этой последовательности; переход 0 -> 1 на выводе ~CS прервет операцию чтения и переведет в третье состояние вывод SO.

Примечание: ячейки буфера, которые не записаны, останутся в своем не измененном состоянии со старыми значениями. Любые не используемые ячейки буфера должны быть записаны в "известные" данные перед выполнением операции Buffer to Main Memory Page. Atmel рекомендует записать единицы в не используемые ячейки, чтобы снизить потребление энергии.

Buffer to Main Memory Page Program with Built-In Erase. Машина состояния Serial DataFlash’s может автоматически стереть страницу основной памяти и затем передать в неё данные из буфера 1 или буфера 2. Это дает возможность быстро записать данные в буфере без необходимости предварительно выдавать отдельную команду для очистки страницы в массиве FLASH. Вы можете также использовать команду Buffer to Main Memory Page Program with Built-In Erase, чтобы оставить страницу в очищенном состоянии; для этого в буфере должны быть записаны все единицы (байты 0xFF).

Перед выполнением операции Buffer to Main Memory Page Program with Built-In Erase используйте операцию Buffer Write, чтобы записать желаемые данные в любой из буферов, который будет использоваться для записи в страницу. Для запуска команды Buffer to Main Memory Page Program with Built-In Erase передайте 8-битный opcode (83H для буфера 1, 86H для буфера 2), за которым передайте 4 зарезервированных бита, 11 бит адреса и 9 бит don’t care. 4 зарезервированных бита могут использоваться для будущего расширения, и должны быть нулями для обеспечения совместимости вверх. 11 бит адреса требуются для указания страницы основной памяти, которая будет очищена и после чего записана содержимым выбранного буфера.

После того, как произойдет переход 1 -> 0 на выводе ~CS, импульсы SCK загрузят 8 бит opcode, 4 зарезервированных бита, 11 бит адреса и 9 бит don’t care через вывод SI. Операция очистки/программирования начнется после перевода вывода ~CS из лог. 0 в лог. 1. Вы можете использовать вывод RDY/~BUSY или опрос бита RDY/~BUSY в регистре состояния, чтобы определить момент, когда машина состояния сама завершит операцию очистки/программирования. Подробнее про доступ и интерпретацию бит Status Register см. секцию "Регистр состояния".

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

Buffer to Main Memory Page Program without Built-In Erase. Машина состояния Serial DataFlash может автоматически скопировать данные из буфера 1 или буфера 2 в страницу основной памяти, которая была ранее стерта. Эта операция позволяет быстро записать данные в буфере, не тратя время на ожидания завершения стирания. Обратите внимание, что операция Main Memory Page Program without Built-In Erase выполняется примерно на 30% быстрее операции Main Memory Page Program with Built-In Erase.

Перед использованием операции Buffer to Main Memory Page Program without Built-In Erase необходимо выполнение условия, что программируемая страница памяти была ранее предварительно стерта (чтобы стереть страницу, используйте операцию Buffer to Main Memory Page Program with Built-In Erase с буфером, где все байты равны 0xFF).

Перед выполнением операции Buffer to Main Memory Page Program without Built-In Erase используйте операцию Buffer Write, чтобы записать желаемые данные в любой из буферов, который будет использоваться для записи в страницу. Для запуска команды Buffer to Main Memory Page Program without Built-In Erase передайте 8-битный opcode (88H для буфера 1, 89H для буфера 2), за которым передайте 4 зарезервированных бита, 11 бит адреса и 9 бит don’t care. 4 зарезервированных бита могут использоваться для будущего расширения, и должны быть нулями для обеспечения совместимости вверх. 11 бит адреса требуются для указания страницы основной памяти, которая будет записана содержимым выбранного буфера.

После того, как произойдет переход 1 -> 0 на выводе ~CS, импульсы SCK загрузят 8 бит opcode, 4 зарезервированных бита, 11 бит адреса и 9 бит don’t care через вывод SI. Операция программирования начнется после перевода вывода ~CS из лог. 0 в лог. 1. Вы можете использовать вывод RDY/~BUSY или опрос бита RDY/~BUSY в регистре состояния, чтобы определить момент, когда машина состояния сама завершит операцию программирования. Подробнее про доступ и интерпретацию бит Status Register см. секцию "Регистр состояния".

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

Main Memory Page Program. Это операция программирования страницы основной памяти. Она позволяет записать данные в буфер и передать этот буфер в указанную страницу памяти одной командой. Эта операция также очистит страницу основной памяти перед копированием буфера.

Для запуска операции программирования основной памяти передается команда Main Memory Page Program (82H для буфера 1, 85H для буфера 2), за которой передаются 4 зарезервированных бита и 20 бит адреса. 4 зарезервированных бита могут использоваться в будущем для расширения, и они должны быть нулями для обеспечения совместимости вверх. При обращении к данным основной памяти Вы должны указать адрес страницы и адрес первого байта, записанного в буфере. Адрес страницы требует 11 бит. Указание первого байта, записанного в буфере, требует 9 бит.

После того, как на выводе ~CS произошел переход 1 -> 0, импульсы SCK загрузят 8 бит opcode, 4 зарезервированных бита и 20 бит адреса через вывод SI. После этого Serial DataFlash готова принять данные из вывода SI, и сохранить их в выбранный буфер данных. Во время записи данных в буфер, если достигнут конец буфера, то Serial DataFlash снова начнет записывать буфер от его начала. Вывод ~CS должен оставаться в лог. 0 во время всей этой последовательности передачи бит; переход уровня 0 -> 1 на выводе ~CS инициирует очистку страницы основной памяти, после чего в эту страницу будут запрограммированы данные выбранного буфера.

После того, как начнется очистка/программирование страницы основной памяти, Вы можете использовать вывод RDY/~BUSY или опрос бита RDY/~BUSY регистра состояния, чтобы определить момент завершения операции. Подробнее про доступ и интерпретацию бит Status Register см. секцию "Регистр состояния".

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

Virtual Continuous Write Buffer. В предыдущих секциях было отмечено, что пока машина состояния занят передачей данных из одного из буферов в страницу основной памяти, другой буфер может быть прочитан или записан. Эта особенность Serial DataFlash позволяет организовать виртуально непрерывную запись, если каждый из буферов не будет записан быстрее, чем максимальное время очистки и программирования (данные не могут вдвигаться в микросхему со скоростью, которая не обеспечит максимальное время tEP, указанное в даташите). Рис. 8 показывает последовательность событий, которую может использовать системное ПО для организации непрерывного потока записи в основную память.

AT45D041 virtually continuous write operation fig08

Рис. 8. Буферы поддерживают виртуально непрерывную запись.

Шаг 1: выдача команды Buffer Write, чтобы записать данные в один из буферов.
Шаг 2: запись необходимого количества байт в буфер.
Шаг 3: выдача команды Buffer to Main Memory Page Program.
Шаг 4: выдача команды Buffer Write, чтобы записать данные в другой буфер.
Шаг 5: запись необходимого количества байт в другой буфер.
Шаг 6: опрос RDY/~BUSY, и когда состояние покажет, что Serial DataFlash не занята, выдача команды Buffer to Main Memory Page Program (для другого буфера). Возврат к шагу 1.

Auto Page Rewrite. Операция Auto Page Rewrite позволяет Serial DataFlash автоматически перезаписать содержимое страницы основной памяти. Эта операция состоит из комбинации двух операций: Main Memory Page to Buffer Transfer и Buffer to Main Memory Page Program with Built-In Erase.

Для запуска операции перезаписи передайте команду Auto Page Rewrite (58H для буфера 1, 59H для буфера 2), за которым передайте 4 зарезервированных бита, 11 бит адреса и 9 бит don’t care. 4 зарезервированных бита могут использоваться для будущего расширения, и должны быть нулями для обеспечения совместимости вверх. 11 бит адреса требуются для указания страницы основной памяти.

После перехода 1 -> 0 на выводе ~CS импульсы на выводе SCK загрузят 8 бит opcode, 4 зарезервированных бита, 11 бит адреса и 9 бит don’t care через вывод SI. Когда произойдет переход 0 -> 1 на выводе ~CS, Serial DataFlash передаст данные из страницы основной памяти в указанный буфер, и затем запрограммирует эти данные обратно на ту же самую страницу основной памяти. После того, как запустилась операция Auto Page Rewrite, Вы можете использовать вывод RDY/~BUSY или бит RDY/~BUSY в регистре состояния, чтобы определить момент завершения операции. Подробнее про доступ и интерпретацию бит Status Register см. секцию "Регистр состояния".

Расширенное программирование. Чтобы улучшить возможности по перепрограммированию Serial DataFlash для интенсивных приложений записи, которые не осуществляют запись в циклической, последовательной форме, нужно соблюдать определенные правила, чтобы сохранить целостность данных, сохраненных в массиве FLASH. Интенсивно записывающее приложение может быть определено как любое приложение, которое осуществляет тысячи кумулятивных перепрограммирований (операций очистки/программирования) на всем протяжении жизненного цикла продукта.

Если операции перепрограммирования осуществляются в циклическом, последовательном порядке, то не нужно следовать специальным правилам. Таким образом, если страницы FLASH обновляются/перезаписываются начиная с определенной страницы (например со страницы 6), и продолжаются последовательно через следующие 2047 страниц (например, последовательно обновляются страницы 7-2047 и затем страницы 0-5), и цикл повторяется с начальной страницы (т. е. со страницы 6), то не нужно реализовывать никаких дополнительных алгоритмов для поддержки надежности работы DataFlash.

Однако если операции перепрограммирования происходят случайным образом, когда страницы обновляются в произвольном, случайном порядке, то система должна гарантировать, что каждая страница массива памяти Serial DataFlash обновлена/перезаписана как минимум 1 раз каждые 10000 кумулятивных операций перепрограммирования. В зависимости от типа приложения для этой цели могут использоваться различные методологии при обновлении данных в массиве FLASH.

Один из методов требует, чтобы каждая операция перепрограммирования одной страницы сопровождалась дополнительным обновлением страницы. В этом должен использоваться сценарии управляемый программным обеспечением указатель, чтобы обозначить, какая дополнительная страница массива FLASH должна быть обновлена. Например, этот указатель первоначально указывал бы на страницу 0. Когда система перепрограммирует страницу, скажем страницу 12, система должна затем выдать команду Auto Page Rewrite для страницы 0 после завершения операции очистки/перезаписи страницы 12 (как только истечет время tEP). После этого указатель должен инкрементироваться для указания на страницу 1. Когда система перепрограммирует другую страницу, процесс должен повториться. Когда указатель достигнет 2048, он должен перейти обратно в 0. Рис. 9 иллюстрирует этот пример.

AT45D041 Auto Page Rewrite fig09

Рис. 9. Алгоритм обеспечения надежности массива FLASH с одиночной выдачей Auto Page Rewrite.

Другой метод обновления массива FLASH в некоторой степени подобен предыдущему методу, но он вовлекает операции перепрограммирования нескольких страниц. Здесь снова реализуется управляемый программным обеспечением указатель с дополнительным, управляемым программным обеспечением счетчиком. Как и в предыдущем примере, указатель изначально указывает на страницу 0, и счетчик должен быть установлен в 0. Когда система перепрограммирует несколько страниц, счетчик должен инкрементироваться для каждой операции перепрограммирования страницы. После того, как система завершит перепрограммирование нескольких страниц (например, страниц 4, 18, 23 и 25), система затем должна выдать команду Auto Page Rewrite для страницы 0. Как только операция rewrite страницы 0 завершится, счетчик должен указать на страницу 1, и счетчик должен декрементироваться с 4 до 3. Система должна затем выдать команду Auto Page Rewrite для страницы 1, и повторять подобным образом процессы перезаписи страниц, пока декременты счетчика не достигнут 0. Когда указатель достигнет 2048, он должен вернуться обратно к 0. Рис. 10 иллюстрирует этот пример.

AT45D041 Auto Page Rewrite fig10

Рис. 10. Алгоритм обеспечения надежности массива FLASH с выдачей Auto Page Rewrite по счетчику.

Последний метод обновления массива Flash должен позволить 10000 операций перепрограммирования перед тем, как надо будет выдать любую команду Auto Page Rewrite. По этому методу должен быть реализован управляемый программой счетчик. Этот счетчик изначально устанавливается в 0, и после каждой операции перепрограммирования он должен инкрементироваться. Как только счетчик достиг значения 10000, система должна начать процесс перезаписи страниц выдачей команды Auto Page Rewrite для страницы 0. После того, как эта операция завершилась для страницы 0, система должна так же перезаписать страницы 1, 2, 3 и так далее, пока все 2048 страниц не будут перезаписаны. После того, как перезаписан весь массив Flash, счетчик должен быть обратно возвращен в 0. Рис. 11 иллюстрирует этот пример.

AT45D041 Auto Page Rewrite fig11

Рис. 11. Алгоритм обеспечения надежности массива FLASH с выдачей Auto Page Rewrite для всего массива FLASH.

[Механизмы защиты данных]

Первые 256 страниц Serial DataFlash могут быть аппаратно защищены от записи.

Разработчик системы должен избегать возможности повреждения данных непреднамеренными записями. Проблемы повреждения данных Serial DataFlash могут произойти из-за сбоев, иголок помех, конкуренции на шине SPI и т. п., что может инициировать ошибочный цикл программирования или очистки. Serial DataFlash предоставляет несколько механизмов, которые можно использовать для предотвращения повреждения данных.

Сигнал Write Protect. Как показано на рис. 12, вывод ~WP микросхемы Serial DataFlash предоставляет аппаратно управляемую защиту для первых 256 страниц массива памяти FLASH (ячейки с адресами 00000H .. 1FF07H). Когда на вывод ~WP подан лог. 0, любые попытки (специальные или случайные) записать в защищенный регион никак не повлияют на ранее сохраненные в нем данные. Однако ошибочные попытки чтения приведут Serial DataFlash к выполнению "dummy" (пустого) цикла записи (как будто произошла нормальная операция записи). Лог. 1 на выводе ~WP запрещает функцию защиты от записи, позволяя системе записать все страницы массива FLASH.

AT45D041 Write Protection fig12

Рис. 12. Использование вывода ~WP.

Примечание: когда эта функция защиты от записи разрешена, первые 256 страниц памяти FLASH не должны подвергаться процедуре перезаписи (как описано выше в разделе "Расширенное программирование"), пока вывод ~WP удерживается в лог. 0 при кумулятивном перепрограммировании основного массива памяти.

Использование ~RESET для защиты данных. Вывод ~RESET микросхемы Serial DataFlash может быть подключен с линии сброса системы, которая будет удерживать ~RESET в лог. 0 (что переводит Serial DataFlash в состояние не активности), пока источник питания не обеспечит необходимое напряжение. Когда используется этот метод, Вы должны гарантировать, что память выйдет из сна перед тем, как CPU начнет передавать в неё циклы чтения. Serial DataFlash реализует внутри себя автономную схему сброса при включении питания; таким образом, не требуется подавать импульс сброса ~RESET в момент включения питания (на ~RESET может быть постоянно подана лог. 1, сброс Serial DataFlash при включении питания произойдет автоматически).

Вывод ~RESET работает по принципу чувствительности к уровню, и поэтому он может также использоваться для защиты всего массива памяти от нежелательных записей во время перебоев в питании. Вывод ~RESET также может использоваться для обрыва любой выполняющейся операции. Когда прерывается операция стирания или программирования до указанного времени завершения, не может быть гарантировано, что данные были корректно очищены или запрограммированы.

[Ссылки]

1. AN-4 Using Atmel’s Serial DataFlash site:microchip.com.
2. AT45DB161B: 16 мегабит DataFlash.
3. AVR335: цифровой рекордер звука на AVR и DataFlash.
4. Интерфейс SPI.

 

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


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

Top of Page