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

Семейство микроконтроллеров MSP430X1XX, руководство пользователя (2004)

.pdf
Скачиваний:
322
Добавлен:
12.08.2013
Размер:
3.31 Mб
Скачать

Раздел V.

Контроллер флэш-памяти

Инициирование записи байта/слова программой из ОЗУ

Программный поток, инициирующий запись байта/слова из ОЗУ показан на рис. 5.9.

Запрещение всех прерываний и выключение сторожевого таймера

да

BUSY = 1

Установка контроллера флэш и установка WRT = 1

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

да

BUSY = 1

Установка WRT = 0, LOCK = 1 разрешение прерывание и включение сторожевого таймера

Рис. 5-9. Инициирование записи байта/слова из ОЗУ

;Запись байта/слова из ОЗУ. 514 кГц < SMCLK < 952 кГц ;Принимается, что 0FF1Eh уже стерто

;Принимается ACCVIE = NMIIE = OFIE = 0.

MOV #WDTPW+WDTHOLD,&WDTCTL ;Отключение сторожевого ;таймера

DINT

;Запрещение прерываний

L1 BIT #BUSY,&FCTL3

;Проверка BUSY

JNZ L1

MOV #FWKEY+FSSEL1+FN0,&FCTL2 ;SMCLK/2

MOV #FWKEY,&FCTL3

;Очистка LOCK

Библиотека Компэла

 

 

 

 

 

121

 

 

 

MSP430x1xxFamily

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

...

;Повторный запуск

 

;сторожевого таймера?

EINT

;Разрешение прерываний

Запись блока

Блочную запись можно использовать для ускорения процесса записи во флэш-память большой последовательности байт или слов. Блок – это 64 байта, начиная с 0xx00h, 0xx40h, 0xx80h или 0xxС0h и заканчивая 0xx3Fh, 0xx7Fh, 0xxBFh или 0xxFFh, как показано на рис. 5.10. Напряжение программирования флэш-памяти остается поданным в течение записи блока из 64-байт.

 

 

 

 

xxFFh

Блок

 

 

 

 

xxC0h

 

 

 

 

 

xxFFh

 

 

 

xxBFh

Блок

 

 

 

 

 

 

 

xx80h

 

 

Флеш•память

 

 

 

 

 

xx7Fh

Блок

 

 

 

 

xx00h

 

 

 

 

 

 

 

xx40h

 

 

 

 

 

 

 

 

xx3Fh

Блок

 

 

 

 

xx00h

 

 

 

 

 

Рис. 5-10. Блоки флэш-памяти

Блочная запись не может быть инициирована из флэш-памяти. Блочная запись должна инициироваться только из ОЗУ или ПЗУ. Бит BUSY остается установленным в течение всего цикла записи блока. Бит WAIT должен проверяться между записью каждого байта или слова в блоке. Очередной байт или слово блока могут быть записаны, когда бит WAIT установлен. При записи последовательности блоков бит BLKWRT необходимо очищать после завершения записи текущего блока. Бит BLKWRT может быть установлен для инициирования записи следующего блока после выдержки заданного времени восстановления флэш t(end). Бит BUSY очищается после завершения записи каждого блока, информируя о возможности записи следующего блока. На рис. 5.11 показана временная диаграмма процедуры блочной записи.

122

 

Библиотека Компэла

 

Раздел V.

Контроллер флэш-памяти

Бит BLKWRT

Запись в флэш, например MOV #123h, &Flash

 

 

 

 

 

 

 

 

 

 

 

 

Генерация

Выполнение операции

 

 

 

 

Снятие

программирования

 

напряжения

 

напряжения

 

 

программирования

 

программирования

 

 

 

 

 

 

Общее время программирования t(CPT) =< 3 мс, потребление тока VCC повышено

BUSY

t(запись блока, байт 0) = 30/f(FGT) t(байты 1•63) = 20/f(FGT) t(байты 1•63) = 20/f(FGT) t(окончание) = 6/f(FGT)

