Организация и программирование флэш-памяти Intel
По организации и программированию можно выделить три поколения флэш-памяти Intel.
Микросхемы первого поколения (28F256, 28F512, 28F010, 28F020 ) представляют собой единый массив памяти, стираемый целиком (bulk erase). Для выполнения стирания и записи микросхемы имеют внутренний регистр команд и управляющий автомат WSM (Write State Machine). Стирание и программирование флэш-памяти возможны только при подаче на вход VPP напряжения 12 В по командам, записываемым во внутренний регистр в шинном цикле записи по сигналу WE#.
Выполнение команд инициируется записью кодов команд во внутренний регистр, для чего процессор должен выполнить команду записи в память по адресу, принадлежащему области программируемой микросхемы флэш-памяти. На микросхему при этом должны прийти сигналы СЕ# (выбор) и WE# (запись). Последующие обращения к этой области как по записи (W), так и по чтению (R) должны соответствовать исполняемой команде (табл. 7.25). В шинном цикле записи адрес (если он требуется для данной команды) фиксируется по спаду сигнала WE#, фиксация данных выполнения команды происходит по фронту WE#. Большинство команд подается безадресно (по любому адресу, принадлежащему данной микросхеме); команда верификации стирания и второй цикл команды программирования подаются по адресу требуемой ячейки. Результаты стирания и программирования считываются по адресу конкретной интересующей ячейки.
Таблица 7.25 . Команды микросхем флэш-памяти Intel первого поколения
Команда | Число циклов шины | Первый цикл шины¹ | Второй (третий) цикл шины¹ | ||||
R/W | Адрес | Данные | R/W | Адрес | Данные | ||
Read Memory | 1 | W | X | 00h | - | - | - |
Read ID | 3 | W | X | 90h | R | 0(1) | M_Id (D_Id) |
Set-up Erase/Erase | 2 | W | X | 20h | W | X | 20h |
Erase Verify | 2 | W | EA | A0h | R | X | EVD |
Set-up Program/Program 2 | 2 | W | X | 40h | W | PA | PD |
Program Verify | 2 | W | X | C0h | R | X | PVD |
Reset | 2 | W | X | FFh | W | X | FFh |
¹ Здесь X обозначает несущественный адрес, M_Id и D_Id — идентификаторы производителя и устройства, EA — адрес ячейки, в которой контролируется стирание, EVD — данные, считанные при верификации стирания (должны быть FFh), PA и PD — адрес и данные программируемой ячейки, PVD — данные, считанные при верификации программирования.
Ниже описано назначение команд.
♦ Read Memory — команда чтения данных, переводящая микросхему в режим чтения, совместимый по интерфейсу с EPROM.
♦ Read ID — команда чтения идентификаторов. В последующих шинных циклах чтения по адресу 0 считывается M_Id (Manufacturer Identifier — идентификатор производителя, 89h), по адресу 1 — D_Id (Device Identifier — идентификатор устройства, для микросхем 8F256, 28F512, 28F010, 28F020 это B9h, B8h, B4h и BDh соответственно). Из этого режима микросхема выходит по записи любой другой действительной команды. Идентификаторы можно читать и путем подачи высокого напряжения на А9 (как и для EPROM).
♦ Set-up Erase/Erase — подготовка и собственно стирание. Внутренний цикл стирания начинается по подъему сигнала WE# во втором шинном цикле и завершается по последующему шинному циклу записи или по внутреннему таймеру (Stop Timer). Последующей командой обычно является верификация стирания. Два шинных цикла записи, необходимые для выполнения команды, Снижают вероятность случайного стирания и позволяют отказаться от выполнения стирания посылкой команды Reset. Наличие внутреннего таймера позволяет не заботиться о точной выдержке времени для стирания, необходимо только выдержать минимальный интервал (около 10 мс). Перед стиранием все биты микросхемы должны быть предварительно запрограммированы в нули.
♦ Erase Verify — верификация стирания. Отличается от обычного считывания тем, что проверяемая ячейка ставится в более жесткие условия считывания для повышения достоверности контроля стирания. Между шинными циклами команды верификации должна быть пауза не менее 6 мкс. Алгоритм быстрого стирания (Quick-Erase) предусматривает предварительное обнуление всех ячеек (командами программирования) и выполнение команды стирания, сопровождаемой верификацией. Команды верификации последовательно выполняются для каждой ячейки микросхемы. Если результат считывания отличается от FFh, производится повторное стирание (длительностью 10 мс), и последующая верификация может начинаться с первой ранее не стертой ячейки. Если количество повторов стирания превышает 3 000, фиксируется ошибка стирания и микросхема признается негодной. Алгоритм позволяет выполнить полное стирание микросхемы менее чем за секунду.
♦ Set-up Program/Program — подготовка и собственно программирование. Команда выполняется аналогично стиранию, но во втором шинном цикле передается адрес и данные программируемой ячейки, а последующая выдержка должна составлять не менее 10 мкс.
♦ Program Verify — верификация программирования (аналогично верификации стирания), обычно следующая после команды программирования. Между шинными циклами команды верификации должна быть пауза не менее 6 мкс. Алгоритм быстрого программирования (Quick-Pulse Programming) предусматривает формирование внутреннего цикла программирования длительностью 10 мкс с последующей верификацией. В случае несовпадения результата выполняется повторное программирование (до 25 раз для каждой ячейки), а если и это не помогает — фиксируется отказ микросхемы.
♦ Reset — команда сброса, прерывающая команду программирования или стирания. Эта команда не меняет содержимое памяти; после нее требуется подача другой действительной команды.
По включении питания внутренний регистр команд обнуляется, что соответствует команде чтения, и микросхема работает как обычная микросхема PROM или EPROM. Это позволяет устанавливать микросхемы флэш-памяти вместо EPROM аналогичной емкости. При подаче на вход VPP низкого напряжения (0–6,5 В) стирание и программирование невозможны, и микросхема ведет себя как обычная EPROM.
Микросхемы второго поколения секторированы — ячейки группируются в блоки, допускающие независимое стирание (асимметричное разбиение — Boot Block и симметричное — Flash File ). Длительная операция стирания одного блока может прерываться для считывания данных других блоков, что значительно повышает гибкость и производительность устройства. Микросхемы имеют более сложный внутренний управляющий автомат и в них введен регистр состояния, что позволяет разгрузить внешний процессор и программу от забот по отслеживанию длительности операций программирования и стирания, а также упростить эти процедуры.
В отличие от микросхем первого поколения, в шинном цикле записи адрес и данные фиксируются по положительному перепаду WE#. Низкий уровень дополнительного управляющего сигнала RP# (в первых версиях обозначался как PWD#) предназначен для перевода микросхемы в режим с минимальным потреблением. В этом режиме модификация содержимого памяти невозможна. Соединение этого вывода в нормальном режиме (когда не требуется перезапись Boot-блока) с системным сигналом RESET# предохраняет микросхему от выполнения ложных команд, которые могут появиться в процессе подачи питания.
Внутренние операции стирания и программирования выполняются после посылки соответствующих кодов во внутренний регистр команд . Команды приведены в табл. 7.26. Как и в первом поколении, этот регистр для большинства команд безадресный, но команды программирования и стирания посылаются по требуемому адресу ячейки (блока). Отработка операций внутренним управляющим автоматом отображается соответствующими битами регистра состояния SR (Status Register), по значению которых внешняя программа может получить информацию о результате выполнения и возможности посылки следующих команд. Чтение регистра SR выполняется по специальной команде; есть и команда его очистки. Назначение бит регистра состояния описано ниже.
♦ SR.7 — WSMS (Write State Machine Status) — состояние управляющего автомата:
• 0 — Busy (занят операцией стирания или программирования);
• 1 — Ready (свободен).
♦ SR.6 — ESS (Erase Suspend Status) — состояние операции стирания:
• 0 — стирание завершено или выполняется;
• 1 — стирание приостановлено.
♦ SR.5 — ES (Erase Status) — результат стирания блока:
• 0 — блок стерт успешно;
• 1 — ошибка стирания.
♦ SR.4 — PS (Program Status) — результат программирования байта:
• 0 — байт записан успешно;
• 1 — ошибка записи.
♦ SR.3 — VPPS (VPP Status) — состояние VPP во время программирования или стирания:
• 0 — напряжение было в норме;
• 1 — зафиксировано понижение напряжения, и операция прервана.
♦ SR[2:0] — зарезервированы.
Таблица 7.26 . Команды микросхем флэш-памяти Intel второго поколения
Команда | Число циклов шины | Первый цикл шины¹ | Второй (третий) цикл шины¹ | ||||
R/W | Адрес | Данные | R/W | Адрес | Данные | ||
Read Array/Reset | 1 | W | X | FFh | - | - | _ |
Read ID (D_Id) | 3 | W | X | 90h | R | 0(1) | M_Id |
Read Status Register | 2 | W | X | 70h | R | X | SRD |
Clear Status Register | 1 | W | X | 50h | - | - | - |
Erase Setup/Erase Confirm | 2 | W | BA | 20h | W | BA | D0h |
Erase Suspend/Erase Resume | 2 | W | X | B0h | W | X | D0h |
Program Setup/Program | 2 | W | PA | 40h | W | PA | PD |
Alternate Program Setup/Program² | 2 | W | PA | 10h | W | PA | PD |
¹ Здесь X обозначает несущественный адрес, M_Id и D_Id — идентификаторы производителя и устройства, SRD — данные, считанные из регистра состояния, PA и PD — адрес и данные программируемой ячейки, BA — адрес блока.
² Альтернативный код команды программирования; доступен для микросхем емкостью 2, 4 и 8 Мбит.
Ниже описано назначение команд.
♦ Read Array/Reset — чтение массива памяти (перевод в режим, совместимый с EPROM) и прерывание операций стирания и программирования.
♦ Read ID — чтение идентификаторов производителя и устройства.
♦ Read Status Register — чтение регистра состояния.
♦ Clear Status Register — сброс регистра состояния.
♦ Erase Setup/Erase Confirm — подготовка и стирание блока. В отличие от микросхем первого поколения, все внутренние операции, необходимые для стирания (обнуление ячеек блока, стирание и верификация), выполняются автоматически. При получении команды в регистре состояния устанавливается признак занятости (SR.7=0) и любая шинная операция чтения микросхемы будет передавать данные этого регистра. Внешняя программа, периодически опрашивая регистр состояния, дожидается окончания выполнения стирания (когда SR.7=1). Результат стирания определяется по значению бит 3, 4, 5 (их нулевое значение соответствует успешному выполнению операции).
♦ Erase Suspend/Erase Resume — приостановка/продолжение стирания. Операцию стирания блока (как самую длительную) можно приостановить для чтения данных из других блоков. После выполнения команды Erase Suspend (код B0h) необходимо дождаться признака приостановки стирания (SR.6=1), после чего, подав команду Read Array, можно считывать данные другого блока. По окончании считывания подается команда Erase Resume (код D0h), которая продолжает процесс стирания и снова переводит микросхему в режим чтения регистра состояния.
♦ Program Setup/Program — подготовка и программирование ячейки. Эта команда выполняется аналогично подготовке и выполнению стирания, но не может быть приостановлена. Команда выполняет сразу и программирование, и верификацию.
Команды стирания блока и программирования можно подавать, только когда управляющий автомат свободен (бит SR.7=1). Во время этих операций микросхема следит за уровнем напряжения VPP, и, если оно понижается до порога VPPLK) этот факт регистрируется в регистре состояния и операция прерывается. Также операция прерывается при понижении напряжения питания VCC до 2,5 В.
При считывании регистра состояния его мгновенное значение фиксируется по спаду сигнала СЕ# или ОЕ# (самого позднего из них в шинном цикле считывания).
Программирование и стирание Boot-блока отличаются от операций с другими блоками тем, что для них требуется подача высокого потенциала VHH (не ТТЛ, а +12 В) на вход PWD# перед выдачей команды стирания или программирования и удержание его до успешного завершения операции. Альтернативный способ — подача такого же потенциала, но на вход ОЕ# на время пар шинных циклов записи команд стирания или программирования. Попытка программирования Boot-блока без выполнения этих условий не удается, а в регистре состояния одновременно устанавливаются единичные значения бит ES и PS, что индицирует попытку модификации защищенного блока.
Микросхемы Flash-file организованы в виде набора одинаковых блоков, равноправных (симметричных) по защите (Symmetrical Architecture, SA ), Защита от модификации для 28F008SA может осуществляться только для всей микросхемы подачей низкого напряжения на вход VPP. По интерфейсу и командам микросхемы совпадают с микросхемами Boot Block (исключая специфику Boot-блока).
Архитектура микросхем 28F016SA существенно изменена, что значительно повышает производительность программирования (до 28,6 Мбайт/с в пакетном режиме) и обеспечивает поблочную защиту. Микросхема имеет два буфера данных для записи по 256 Кбайт. Флэш-память организована как 32 блока по 64 Кбайт, допускающих однобайтное или двухбайтное обращение. С каждым блоком связан собственный 8-битный регистр состояния блока BSRx (Block Status Register). Адреса регистров смещены относительно начального адреса блока на 2 или 1 для режимов обращения x8 или x16 соответственно. Назначение бит BSR описано ниже.
♦ BSR.7 — BS (Block Status) — состояние блока:
• 1 — готов;
• 0 — занят.
♦ B5R.6 — BLS (Block-Lock Status) — состояние защиты блока:
• 1 — программирование и стирание запрещены;
• 0 — блок не защищен.
♦ BSR.5 — BOS (Block Operation Status) — состояние операции с блоком:
• 1 — операция завершена безуспешно;
• 0 — операция успешно завершена или выполняется.
♦ BSR.4 — BOAS (Block Operation Abort Status) — состояние отмены операции с блоком:
• 1 — операция отменена;
• 0 — операция не отменялась.
♦ BSR.3 — QS (Queue Status) — состояние очереди:
• 1 — очередь заполнена;
• 0 — очередь доступна.
♦ BSR.2 — VPPS (VPP Status) — состояние VPP:
• 1 — обнаружен низкий уровень, операция прервана;
• 0 — VPP в норме.
♦ BSR[1:0] — зарезервированы.
Глобальный регистр состояния GSR (Global Status Register) несет информацию о состоянии микросхемы в целом. К GSR можно обращаться по адресу, смещенному относительно начального адреса любого блока на 4 или 2 для режимов обращения x8 или x16 соответственно. Назначение бит GSR описано ниже.
♦ GSR.7 — WSMS (Write State Machine Status) — состояние автомата записи (и завершенности внутренних операций):
• 1 — занят;
• 0 — свободен.
♦ GSR.6 — OSS (Operation Suspend Status) — состояние приостановки операции:
• 1 — операция приостановлена;
• 0 — операция выполняется или завершена.
♦ GSR.5 — DOS (Device Operation Status) — состояние операции (копирует бит регистра состояния текущего блока):
• 1 — операция завершена неудачно;
• 0 — операция успешно завершена или выполняется.
♦ GSR.4 — DSS (Device Sleep Status) — состояние ожидания:
• 1 — ожидание (Sleep);
• 0 — нормальный режим.
♦ GSR.3 — QS (Queue Status) — состояние очереди:
• 1 — очередь заполнена;
• 0 — очередь доступна.
♦ GSR.2 — PBAS (Page Buffer Available Status) — состояние буферов записи:
• 1 — есть свободный буфер;
• 0 — нет свободного буфера.
♦ GSR.1 — PBS (Page Buffer Status) — состояние выбранного буфера записи:
• 1 — выбранный буфер свободен;
• 0 — буфер занят операцией с WSM.
♦ GSR.0 — PBSS (Page Buffer Select Status) — номер выбранного буфера:
• 1 — выбран буфер 1;
• 0 — выбран буфер 0.
Для сохранения программной совместимости имеется безадресный регистр CSR (Compatible Status Register), полностью совпадающий с регистром состояния 28F008SA и микросхем с архитектурой Boot Block. Все команды этих микросхем доступны. Введены новые команды (табл. 7.27), обеспечивающие расширение функций. Ниже перечислены дополнительные возможности микросхем.
♦ Буферированное страничное программирование. Кроме обычного побайтного или двухбайтного программирования возможно быстрое заполнение буфера шинными циклами записи. Далее переписывание его содержимого (всего или фрагмента) во флэш-память выполняется одной командой. Содержимое буфера может быть считано после подачи соответствующей команды.
♦ Двухбайтное программирование при 8-битном использовании.
♦ Поддержка очереди команд позволяет при наличии свободного места в очереди подавать последующие команды стирания или программирования, не дожидаясь освобождения автомата WSM . Признак готовности WSM установится только после выполнения всех команд очереди.
♦ Автоматическая запись из буфера во флэш-массив во время стирания другого блока. Программная защита позволяет для любого блока установить бит защиты в специальную энергонезависимую область. Запись и стирание защищенного блока может осуществляться только после снятия общей защиты записи по сигналу WP#. Сброс бита защиты блока осуществляется только при его успешном стирании или перезаписи.
♦ Стирание всех незащищенных блоков может выполняться одной командой.
♦ Программирование использования сигнала RY/BY#. Возможно разрешение отображения бита готовности глобального регистра состояния, подачи импульсного сигнала по завершении программирования или стирания (на выбор), а также запрет его формирования.
♦ Перевод микросхемы в режим ожидания (Sleep) с пониженным потреблением В этом режиме возможно считывание состояния и получение команд.
Таблица 7.27 . Дополнительные команды микросхем 28F016SA
Команда | Первый цикл шины | Второй цикл шины | Третий цикл шины | ||||||
R/W | Адрес¹ | Данные² | R/W | Адрес¹ | Данные² | R/W | Адрес¹ | Данные² | |
Read Extended Status Register (чтение дополнительных регистров) | W | X | xx71h | R | RA | GSRD BSRD | - | - | - |
Page Buffer Swap (смена буфера) | W | X | xx72h | - | - | - | - | - | - |
Read Page Buffer (чтение буфера) | W | X | xx75h | R | РВА | PBD | - | - | - |
Single Load to Page Buffer (одиночная запись в буфер) | W | X | xx74h | W | РВА | PBD | - | - | - |
Sequential Load to Page Buffer x8/x16 (последовательная запись в буфер) | W | X | xxE0h | W | X | BCL/WCL³ | W | X | BCH/WCH³ |
Page Buffer Write to Flash x8/х16 (перепись буфера в массив) | W | X | xx0Ch | W | A0 | BC(LH)/WCL³ | W | X | BC(HL)/WCH³ |
Two-Byte Write x8 (двухбайтное программирование в режиме x8) | W | X | xxFBh | W | A0 | WD(L,H)³ | W | WA | WD(H,L)³ |
Lock Block/Confirm (защита блока) | W | X | xx77h | W | BA | xxD0h | - | - | - |
Upload Status Bits/Confirm (выгрузка состояния блока в GSR) | W | X | xx97h | W | X | xxD0h | - | - | - |
Upload Device Information (выгрузка информации об устройстве) | W | X | xx99h | W | X | xxD0h | - | - | - |
Erase All Unlocked Blocks/Confirm (стирание всех незащищенных блоков) | W | X | xxA7h | W | X | xx00h | - | - | - |
RY/BY# Enable to Level-Mode (разрешение отображения GSR.7 потенциалом) | W | X | xx96h | W | X | xx01h | - | - | - |
RY/BY# Pulse-On-Write (импульс по окончании программирования) | W | X | xx96h | W | X | xx02h | - | - | - |
RY/BY# Pulse-On-Erase (импульс по окончании стирания) | W | X | xx96h | W | X | xx03h | - | - | - |
RY/BY# Disable (запрет сигнала RY/BY#) | W | X | xx96h | W | X | xx04h | - | - | - |
Sleep (режим ожидания) | W | X | xxF0h | - | - | - | - | - | - |
Abort (отмена операции) | W | X | xx80h | - | - | - | - | - | - |
¹ BA = Block Address — адрес блока, РВА = Page Buffer Address — адрес внутри буфера, RA = Extended Register Address — адрес дополнительного регистра (BSRx или GSR), WA = Write Address — адрес во флэш-массиве. А0 указывает на порядок следования байт в режиме x8 (при низком уровне BYTE#): 0 = сначала младший, затем старший; 1 = наоборот.
² AD = Array Data — данные из массива, PBD = Page Buffer Data — данные буфера, WD (L,H) = Write Data (Low, High) — данные для записи в массив, BSRD = BSR Data — информация регистра состояния блока, GSRD = GSR Data — информация глобального регистра состояния.
³ WC (L,H) = Word Count (Low, High) — счетчик слов. WCL=0 соответствует записи одного слова. Для буфера 256 байт WCH=0. BC (L,H) = Byte Count (Low, High) — счетчик байт. WCL=0 соответствует записи одного байта. Для буфера 256 байт WCH=0.
Микросхема 28F032SA представляет собой два параллельно соединенных кристалла 28F016SA в одном корпусе. Входы СЕ# одного из них соединены с выводами СЕ0# и СЕ1#, второго — с СЕ0# и СЕ2#.
Третье поколение — современные микросхемы, выполненные по технологии SmartVoltage , допускают стирание и программирование при напряжении VPP как 12 В, так и 5 В. В последнем случае эти операции занимают больше времени. Кроме того, операции чтения возможны при пониженном (3,3 и даже 2,7 В) напряжении питания VCC, при этом снижается потребление, но увеличивается время доступа.
Для управления защитой данных введен логический сигнал WP# (Write Protect). При его высоком уровне программирование и стирание защищенных блоков выполняются так же, как и остальных. При низком уровне WP# модификация защищенных блоков возможна только при наличии высокого (12 В) напряжения на входе RP#.
Для полной защиты от стирания и программирования на вход VPP должен подаваться низкий логический уровень (или 0 В), а не 5 В, как у микросхем с программированием напряжением 12 В.
Настройка (оптимизация потребления и быстродействия) происходит по уровню напряжения на выводе VCC по включении питания, переход на другое значение должен производиться через выключение питания.
Флэш-память фирмы AMD
Фирмой AMD выпускается несколько семейств микросхем флэш-памяти. Первые из них были близки по характеристикам к флэш-памяти Intel первого поколения(Bulk Erase, стирание и программирование 12 В): это Am28F256/512/010/020 . В отличие от аналогичных микросхем Intel, Am28F256/512 не имели стоп-таймера, что требовало точной выдержки при программировании и стирании. Следующим этапом были микросхемы Am28F256A/512A/010A/020A со встроенным алгоритмом программирования, отличающимся от алгоритма микросхем Intel второго поколения как последовательностью команд, так и способом определения момента окончания операций. Для защиты от случайного выполнения команды состоят из 3–6 шинных циклов, причем для них существенен и адрес (табл. 7.28). Состояние выполнения операций стирания или программирования определяется по результату данных, полученных в шинном цикле чтения по адресу ячейки, участвующей в операции (а не регистра состояния, как у Intel). Для определения окончания операций может использоваться метод Data# Polling или Toggle Bit . Метод Data# Polling основан на анализе бита D7 считанных данных. В начале выполнения внутреннего цикла он устанавливается инверсным по отношению к тому, что должно быть записано в ячейку. По успешном окончании операции он принимает желаемое значение (при стирании — 1). Метод Toggle Bit основан на анализе бита D6, который при каждом шинном цикле считывания во время выполнения операции меняет свое значение на противоположное. По окончании операции он остановится в каком-либо состоянии, при этом об успешности можно судить по биту 7. Единичное значение бита D5 — Exceeded Timing Limits — указывает на превышение допустимого времени выполнения операции.
Таблица 7.28 . Команды флэш-памяти Am29F010
Команда | Reset/Read | Autoselect | Byte Program | Chip Erase | Sector Erase | ||
Количество циклов | 3 | ||||||
1-й цикл | Addr | 5555h | 5555h | 5555h | 5555h | 5555h | |
Data | AAh | AAh | AAh | AAh | AAh | ||
2-й цикл | Addr | 2AAAh | 2AAAh | 2AAAh | 2AAAh | 2AAAh | |
Data | 55h | 55h | 55h | 55h | 55h | ||
3-й цикл | Addr | 5555h | 5555h | 5555h | 5555h | 5555h | |
Data | F0h | 90h | A0h | 80h | 80h | ||
4-й цикл | Addr | - | XX00h/XX01h | PA¹ | 5555h | 5555h | |
Data | - | 01h/20h | PD² | AAh | AAh | ||
5-й цикл | Addr | - | - | - | 2AAAh | 2AAAh | |
Data | - | - | - | 55h | 55h | ||
6-й цикл | Addr | - | - | - | 5555h | SA³ | |
Data | - | - | - | 10h | 30h |
¹ PA = адрес программируемой ячейки.
² PD = данные для записи в программируемую ячейку.
³ SA = адрес стираемого сектора (значимы биты A16, A15 и А14).
Микросхемы семейства Am29Fxxx выполняют все операции при одном питающем напряжении 5 В и имеют секторированную структуру (Sector Erase), симметричную (аналогично Flash File) или несимметричную (Boot Block), с верхним (T) и нижним (В) положением Boot-блока. С помощью программатора каждый сектор может быть защищен от модификации в целевой системе (в отличие от Intel способ установки и снятия защиты фирмой AMD широко не раскрывается). По расположению выводов и интерфейсу микросхемы соответствуют стандарту JEDEC для флэш-памяти с одним питающим напряжением. Микросхемы позволяют выполнять одновременное стирание группы секторов. Все эти микросхемы, кроме Am29F010, имеют возможность приостановки стирания сектора (Erase Suspend) для выполнения чтения других секторов, a Am29F080/016 позволяют еще и программировать байты во время приостановки стирания.
В командах значение бит A15, A16 существенно только при задании адреса ячейки. Ниже описано назначение команд.
♦ Reset/Read — сброс и перевод в режим считывания массива. Производится автоматически по включении питания и при получении некорректной команды (или адреса) в цепочке.
♦ Autоsеlесt — чтение кодов идентификации производителя (А=0), устройства (А=1) или состояния защиты сектора (биты A16-А14 задают адрес сектора, A2=1, остальные биты адреса — нулевые). Результат считывания состояния защищенного сектора — 01h, незащищенного — 00h. Идентификаторы и состояние защиты могут быть считаны и путем подачи высокого напряжения на вход А9 в шинном цикле считывания.
♦ Byte Program — программирование байта. После четвертого цикла шины начинается внутреннее выполнение программирования, при этом чтение по адресу программируемой ячейки выводит биты состояния.
♦ Chip Erase — стирание всех незащищенных секторов. На время выполнения стирания чтение по любому адресу (кроме адресов, принадлежащих защищенным секторам) выводит биты состояния.
♦ Sector Erase — стирание сектора или группы секторов. Стирание начинается через 80 мкс после окончания последнего шинного цикла цепочки. До этого момента можно посылать цепочки команд стирания других секторов, выполнение начнется через 80 мкс после окончания последней цепочки. Если среди указанных секторов имеется защищенный, его стирание не выполняется. На время выполнения стирания чтение по адресу любого из стираемых секторов (кроме защищенных) выводит биты состояния. Бит DQ3 — Sector Erase Timer — указывает на начало выполнения стирания сектора (очередную последовательность команд стирания сектора можно начинать, пока бит 3=0).
Следующим этапом стала секторированная флэш-память Am29LVxxx с одним питающим напряжением (3,0 В) для всех операций. У этих микросхем защита любого сектора также устанавливается с помощью программатора стандартной микросхемы EPROM, а также возможно временное снятие защиты в целевой системе. Кроме программной индикации окончания операции (биты 5–7, считанные по адресу ячейки), имеется и аппаратная (сигнал RY/BY#). Также имеется сигнал аппаратного сброса, переводящий в режим чтения.
Вышеперечисленные микросхемы имеют традиционную архитектуру NOR. От них значительно отличается микросхема Am30LV0064D — 64 Мбит (8 М×8) с архитектурой UltraNAND, обеспечивающей быстрый последовательный доступ к данным выбранной страницы. Каждая страница имеет 512 байт данных и 16 дополнительных байт, используемых, например, для хранения ЕСС-кода. Для выбора страницы при чтении (загрузки во внутренний 528-байтный регистр) требуется около 7 мкс, после чего данные считываются последовательно со скоростью до 20 Мбайт/с (50 нс/байт). Таким образом, среднее время на чтение одного байта составляет всего 65 нс. Для записи данные (страница полностью или частично) загружаются в регистр с той же скоростью, после чего запись их в массив хранящих ячеек требует всего 200 мкс. Таким образом, среднее время на запись одного байта составляет всего 430 нс — в 20 раз быстрее обычной (NOR) флэш-памяти (скорость записи 2,3 Мбайт/с). Стирание выполняется блоками по 8 Кбайт за 2 мс (в обычной — 600 мс). Микросхема питается от 3 В. Планируется достижение объема микросхемы до 1 Гбит. Надежность хранения — 10 лет, 104 циклов безошибочного программирования, более 106 циклов программирования с коррекцией ошибок. Применение — «твердые диски», цифровые камеры, диктофоны и т. п.
Флэш-память других фирм
Микросхемы флэш-памяти выпускаются многими фирмами. Они различаются по организации, интерфейсу, напряжению питания и программирования, методам защиты и другим параметрам. Лидеры в области разработки и производства флэш-памяти — фирмы AMD, Fujitsu Corporation, Intel Corporation и Sharp Corporation летом 1996 года приняли спецификацию CFI (Common Flash Memory Interface Specification), обеспечивающую совместимость разрабатываемого программного обеспечения с существующими и разрабатываемыми моделями флэш-памяти. Эта спецификация определяет механизм получения информации о производителе, организации, параметрах и возможных алгоритмах программирования микросхем флэш-памяти. Для этого микросхемы флэш-памяти должны поддерживать команду опроса QUERY. В первом шинном цикле в микросхему по адресу 55h посылается код 98h (микросхема может и игнорировать адрес, «отзываясь» только на код данных 98h). Во втором шинном цикле, адресованном к этой микросхеме, выполняется чтение данных идентификационной структуры (на шину адреса микросхемы подается адрес интересующего байта структуры). Этими парами циклов структура может быть считана в произвольном порядке. Идентификационная структура содержит:
♦ ключ-признак наличия структуры — цепочка символов «QRY»;
♦ идентификатор (2 байта) первичного набора команд и интерфейса программирования;
♦ указатель на таблицу параметров для программирования (и саму таблицу);
♦ идентификатор, указатель и таблицу параметров альтернативного набора команд и интерфейса (если имеется);
♦ минимальные и максимальные значения напряжений питания (основного и программирующего);
♦ значение тайм-аутов для операций стирания (блока и всей микросхемы) и записи (байта, слова, буфера);
♦ объем памяти;
♦ максимальное число байтов для многобайтной записи;
♦ описания независимо стираемых блоков.
Для перевода в режим чтения массива микросхемы должны воспринимать команду чтения массива Read Array — запись кода FFh (F0h) по любому адресу в микросхеме.
Для большинства изделий справедливы тенденции, описанные при рассмотрении микросхем Intel и AMD, а именно — повышение объема, снижение напряжений питания и потребляемой мощности, повышение производительности и упрощение внешнего интерфейса для операций стирания и программирования. По интерфейсу программирования микросхемы, у которых в начальной части обозначения стоит число «28», как правило, близки к флэш- памяти Intel, а с числом «29» — к флэш-памяти AMD.
Микросхемы с буферированным программированием или страничной записью (Fast Page Write) могут не иметь в своей системе команд отдельной операции стирания сектора. Внутренняя операция стирания (и предварительного обнуления сектора) выполняется при страничном программировании.
Для защиты от случайного выполнения ключевые последовательности команд содержат от 2 до 6 шинных циклов, причем у них может быть важен и адрес (как в микросхемах AMD). Методы защиты секторов имеют различную как программную, так и аппаратную реализацию. Для временного снятия защиты используют различные способы, одним из которых является ключевая последовательность семи шинных циклов чтения.
Микросхемы флэш-памяти Micron совместимы с Intel и обозначаются аналогично, но начинаются с признака MT28F. Среди них есть и особенные, например: MT28F321P2FG — 2 М×16 Page Flash Memory, MT28F322D18FH — 2 М×16 Burst Flash Memory.
Фирма Silicon Storage Technology выпускает разнообразные микросхемы флэш-памяти с одним напряжением питания для всех операций. Их свойства можно определить по обозначению вида SST xx YY zzz — ttt, где xx — семейство:
♦ 28 — побайтное программирование, посекторное стирание;
♦ 29 — страничное программирование с прозрачным стиранием (команда стирания сектора отсутствует, внутренняя операция выполняется автоматически перед записью страницы в массив).
Элемент YY задает функциональный тип и напряжение питания:
♦ ЕЕ — EEPROM-совместимые, выполнение одной инструкции, VCC = 5 В;
♦ LE — то же, что и ЕЕ, VCC = 3 В;
♦ VE — то же, что и ЕЕ, VCC = 2,7 В;
♦ SF — операции Super Flash Command Register, VCC = 5 В;
♦ LF — то же, что и SF, VCC = 3 В;
♦ VF — то же, что и SF, VCC = 2,7 В;
♦ DM — Disk Media (для флэш-дисков, требует внешнего контроллера), VCC = 5 В;
♦ LM — то же, что и DM, VCC = 3 В;
♦ VM — то же, что и DM, VCC = 2,7 B;
♦ PC — PCMCIA (интерфейс и протоколы), VCC = 5 В.
Элемент zzz задает объем микросхемы:
♦ 512 — 512 Кбит (64 К×8);
♦ 010 — 1 Мбит (128 К×8);
♦ 040 — 4 Мбит (512 К×8);
♦ 080 — 8 Мбит (1 М×8);
♦ 016 — 16 Мбит (2 М×8);
♦ 032 — 32 Мбит (4 М×8).
Элемент ttt задает время доступа при чтении.
Микросхемы SST29EE010, 29LE010 и 29VE010 , часто применяемые в качестве носителя флэш-BIOS, организованы как 1024 страницы по 128 байт с программной и аппаратной защитой. Каждая страница может быть защищена независимо от других. Временные диаграммы стирания и программирования, а также необходимое напряжение программирования генерируются внутри микросхемы. Окончание операции определяется по алгоритму Toggle Bit или Data# Polling .
Аналогичные параметры имеют микросхемы 29ЕЕ011, 29LE011, 29VE011 фирмы Winbond.