Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MSP430_Final

.pdf
Скачиваний:
41
Добавлен:
31.05.2015
Размер:
2.03 Mб
Скачать

7.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, а результат записи окажется неопределённым.

7.3. Функционирование флэш#памяти 273

В режиме записи байта/слова формируемое внутренним генератором напря жение подаётся на весь 64 байтный блок в течение 27 тактов fFTG из 30 при каж дой операции записи. Длительности этих интервалов, во время которых при каж дой операции записи на блок памяти подаётся напряжение программирования, суммируются. Для любого блока это суммарное время не должно превысить зна чения tCPT, указанного в спецификации на конкретный микроконтроллер. Если же общее время записи достигает указанного значения, то перед выполнением последующих операций записи по любым адресам в пределах этого блока его не обходимо стереть.

Запуск процедуры записи байта/слова из программы, расположенной в флэшCпамяти

Последовательность операций, требуемая для запуска процедуры записи бай та/слова из программы, находящейся в флэш памяти, приведёна на Рис. 7.8.

Запретить сторожевой таймер

Настроить контроллер флэш памяти и установить WRT = 1

Записать байт или слово

Установить WRT = 0, LOCK = 1, разрешить сторожевой таймер

Рис. 7.8. Запись байта/слова, инициируемая из флэш памяти.

;Запись байта/слова из флэш$памяти. 514 кГц < SMCLK < 952 кГц

;Предполагается, что блок 0FF1Eh уже стёрт

;Предполагается, что ACCVIE = NMIIE = OFIE = 0.

MOV #WDTPW+WDTHOLD,&WDTCTL

; Запрещаем WDT

MOV #FWKEY+FSSEL1+FN0,&FCTL2

; SMCLK/2

MOV #FWKEY,&FCTL3

; Сбрасываем LOCK

MOV #FWKEY+WRT,&FCTL1

; Разрешаем запись

MOV #0123h,&0FF1Eh

; 0123h –> 0FF1Eh

MOV #FWKEY,&FCTL1

; Готово. Сбрасываем WRT

MOV #FWKEY+LOCK,&FCTL3

; Устанавливаем LOCK

...

; Повторно разрешаем WDT?

Запуск процедуры записи байта/слова из программы, расположенной в ОЗУ

Последовательность операций, треьуемая для запуска процедуры записи бай та/слова из программы, находящейся в ОЗУ, приведёна на Рис. 7.9.

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;

программирование с использованием встроенного загрузчика;

программирование с использованием заказных решений.

280 Глава 7. Контроллер флэш#памяти

Программирование флэшCпамяти по интерфейсу JTAG

Микроконтроллеры семейства MSP430 допускают программирование через порт JTAG. Для интерфейса JTAG требуется четыре (в 20 и 28 выводных уст ройствах — пять) сигнальных линий, линия земли и, опционально, линия напря жения питания VCC и линия сброса RST/NMI.

Порт JTAG защищён плавкой перемычкой, при перегорании которой он пол ностью отключается. Перегорание перемычки необратимо — последующий доступ к устройству по интерфейсу JTAG будет невозможен. Для получения более подроб ной информации обратитесь к руководству по применению «Programming a Flash Based MSP430 Using the JTAG Interface», находящемуся на сайте www.msp430.com.

Программирование флэшCпамяти с использованием загрузчика (BSL)

В большинстве флэш микроконтроллеров семейства MSP430 имеется встро енный начальный загрузчик (BootStrap Loader — BSL). Для получения более под робной информации о реализации загрузчика обратитесь к документации на кон кретный микроконтроллер. Загрузчик позволяет осуществлять чтение/запись флэш памяти или ОЗУ микроконтроллера, используя последовательный интер фейс UART. Доступ к флэш памяти посредством загрузчика защищён 256 байт ным паролем, определяемым пользователем. Более подробно использование за грузчика описано в руководстве по применению «Features of the MSP430 Bootstrap Loader», находящемуся на сайте www.ti.com/msp430.

Программирование флэшCпамяти с использованием заказных решений

Способность ЦПУ MSP430 осуществлять запись в собственную флэш память позволяет создавать специализированные средства для программирования мик роконтроллеров как в автономном режиме, так и в составе системы (Рис. 7.12). Пользователь может использовать любой доступный интерфейс (UART, SPI и т.д.) для передачи данных в устройство. Пользовательская программа может при нимать эти данные и осуществлять программирование флэш памяти. Поскольку подобные средства разрабатываются самим пользователем, они могут наиболее полно удовлетворять требованиям конкретных приложений в части программи рования, стирания и обновления флэш памяти.

 

 

 

Флэш память

 

 

Команды, данные и пр.

Головное

 

UART,

ЦПУ выполняет

MSP430

Px.x,

устройство

программу

SPI,

(хост)

 

пользователя

 

и т.п.

 

 

 

 

 

 

Чтение/запись флэш памяти

Рис. 7.12. Средство для программирования, разработанное пользователем.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]