WAIT

Рис. 5-11. Временная диаграмма цикла блочной записи

Программный поток записи блока и пример

Программный поток записи блока показан на рис. 5.12, а ниже приводится соответствующий пример.

;Запись одного блока, начиная с адреса 0F000h.

;Запись должна выполняться из ОЗУ; предполагается, что флэш-память уже стерта.

;514 кГц < SMCLK < 952 кГц

;Принимается ACCVIE = NMIIE = OFIE = 0.

 

MOV #32,R5

;Используется как

 

 

 

;счетчик записи

 

MOV #0F000h,R6

;Указатель записи

 

MOV #WDTPW+WDTHOLD,&WDTCTL ;Отключение

 

 

 

;сторожевого таймера

 

DINT

;Запрещение прерываний

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

Библиотека Компэла

 

 

 

 

 

123

 

 

MSP430x1xxFamily

Запрещение всех прерываний

и отключение сторожевого таймера

да

BUSY = 1

Установка контроллера флэш

Установка BLKWRT = WRT = 1

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

да

WAIT=0?

нет

Граница блока?

Установка BLKWRT = 0

да BUSY = 1

да Другой блок?

Установка WRT = 0, LOCK = 1 разрешение прерываний

и включение сторожевого таймера

Рис. 5-12. Программный поток блочной записи

124

 

Библиотека Компэла

 

Раздел V.

Контроллер флэш-памяти

JZ L3

;Ожидание в цикле,

 

;пока WAIT=0

INCD R6

;Указание на следующее слово

DEC R5

;Декремент счетчика записи

JNZ L2

;Конец блока?

MOV #FWKEY,&FCTL1

;Очистка WRT,BLKWRT

L4 BIT #BUSY,&FCTL3

;Проверка BUSY

JNZ L4

;Ожидание в цикле,

 

;пока занято

MOV #FWKEY+LOCK,&FCTL3 ;Установка LOCK

...

;Повторный запуск

 

;сторожевого таймера,

 

;если необходимо

EINT

;Разрешение прерываний

5.3.4. Доступ к флэш-памяти во время записи или стирания

Когда выполняется любая операция записи или стирания, инициированная из ОЗУ и BUSY=1, ЦПУ не может выполнять чтение или запись любой ячейки флэш-памяти. В противном случае произойдет нарушение прав доступа, будет установлен флаг ACCVIFG и результат окажется непредсказуемым. Также, если запись во флэш-память предпринята с WRT=0, устанавливается флаг прерывания ACCVIFG, а содержимое флэш-памяти не изменяется.

Когда инициируется запись байта/слова или любая операция стирания программой из флэш-памяти, контроллер флэш возвращает ЦПУ код операции 03FFFh при выборке следующей команды. Код операции 03FFFh – это команда JMP PC. Это приведет к зацикливанию ЦПУ, пока работа с флэш не будет закончена. Когда операция с флэш-памятью закончена и BUSY=0, контроллер флэш позволяет ЦПУ выполнить выборку правильного кода операции и выполнение программы возобновляется.

Условия доступа к флэш-памяти, когда BUSY=1 приведены в таблице 5.3.

Таблица 5-3. Доступ к флэш-памяти при BUSY=1

Операция

Доступ

WAIT

Результат

с флэш-памятью

к флэш-памяти

 

 

 

 

Чтение

0

ACCVIFG = 1, читается значение 03FFFh

Любой режим стирания

Запись

0

ACCVIFG = 1. Запись игнорируется

или запись байта/

 

 

 

 

 

 

ACCVIFG = 0. CPU считывает код 03FFFh.

слова

Выборка команды

0

 

Это команда JMP PC.

 

 

 

 

 

 

 

 

Библиотека Компэла

 

 

 

 

 

 

 

125

 

 

 

 

 

 

MSP430x1xxFamily

 

 

 

 

Операция

Доступ

WAIT

Результат

с флэш-памятью

