MSP430_Final
.pdf7.3. Функционирование флэш#памяти 271
Запретить сторожевой таймер
Да
BUSY = 1
Настроить контроллер флэш памяти и задать режим стирания
Выполнить фиктивную запись
Да
BUSY = 1
Установить LOCK = 1, разрешить сторожевой таймер
Рис. 7.6. Запуск цикла стирания из ОЗУ.
;Стирание сегмента из ОЗУ. 514 кГц < SMCLK < 952 кГц
;Предполагается, что ACCVIE = NMIIE = OFIE = 0.
MOV #WDTPW+WDTHOLD,&WDTCTL |
; Запрещаем WDT |
L1 BIT #BUSY,&FCTL3 |
; Проверяем BUSY |
JNZ L1 |
; Ждём освобождения контроллера |
MOV #FWKEY+FSSEL1+FN0,&FCTL2 |
; SMCLK/2 |
MOV #FWKEY,&FCTL3 |
; Сбрасываем LOCK |
MOV #FWKEY+ERASE,&FCTL1 |
; Разрешаем стирание |
CLR &0FC10h |
; Фиктивная запись, стираем сегмент 1 |
L2 BIT #BUSY,&FCTL3 |
; Проверяем BUSY |
JNZ L2 |
; Ждём завершения операции |
MOV #FWKEY+LOCK,&FCTL3 |
; Выполнено, устанавливаем LOCK |
... |
; Повторно разрешаем WDT? |
7.3.3. Запись в флэшCпамять
Возможные режимы записи задаются битами WRT и BLKWRT в соответствии с Табл. 7.2.
Таблица 7.2. Режимы записи
BLKWRT |
WRT |
Режим записи |
|
|
|
0 |
1 |
Запись байта/слова |
|
|
|
1 |
1 |
Блочная запись |
|
|
|
272Глава 7. Контроллер флэш#памяти
Вобоих режимах запись производится последовательным выполнением отдельных команд записи, однако режим блочной записи позволяет выполнять данную операцию почти в два раза быстрее, нежели режим записи отдельных зна чений, поскольку в этом режиме генератор напряжения остаётся включенным до завершения записи всего блока. Для изменения содержимого флэш памяти как в режиме записи слова/байта, так и в режиме блочной записи можно использовать любые команды, модифицирующие операнд приёмник. Причём после каждого стирания не следует писать в одно и то же слово флэш памяти (младший + стар ший байты) больше двух раз — это может вызвать повреждение памяти.
Бит BUSY устанавливается в начале операции записи и сбрасывается после её завершения. Если операция записи инициирована программой, находящейся в ОЗУ, то процессор не должен обращаться к флэш памяти до сброса бита BUSY. Попытка обращения к флэш памяти при BUSY = 1 приведёт к нарушению досту па с последующей установкой флага ACCVIFG, а результат записи окажется не определённым.
Запись байта/слова
Операция записи отдельного байта/слова может быть инициирована из про граммы, расположенной как в флэш памяти, так и в ОЗУ. При запуске операции записи из программы, расположенной в флэш памяти, все временные параметры определяются контроллером флэш памяти, а работа ЦПУ приостанавливается до окончания операции. После завершения цикла стирания центральный процессор возобновляет выполнение программы, начиная с команды, следующей за коман дой записи. Временная диаграмма операции записи байта/слова приведена на
Рис. 7.7.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Операция программирования |
|
|
|
Генерация |
|
Снятие |
||||
|
|
|||||
напряжения |
|
напряжения |
||||
программирования |
|
программировани |
Время программирования, ток потребления по VCC увеличен
BUSY
t записи слова = 30/f FTG
Рис. 7.7. Временная диаграмма операции записи байта/слова.
При запуске операции записи из программы, расположенной в ОЗУ, процес сор не останавливается, а продолжает исполнять код программы. Обращение ЦПУ к флэш памяти допускается только после завершения цикла записи, что оп ределяется по состоянию бита BUSY. Попытка обращения к флэш памяти при BUSY = 1 приведёт к нарушению доступа с последующей установкой флага ACCVIFG, а результат записи окажется неопределённым.
274 Глава 7. Контроллер флэш#памяти
Запретить сторожевой таймер
Да
BUSY = 1
Настроить контроллер флэш памяти и установить WRT = 1
Записать байт или слово
Да
BUSY = 1
Установить WRT = 0, LOCK = 1, разрешить сторожевой таймер
Рис. 7.9. Запись байта/слова, инициируемая из ОЗУ.
;Запись байта/слова из ОЗУ. 514 кГц < SMCLK < 952 кГц
;Предполагается, что блок 0FF1Eh уже стёрт
;Предполагается, что ACCVIE = NMIIE = OFIE = 0.
MOV #WDTPW+WDTHOLD,&WDTCTL |
; Запрещаем WDT |
L1 BIT #BUSY,&FCTL3 |
; Проверяем BUSY |
JNZ L1 |
; Ждём освобождения контроллера |
MOV #FWKEY+FSSEL1+FN0,&FCTL2 |
; SMCLK/2 |
MOV #FWKEY,&FCTL3 |
; Сбрасываем LOCK |
MOV #FWKEY+WRT,&FCTL1 |
; Разрешаем запись |
MOV #0123h,&0FF1Eh |
; 0123h –> 0FF1Eh |
L2 BIT #BUSY,&FCTL3 |
; Проверяем BUSY |
JNZ L2 |
; Ждём освобождения контроллера |
MOV #FWKEY,&FCTL1 |
; Сбрасываем WRT |
MOV #FWKEY+LOCK,&FCTL3 |
; Устанавливаем LOCK |
... |
; Повторно разрешаем WDT? |
Блочная запись
Режим блочной записи может использоваться для ускорения процесса записи в флэш память при необходимости программирования большого числа подряд идущих байтов или слов. Напряжение программирования не снимается с флэш памяти до окончания записи 64 байтного блока. Суммарное время программиро вания любого блока не должно превышать значения tCPT для данного микроконт роллера.
Блочная запись не может быть инициирована из флэш памяти — только из ОЗУ. Бит BUSY сбрасывается только после завершения записи всего блока. Меж ду записью отдельных байтов или слов блока необходимо проверять бит WAIT — запись очередного байта или слова разрешается только при WAIT = 1. При после довательной записи нескольких блоков бит BLKWRT необходимо сбрасывать после окончания записи каждого из них. Повторная установка бита BLKWRT,
7.3. Функционирование флэш#памяти 275
разрешающая запись следующего блока, может быть произведена через опреде лённое время, требуемое для восстановления флэш памяти (tend). Бит BUSY сбра сывается после окончания записи очередного блока, информируя о возможности записи следующего блока. Временная диаграмма операции блочной записи пока зана на Рис. 7.10.
Бит BLKWRT
Запись в флэш память, например, MOV #123h, &Flash
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Операция программирования |
|
|
|
|
|
|
|
|
|
|
|
|
Снятие |
|||
|
Генерация |
|
|
|
|
|
||||
|
напряжения |
|
|
|
|
|
напряжения |
|||
программи |
|
|
|
|
|
программи |
||||
|
рования |
|
|
|
|
|
|
рования |
||
|
|
|
|
|
|
|
|
Общее время программирования tCPT ≤ 4 мс, ток потребления по VCC увеличен
BUSY
|
|
|
|
|
|
t заверш. = |
t блока, 0 = 25/f FTG |
|
|
|
t блока, 1 63 = 18/f FTG |
t блока, 1 63 = 18/f FTG |
= 6/f FTG |
WAIT
Рис. 7.10. Временная диаграмма операции блочной записи.
Использование режима блочной записи
Последовательность операций, требуемая для выполнения записи в блочном режиме, приведена на Рис. 7.11.
;Записываем блок, начиная с адреса 0F000h.
;Программа должна исполняться из ОЗУ, предполагается,
;что флэш$память уже стёрта.
;514 кГц < SMCLK < 952 кГц
;Предполагается, что ACCVIE = NMIIE = OFIE = 0.
|
MOV |
#32,R5 |
; Используем как счётчик записи |
|
MOV |
#0F000h,R6 |
; Загружаем указатель |
|
MOV |
#WDTPW+WDTHOLD,&WDTCTL |
; Запрещаем WDT |
L1 |
BIT |
#BUSY,&FCTL3 |
; Проверяем BUSY |
|
JNZ |
L1 |
; Ждём готовности контроллера |
|
MOV |
#FWKEY+FSSEL1+FN0,&FCTL2 |
; SMCLK/2 |
|
MOV |
#FWKEY,&FCTL3 |
; Сбрасываем LOCK |
|
MOV |
#FWKEY+BLKWRT+WRT,&FCTL1 |
; Разрешаем блочную запись |
L2 |
MOV |
Write_Value,0(R6) |
; Пишем по адресу |
L3 |
BIT |
#WAIT,&FCTL3 |
; Проверяем WAIT |
|
JZ |
L3 |
; Будем ждать, пока WAIT=0 |
|
INCD |
R6 |
; Указываем на следующее слово |
|
DEC |
R5 |
; Декрементируем счётчик записи |
276 Глава 7. Контроллер флэш#памяти |
|
||
JNZ |
L2 |
|
; Конец блока? |
MOV |
#FWKEY,&FCTL1 |
|
; Сбрасываем WRT,BLKWRT |
L4 BIT |
#BUSY,&FCTL3 |
|
; Проверяем BUSY |
JNZ |
L4 |
|
; Ждем готовности контроллера |
MOV |
#FWKEY+LOCK,&FCTL3 |
|
; Устанавливаем LOCK |
... |
|
|
; Повторно разрешаем WDT |
|
|
|
; при необходимости |
|
|
|
Запретить сторожевой |
|
|
|
таймер |
|
|
Да |
BUSY = 1 |
|
|
|
|
|
|
Настроить контроллер флэш памяти |
|
|
|
Установить BLKWRT = WRT = 1 |
|
|
|
Записать байт или слово |
|
|
|
Да |
WAIT = 0 |
|
|
|
|
|
|
Нет |
Граница |
|
|
|
|
|
|
|
блока? |
|
|
|
Установить BLKWRT = 0 |
Да
|
BUSY = 1 |
Нет |
Другой |
|
|
|
блок? |
Установить WRT = 0, LOCK = 1, разрешить сторожевой таймер
Рис. 7.11. Использование режима блочной записи.
7.3. Функционирование флэш#памяти 277
7.3.4.Обращение к флэшCпамяти во время записи или стирания
Вслучае инициации операции записи или стирания из ОЗУ центральный процессор не может ни читать из флэш памяти, ни писать в неё до тех пор, пока бит BUSY = 1. В противном случае произойдёт нарушение доступа с последую щей установкой флага ACCVIFG, а результат операции окажется непредсказуе мым. Аналогично, флаг ACCVIFG устанавливается в случае попытки записи в флэш память при сброшенном бите WRT. Содержимое флэш памяти при этом не изменяется.
Вслучае если операция записи слова/байта или операция стирания иниции рована из флэш памяти, ЦПУ при выборке очередной инструкции получает от контроллера флэш памяти значение 03FFFh. Это код команды JMP PC. В резуль тате ЦПУ зацикливается до окончания операции с флэш памятью. После завер шения операции и сброса бита BUSY контроллер флэш памяти возвращает ЦПУ корректное значение кода команды и выполнение программы возобновляется.
Условия доступа к флэш памяти при BUSY = 1 перечислены в Табл. 7.3.
Таблица 7.3. Доступ к флэш памяти при BUSY = 1
Операция |
Обращение |
WAIT |
|
Результат |
|
с флэш памятью |
к флэш памяти |
|
|||
|
|
|
|||
|
|
|
|
|
|
Стирание или |
Чтение |
0 |
ACCVIFG = 0. |
Считывается значение 03FFFh. |
|
запись байта/слова |
|
|
|
|
|
Запись |
0 |
ACCVIFG = 1. |
Команда записи игнорируется. |
||
|
|||||
|
|
|
|
|
|
|
Выборка команды |
0 |
ACCVIFG = 0. |
ЦПУ считывает код 03FFFh, соот |
|
|
|
|
ветствующий команде JMP PC. |
||
|
|
|
|
||
Блочная запись |
Любое |
0 |
ACCVIFG = 1, LOCK = 1 |
||
|
|
|
|
||
|
Чтение |
1 |
ACCVIFG = 0, считывается значение 03FFFh |
||
|
|
|
|
||
|
Запись |
1 |
ACCVIFG = 0, команда записи игнорируется |
||
|
|
|
|
||
|
Выборка команды |
1 |
ACCVIFG = 1, LOCK = 1 |
||
|
|
|
|
|
Прерывания автоматически запрещаются на время манипуляций с флэш па мятью, если биты EEI = 0 и EEIEX = 0, а также в моделях MSP430x20xx, в кото рых эти биты отсутствуют. После завершения операции с флэш памятью преры вания автоматически разрешаются. При возникновении во время работы с флэш памятью какого либо прерывания будет установлен соответствующий флаг, а после повторного разрешения прерываний будет сгенерирован запрос преры вания.
Если биты EEIEX = 1 и GIE = 1, то при возникновении прерывания любая операция с флэш памятью будет немедленно прервана с последующей установ кой флага FAIL. При EEI = 1, GIE = 1 и EEIEX = 0 операция стирания сегмента будет прерываться каждые 32 такта fFTG для обработки отложенных прерываний. После обслуживания прерывания стирание сегмента продолжается в течение сле дующих 32 тактов или до завершения операции. Во время обслуживания преры вания бит BUSY остаётся в установленном состоянии, однако ЦПУ может обра щаться к флэш памяти, не вызывая нарушения доступа. Вложенные прерывания и использование команды RETI внутри процедур обработки прерывания не под держиваются.
278 Глава 7. Контроллер флэш#памяти
Сторожевой таймер (при использовании его в сторожевом режиме) должен быть запрещён перед запуском цикла стирания флэш памяти. В случае сброса процесс стирания окажется прерванным, и результат операции будет непредска зуемым. После завершения цикла стирания работа сторожевого таймера может быть разрешена.
7.3.5. Останов циклов записи или стирания
Любая операция записи или стирания может быть досрочно прекращена уста новкой бита EMEX. Установка бита EMEX немедленно прерывает выполнение те кущей операции и останавливает контроллер флэш памяти. Любые действия с флэш памятью прекращаются, она возвращается в режим чтения, а все биты регис тра FCTL1 сбрасываются. Результат прерванной операции будет неопределённым.
7.3.6. Режим чтения при граничных условиях
Режим чтения при граничных условиях может использоваться для проверки целостности содержимого флэш памяти. Такая возможность реализована в отдельных моделях семейства MSP430x2xx; чтобы узнать о наличии этой функ ции в конкретном микроконтроллере обратитесь к документации. В режиме чте ния при граничных условиях можно обнаружить «слабо» запрограммированные биты флэш памяти. Такие биты могут появиться в результате неправильной уста новки частоты fFTG или же в результате снижения напряжения питания VСС ниже минимально допустимого значения при выполнении операций стирания/про граммирования. Один из методов обнаружения таких ячеек памяти заключается в периодическом вычислении контрольной суммы некоторого фрагмента флэш памяти (к примеру, сегмента) и повторении этой операции с использованием ре жима чтения при граничных условиях. Различие между полученными значения ми может служить признаком того, что в проверяемом фрагменте флэш памяти имеются «слабо» запрограммированные биты. Такой сегмент флэш памяти мож но восстановить. Для этого следует, выключив режим чтения при граничных ус ловиях, скопировать содержимое сегмента в ОЗУ, затем стереть указанный сег мент и повторно записать в него данные из ОЗУ.
Процедура, выполняющая проверку целостности содержимого флэш памяти, должна выполняться из ОЗУ. При выполнении кода из флэш памяти режим чте ния при граничных условиях автоматически выключается. Конкретные режимы чтения при граничных условиях задаются битами MRG0 и MRG1 регистра FCTL4. При установленном бите MRG1 выполняется обнаружение неустойчиво запрограммированных ячеек флэш памяти, содержащих 1 (стёртые биты). При установленном бите MRG0 выполняется обнаружение неустойчиво запрограм мированных ячеек флэш памяти, содержащих 0 (запрограммированные биты). Одновременно может быть установлен только один из этих битов. Соответствен но, полная проверка целостности содержимого флэш памяти потребует двух про ходов. При включенном режиме чтения при граничных условиях частота обраще ний к флэш памяти (MCLK) должна быть ограничена значением 1 МГц (см. до кументацию на конкретный микроконтроллер).
7.3. Функционирование флэш#памяти 279
7.3.7.Конфигурирование контроллера флэшCпамяти и организация доступа к нему
Регистры FCTLx — это защищённые паролем 16 битные регистры, доступные для чтения и записи. Любые обращения к этим регистрам должны производиться с использованием команд, оперирующих 2 байтными операндами, причём при операциях записи в старшем байте записываемого значения должно содержаться число 0A5h. Запись в любой из регистров FCTLx значения, старший байт которо го не равен 0A5h, вызовет нарушение ключа защиты с последующей установкой флага KEYV и формированием сигнала сброса системы PUC. При чтении любого из регистров FCTLx в старшем байте возвращается значение 096h.
Запись в регистр FCTL1 во время операции стирания или записи байта/слова вызывает нарушение доступа к памяти и установку флага ACCVIFG. В режиме блочной записи запись в регистр FCTL1 допускается, но только при WAIT = 1. Запись в регистр FCTL1 в режиме блочной записи при WAIT = 0 вызывает нару шение доступа к памяти и установку флага ACCVIFG.
Попытка записи в регистр FCTL2 при BUSY = 1 вызывает нарушение доступа к флэш памяти.
Чтение регистров FCTLx при BUSY = 1 разрешается. Операция чтения регис тров контроллера флэш памяти не вызовет нарушения доступа.
7.3.8. Прерывания контроллера флэшCпамяти
Контроллер флэш памяти содержит два источника прерываний — KEYV и ACCVIFG. Флаг ACCVIFG устанавливается при нарушении доступа к флэш па мяти. Если бит ACCVIE повторно устанавливается после операции записи или стирания флэш памяти, то установленный флаг ACCVIFG вызовет генерацию запроса прерывания. Флаг ACCVIFG является одним из источников вектора не маскируемого прерывания, поэтому для генерации запроса прерывания по флагу ACCVIFG устанавливать бит GIE не требуется. Кроме того, этот флаг можно про верять программно, чтобы отслеживать возникновение ситуации нарушения до ступа. Сброс флага ACCVIFG должен осуществляться программно.
Флаг нарушения ключа защиты KEYV устанавливается при попытке записи в любой из регистров контроллера флэш памяти с использованием некорректного ключа. При этом генерируется сигнал PUC, немедленно сбрасывающий микро контроллер.
7.3.9. Программирование флэшCпамяти
Существует три способа программирования микроконтроллеров семейства MSP430. Все эти способы позволяют программировать устройство в составе сис темы:
программирование по интерфейсу JTAG;
программирование с использованием встроенного загрузчика;
программирование с использованием заказных решений.