к флэш-памяти

 

 

 

 

 

 

 

Любой

0

ACCVIFG = 1, LOCK = 1

 

 

 

 

Запись блока

Чтение

1

ACCVIFG = 0, читается значение 03FFFh

 

 

 

Запись

1

ACCVIFG = 0. Запись игнорируется

 

 

 

 

 

 

Выборка команды

1

ACCVIFG = 1, LOCK = 1

 

 

 

 

Все источники прерываний необходимо заблокировать перед инициализацией любой операции с флэш-памятью. Если бы разрешенное прерывание произошло во время операции с флэш-памятью, ЦПУ сделало бы выборку кода 03FFFh в качестве адреса процедуры обработки прерывания. ЦПУ выполнило бы команду JMP PC при BUSY=1. После завершения операции с флэш-памя- тью, ЦПУ начало бы выполнение кода с адреса 03FFFh, который не является правильным адресом процедуры обработки прерывания.

5.3.5. Останов цикла записи или стирания

Любая операция записи или стирания может быть остановлена до момента нормального завершения путем установки бита аварийного выхода EMEX. Установка бита EMEX немедленно останавливает активную операцию и контроллер флэш-памяти. Все операции с флэш-памятью прекращаются, она возвращается в режим чтения, а все биты в регистре FCTL1 сбрасываются. Результат предполагавшейся операции с флэш-памятью будет непредсказуем.

5.3.6. Конфигурирование и доступ к контроллеру флэш-памяти

FCTLx – это 16-разрядные регистры записи/чтения, защищенные паролем. Любая операция чтения или записи доступна только при использовании коман- ды-слова, а запись возможна только при наличии в старшем байте пароля записи 0A5h. Любая запись в любой FCTLx регистр с любым значением в старшем байте, отличном от 0A5h вызовет нарушение ключа защиты, установку флага KEYV и запуск системного сброса PUC. При любом чтении любого регистра FCTLx результат содержит в старшем байте значение 096h.

Любая запись в FCTL1 во время стирания или операции записи байта/слова приведет к нарушению прав доступа и установке флага ACCVIFG. Запись в FCTL1 возможна в режиме блочной записи, когда WAIT=1, однако запись в FCTL1 в режиме блочной записи, когда WAIT=0 приведет к нарушению прав доступа и установке флага ACCVIFG.

Любая запись в FCTL2, когда BUSY=1 приведет к нарушению прав доступа. Любой FCTLx регистр может быть прочитан, когда BUSY=1. Чтение не при-

ведет к нарушению прав доступа.

126

 

Библиотека Компэла

 

Раздел V.

Контроллер флэш-памяти

5.3.7. Прерывания контроллера флэш-памяти

Контроллер флэш имеет два источника прерывания: KEYV и ACCVIFG. Флаг ACCVIFG устанавливается, когда происходит нарушение прав доступа. Когда бит ACCVIE устанавливается вновь после записи или стирания флэш-памя- ти, установленный флаг ACCVIFG будет генерировать запрос прерывания. Флаг ACCVIFG – источник вектора немаскируемого прерывания NMI, поэтому нет необходимости устанавливать GIE для запроса прерывания по флагу ACCVIFG. Помимо этого, ACCVIFG можно проверить программно, чтобы определить, было ли нарушение прав доступа. Флаг ACCVIFG должен сбрасываться программно.

Флаг нарушения ключа KEYV устанавливается, когда выполняется запись в любой управляющий регистр контроллера флэш с неправильным паролем. Когда это происходит, генерируется сигнал PUC, немедленно сбрасывая устройство.

5.3.8. Программирование устройств с флэш-памятью

Имеется три способа программирования флэш-устройств MSP430. Все способы поддерживают внутрисистемное программирование (ISP):

Программирование через JTAG1

Программирование через самозагрузчик

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

Программирование флэш-памяти через JTAG

Устройства MSP430 могут программироваться через JTAG-порт. Для JTAGинтерфейса нужны четыре сигнальных линии (5 сигнальных линий у 20 и 28выводных устройств), общий провод и опционально VCC и nonRST/NMI.

JTAG-порт защищен с помощью предохранителей. Перегорание предохранителей явление необратимое – в результате срабатывания предохранителя JTAG-порт отключается. Последующий доступ к устройству через JTAG-порт становится невозможен. Подробности см. в приложении «Programming a FlashBased MSP430 Using the JTAG Interface2» на сайте www.ti.com/sc/msp430.

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

Каждое MSP430 устройство с флэш-памятью содержит самозагрузчик BSL. Он позволяет пользователю читать или программировать флэш-память или ОЗУ с помощью последовательного интерфейса UART3. Доступ к флэшпамяти MSP430 через BSL защищен 256-разрядным паролем, определяе-

1JTAG (Joint Test Automation Group) interface – интерфейс «объединенной рабочей группы по автоматизации тестирования»

2

«Программирование MSP430 с флэш-памятью через JTAG-интерфейс»

 

3

UART (Universal Asynchronous Receiver / Transmitter) - универсальный асинхронный приемопередатчик

Библиотека Компэла

 

 

 

127

 

 

 

 

MSP430x1xxFamily

 

 

 

Флэш•память

 

 

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

Головное

 

UART,

ЦПУ

 

Px.x,

выполняет

устройство

MSP430

SPI,

программу

(хост)

 

 

и пр.

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

 

 

 

 

 

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

Рис. 5-13. Решение по программированию, разработанное пользователем

мым пользователем. Подробности см. в приложении «Features of the MSP430 Bootstrap Loader1» на сайте www.ti.com/sc/msp430.

Программирование флэш-памяти через пользовательское решение

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

5.4. Регистры флэш-памяти

Перечень регистров флэш-памяти приведен в таблице 5.4.

Таблица 5-4. Регистры флэш-памяти

 

Регистр

Краткое

Тип регистра

Адрес

Исходное

 

обозначение

состояние

 

 

 

 

 

 

 

 

 

 

 

 

 

Регистр 1 управления

FCTL1

Чтение/запись

0128h

09600h с PUC

флэш-памятью

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 «Возможности самозагрузчика MSP430»

 

 

 

 

 

 

 

 

 

 

Библиотека Компэла

128

 

 

 

 

 

 

 

 

 

 

Раздел V. Контроллер флэш-памяти

Таблица 5-4. (Окончание)

 

Регистр

Краткое

Тип регистра

Адрес

Исходное

 

обозначение

состояние

 

 

 

 

 

 

 

 

 

 

Регистр 2

управления

FCTL2

Чтение/запись

012Ah

09642h с PUC

флэш-памятью

 

 

 

 

 

 

 

 

 

 

Регистр 3

управления

FCTL3

Чтение/запись

012Ch

09618h с PUC

флэш-памятью

 

 

 

 

 

 

 

 

 

 

Регистр 1

разрешения

IE1

Чтение/запись

000h

Сброс с PUC

прерывания

 

 

 

 

 

 

 

 

 

 

FCTL1, регистр управления флэш-памятью

15

14

13

12

11

10

9

8

 

 

 

 

 

 

 

 

 

 

 

FRKEY, читается как 096h

 

 

 

 

 

 

FWKEY, должен записываться как 0A5h

 

 

 

 

 

 

 

 

 

 

 

7

 

6

 

5

4

3

 

2

 

1

0

 

BLKWRT

 

WRT

 

 

Зарезервировано

Зарезервировано

Зарезервировано

 

MERAS

 

ERASE

Зарезервировано

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

rw–0

rw–0

 

 

r0

 

r0

r0

rw–0

rw–0

 

r0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Биты

Пароль FCTLx. Всегда читается как 096h. Должен записываться

 

FRKEY/FWKEY

 

 

 

как 0A5h, в противном случае будет генерироваться сигнал

 

 

 

15-8

 

 

 

 

 

PUC.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Режим блочной записи. Для режима блочной записи также

 

 

 

 

 

 

 

 

должен быть установлен WRT. Бит BLKWRT автоматически

 

BLKWRT

 

 

Бит 7

сбрасывается при установке EMEX.

 

 

 

 

 

 

 

 

 

 

 

0 – Режим блочной записи выключен

 

 

 

 

 

 

 

 

 

 

 

1 – Режим блочной записи включен

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Запись. Этот бит используется для выбора любого режима

 

 

 

 

 

 

 

 

записи. Бит WRT автоматически сбрасывается при установке

 

WRT

 

 

Бит 6

EMEX.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 – Режим записи выключен

 

 

 

 

 

 

 

 

 

 

 

 

 

1 – Режим записи включен

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Зарезервировано

 

 

Биты

Зарезервировано. Всегда читается как 0.

 

 

 

 

 

5-3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MERAS

 

 

Бит 2

Массовое стирание и обычное стирание. Эти биты использу-

 

 

 

 

 

 

 

 

ются совместно для выбора режима стирания. Биты MERAS и

 

ERASE

 

 

Бит 1

ERASE автоматически сбрасываются, когда устанавливается

 

 

 

 

 

 

 

 

EMEX.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Зарезервировано

 

Бит 0

 

Зарезервировано. Всегда читается как 0.

Библиотека Компэла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

129

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MSP430x1xxFamily

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MERAS

 

ERASE

 

 

 

 

 

Цикл стирания

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

0

 

 

Нет стирания

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

1

 

 

Стирание только конкретного сегмента

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

0

 

 

Стирание всех сегментов основной памяти

 

 

 

 

 

 

 

 

 

 

 

1

 

 

1

 

 

Стирание всех сегментов основной и информационной памяти

 

 

 

 

 

 

 

 

 

 

FCTL2, регистр управления флэш-памятью

 

 

 

 

 

 

 

15

 

 

14

 

 

13

 

12

 

11

 

10

 

 

9

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FWKEYx, читается как 096h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

должен записываться как 0A5h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

6

 

 

5

 

4

 

3

 

2

 

 

1

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FSSELx

 

 

 

 

 

 

 

 

FNx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

rw–0

rw–1

rw–0

 

rw–0

rw–0

rw–0

rw–1

rw–0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пароль FCTLx. Всегда читается как 096h. Должен записываться

 

FWKEY

 

Биты 15-8

как 0A5h, в противном случае будет генерироваться сигнал

 

 

 

 

 

 

 

 

 

PUC.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выбор источника тактирования контроллера флэш

 

 

 

 

 

 

 

 

 

 

 

00 – ACLK

 

 

 

 

 

 

 

 

 

 

FSSELx

 

Биты 7-6

01 – MCLK

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10 – SMCLK

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11 – SMCLK

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Делитель тактовой частоты для контроллера флэш. Эти шесть

 

 

 

 

 

 

 

 

 

битов позволяют установить необходимый коэффициент

 

FNx

 

Биты 5-0

деления для тактирования контроллера флэш. Значение ко-

 

 

эффициента деления равно FNx+1. К примеру, когда FNx=00h,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

коэффициент деления равен 1. Когда FNx=02Fh, коэффициент

 

 

 

 

 

 

 

 

 

деления равен 64.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FCTL3, регистр управления флэш-памятью

 

 

 

 

 

 

 

15

 

 

14

 

 

13

 

12

 

11

 

10

 

 

9

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FWKEYx, читается как 096h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

должен записываться как 0A5h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

6

 

 

5

 

4

 

3

 

2

 

 

1

 

0

 

 

Зарезервировано

Зарезервировано

 

EMEX

 

LOCK

 

WAIT

 

ACCVIFG

 

KEYV

 

BUSY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r0

r0

rw–0

 

rw–1

r –1

rw–0

rw–(0)

r(w)–0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Библиотека Компэла

 

130

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Соседние файлы в предмете Микроконтроллеры ЭВМ