Отличительные особенности программатора на основе загрузочного сектора MSP430
Аннотация
Программатор на основе загрузочного сектора MSP430 (BSL) позволяет пользователю обращаться к внутренней памяти микроконтроллера MSP430 в процессе макетирования, производства или обслуживания. Для модификации доступны как программная (флеш) память, так и память данных (ОЗУ).
Для связи используется общеизвестный протокол УАПП (UART) с интерфейсом RS232, обеспечивающий гибкое использование как программного, так и аппаратного обеспечения.
Для использования программатора на основе загрузочного сектора следует подать специальную последовательность сигналов BSL на определённые выводы процессора. После этого подаётся определённая последовательность команд в соответствии с требуемым режимом. Режим загрузки может быть прерван переходом по определённому пользователем адресу либо осуществлением аппаратного сброса (reset).
Обращение к данным в памяти MSP430 через программатор на основе загрузочного сектора защищёно от несанкционированного доступа пользовательским паролем.
1 Введение
Программатор на основе загрузочного сектора (BSL) представляет возможность программирования флеш-памяти микроконтроллера MSP430 в процессе разработки либо для обновлений. Активизация такого режима может быть осуществлена утилитой, передающей команды по широкоизвестному протоколу УАПП (UART). BSL даёт возможность пользователю контролировать функционирование MSP430 и осуществлять обмен данными с персональным компьютером либо другим устройством, поддерживающим протокол UART.
Для защиты программы BSL от случайного стирания она содержится в специальном, масочно запрограммированном на заводе загрузочном секторе ПЗУ. Программа BSL не может быть стёрта никакими методами. Код загрузчика тщательно оптимизирован под нужды BSL, доступ к нему осуществляется с помощью команд, описанных ниже в данном документе. В целях безопасности было обращено большое внимание на защиту пользовательского кода от несанкционированного считывания. Любая команда BSL, позволяющая непосредственное или опосредованное чтение данных защищена паролем.
Для активизации программатора на основе загрузочного сектора следует подать специальную последовательность сигналов BSL на определённые выводы процессора. После этого, передаётся символ синхронизации, сопровождаемый посылкой данных, определяющих выполнение желаемой операции.
2 Стандартная функция сброса (RESET) и активизация BSL
2.1 Микроконтроллеры с флеш-памятью MSP430 в 20- и 28-выводном корпусе с выводами JTAG, объединёнными с портами общего назначения
Формирование определённой последовательности сигналов на выводах -RST/NMI и TEST переводит MSP430 в режим выполнения программы с адреса сброса BSL, в отличие от обычного вектора сброса, расположенного по адресу FFFEh.
Если в приборе используется связь с ПК через УАПП (UART), эти 2 вывода могут управляться по линиям –DTR и -RTS последовательного порта (RS232) после соответствующего преобразования уровней. Детальное описание аппаратного обеспечения и сопутствующих вопросов дано в отдельном документе (см. Ссылки, раздел 14). Обычный вектор сброса по адресу FFFEh используется в том случае, когда вывод TEST находится в состоянии лог. «0» в то время, когда вывод RST/NMI переводится из лог. «0» в лог. «1» (стандартный метод, см. Рис 1).
Выполнение программы BSL начинается с того момента, как на вход TEST будет подано как минимум 2 положительных импульса и только в том случае, если вход TEST находился в состоянии лог. «1» во время фронта 0?1 на входе -RST/NMI (метод активизации BSL, см. Рис 2). Такая схема активизации повышает надёжность запуска BSL.
Рис. 1. Стандартная последовательность сигналов сброса (RESET)
Вход TEST обычно используется только для переключения выводов порта P1.7 – P1.4 между их обычными функциями и функциями интерфейса JTAG. Если по входу TEST принят второй положительный импульс во время того, как вход -RST/NMI находится в состоянии лог. «0», сигнал на входе TEST переводится в лог. «0» внутренней схемой (прикладной режим).
Режим BSL не будет активизирован (с адреса вектора сброса BSL RESET) в том случае, если:
- Присутствует менее 2-х фронтов 0 ? 1 на входе TEST во время лог. «0» на входе -RST/NMI
- Вход TEST находится в состоянии лог. «0» во время перехода 0 ? 1 на входе -RST/NMI
- Ресурсы MSP430 уже контролируются через интерфейс JTAG
- Напряжение питания VCC «просело» ниже допустимого уровня, что вызвало сброс по включению (POR)
- Вход -RST/NMI сконфигурирован как NMI (установлен бит NMI)
Рис.2 Процедура активизации BSL с использованием выводов JTAG, объединённых с портами общего назначения
2.2 Микроконтроллеры с флеш-памятью MSP430 с обособленными выводами JTAG
Устройства с обособленными выводами интерфейса JTAG используют вывод TCK вместо вывода TEST.
Выполнение программы BSL начинается после того, как на входе TCK появятся как минимум два отрицательных перепада 1 ? 0 и, кроме этого, вход TCK находится в состоянии лог. «0» во время перехода 0 ? 1 на входе -RST/NMI (процедура активизации BSL, см. рис. 3). Такая схема активизации повышает надёжность запуска BSL.
Рис.3 Процедура активизации BSL с использованием обособленных выводов JTAG
Режим BSL не будет активизирован (с адреса вектора сброса BSL RESET) в том случае, если:
- Присутствует менее 2-х фронтов 1 ? 0 на входе TCK во время лог. «0» на входе -RST/NMI
- Вход TCK находится в состоянии лог. «1» во время перехода 0 ? 1 на входе -RST/NMI
- Ресурсы MSP430 уже контролируются через интерфейс JTAG
- Напряжение питания VCC «просело» ниже допустимого уровня, что вызвало сброс по включению (POR)
- Вход -RST/NMI сконфигурирован как NMI (установлен бит NMI)
3 Протокол УАПП (UART)
Используемый в этом случае протокол УАПП имеет следующие параметры:
- Скорость обмена 9600 бод, режим полудуплекс (один передатчик в любой момент времени).
- Стартовый бит, 8 бит данных (первым передаётся МЗР), бит контроля по чётности (even), 1 стоп-бит.
- Успешный приём подтверждается передачей соответствующего символа (acknowledge).
Примечание: Использование скоростей обмена выше, чем 9600 бод может привести к сбоям в связи либо ошибкам записи флеш-памяти из-за несоблюдения временнЫх параметров. Флеш-память в результате этого может быть подвергнута недопустимым нагрузкам, а операции стирания/записи не будут надёжно выполняться.
4 Последовательность синхронизации
Перед передачей любой из команд, следует отослать в BSL символ синхронизации (SYNC), равный 80h. Этот символ необходим для вычисления требуемых внутренних параметров, определяющих временнЫе параметры УАПП и стирания/программирования флеш-памяти. Эта операция формирует опорное системное время BSL.
Далее, BSL отправляет символ подтверждения DATA_ACK = 90h, сообщающий об успешном приёме.
Примечание: Символ синхронизации не входит в последовательность данных Data Frame, описанную ниже.
5 Команды
Существуют два типа команд: требующие и не требующие пароля. Все команды, потенциально допускающие прямой или косвенный доступ к данным защищены паролем.
5.1 Незащищённые команды
- Принять пароль
- Полное стирание (стирает всю флеш-память, как основную, так и память данных)
- Считать версию BSL (команда поддерживается в BSL версии V1.60 или выше, либо в загружаемой версии BL_150S_14x.txt)
- Сменить скорость обмена (команда поддерживается в BSL версии V1.60 или выше, либо в загружаемой версии BL_150S_14x.txt)
5.2 Команды, защищённые паролем
- Принять блок данных для программирования флеш-памяти, ОЗУ либо периферийных модулей
- Передать блок данных
- Стереть сегмент
- Проверка стирания (команда поддерживается в BSL версии V1.60 или выше, либо в загружаемой версии BL_150S_14x.txt)
- Загрузить программный счётчик и запустить пользовательскую программу
6 Процесс программирования
Процесс записи (команда «Принять блок данных» (RX data block)) во флеш-память, ОЗУ или в периферийные модули выполняется в режиме реального времени. Это означает, что байт либо слово данных обрабатывается непосредственно сразу после их принятия, а процесс записи завершается до того, как полностью принят следующий байт/слово. Таким образом, общее время записи определяется скоростью обмена, никакие способы буферизации не применяются.
Блоки данных, расположенные вне адресной области флеш-памяти, считаются загружаемыми в ОЗУ или периферийные модули, поэтому биты данных контроля флеш-памяти игнорируются.
Примечание: при потере связи по УАПП в результате помех на линии либо нарушении временнЫх требований к передаче блоков данных, единственным способом восстановления обмена является повторная инициализация BSL.
7 Формат посылки
Формат посылки данных, используемый программатором, представляет собой стандартный последовательный протокол (SSP) фирмы TI для MSP430, дополненный предваряющей синхропоследовательностью (SS), как было описано выше. В таблице 1 BSL является приёмником.
Очевидная избыточность некоторых параметров является следствием адаптации под SSP а также служит для экономии объёма ПЗУ загрузчика.
Дополнительная информация по стандартному последовательному протоколу (SSP) содержится в документе «Применение программы начальной загрузки в микроконтроллеры MSP430 с флэш-памятью: программные и аппаратные предложения (версия B)», Application of Bootstrap Loader in MSP430 With Flash Hardware and Software Proposal (SLAA096).
7.1 Структура данных
- Первые 8 байт (от HDR до LH), которые являются обязательными (xx означает, что данные не являются значимыми).
- Необязательные байты данных от D1 до Dn.
- Два байта (CKL и CKH) контрольной суммы (являются необходимыми).
Подтверждение от BSL, необходимое для всех команд, кроме передачи блока данных и передачи версии BSL.
7.2 Контрольная сумма
16-битная (2 байта) контрольная сумма вычисляется по всем принятым/переданным байтам B1 … Bn в посылке за исключением собственно байт контрольной суммы путём выполнения операции XOR над операндами-словами (2 байта) и инверсией результата.
Формула:
CHECKSUM = INV [ (B1 + 256*B2) XOR (B3 + 256*B4) XOR … XOR (Bn–1 + 256*Bn) ]
или
CKL = INV [ B1 XOR B3 XOR … XOR Bn–1 ] ; CKH = INV [ B2 XOR B4 XOR … XOR Bn ]
Таблица 1. Формат посылки команд BSL
Принятая команда BSL |
H D R |
C M D |
L1 |
L2 |
AL |
AH |
LL |
LH |
D1 |
D2..Dn |
CKL |
CKH |
ACK |
Принять блок данных (RX data block) |
80 |
12 |
n |
n |
AL |
AH |
n-4 |
0 |
D1 |
D2..Dn-4 |
CKL |
CKH |
ACK |
Принять пароль (RX Password) |
80 |
10 |
24 |
24 |
xx |
xx |
xx |
xx |
D1 |
D2..D20 |
CKL |
CKH |
ACK |
Стереть сегмент (Erase segment) |
80 |
16 |
04 |
04 |
AL |
AH |
02/04 |
A5 |
- |
- |
CKL |
CKH |
ACK |
Полное стирание (Mass erase) |
80 |
18 |
04 |
04 |
xx |
xx |
xx |
xx |
- |
- |
CKL |
CKH |
ACK |
Проверка стирания (Erase check) |
80 |
1C |
04 |
04 |
AL |
AH |
LL |
LH |
- |
- |
CKL |
CKH |
ACK |
Сменить скорость обмена (Change baud rate) |
80 |
20 |
04 |
04 |
D1 |
D2 |
D3 |
xx |
- |
- |
CKL |
CKH |
ACK |
Передать блок данных (TX data block) |
80 |
14 |
04 |
04 |
AL |
AH |
n |
0 |
- |
- |
CKL |
CKH |
- |
Ответ BSL |
80 |
xx |
n |
n |
D1 |
D2.. |
… |
… |
… |
…Dn |
CKL |
CKH |
- |
Передать версию BSL (TX BSL version) |
80 |
1E |
04 |
04 |
xx |
xx |
xx |
xx |
- |
- |
CKL |
CKH |
- |
Ответ BSL |
80 |
xx |
10 |
10 |
D1 |
|
D2.. |
… |
… |
… |
…D10 |
CKL |
CKH |
Примечания: Все цифры в таблице – байты в шестнадцатеричном виде
ACK передаётся обратно от BSL.
Синхропоследовательность не входит в блок посылки.
Команды «Проверка стирания» и « Передать версию BSL» не входят в стандартный набор команд (V1.50 или выше).
Команда « Сменить скорость обмена» не входит в стандартный набор команд (V1.60 или выше либо загружаемый BL_150S_14x.txt).
Аббревиатуры:
HDR DATA_FRAME = 80h означает ожидается посылка данных в соответствии со стандартным последовательным протоколом (SSP) фирмы TI для MSP430.
CMD Идентификатор команды
L1, L2 Число байт в посылке от AL до Dn
Ограничения: L1 = L2, L1 < 255, L1 чётное.
AL, AH Адрес начала блока либо адрес (проверки) записи либо адрес перехода, младший/старший байты
LL, LH Число байт данных (макс. 250), либо информация о стирании, младший/старший байты, либо длина блока проверки стирания (макс. FFFFh)
D1 … Dn Байты данных
CKL, CKH 16-битная контрольная сумма, младший/старший байты
xx Данные могут быть любыми
-- Байты данных не принимаются и не передаются
ACK Символ подтверждения, возвращаемый BSL, может быть либо
DATA_ACK = 90h: Блок принят корректно, команда выполнена успешно, либо
DATA_NAK = A0h: Некорректный блок (например: ошибка контрольной суммы, L1 ? L2), неизвестная, недопустимая либо выполненная с ошибками команда.
n Число байт в посылке от AL до Dn
7.3 Команды – детальное описание
См. Таблицу 1.
7.3.1 Общие положения
Следующие за байтом преамбулы HDR (80h) и идентификатором команды CMD, байты длины посылки L1 и L2 (которые должны быть равны между собой) содержат число байт, следующих за L2, за исключением байт контрольной суммы CKL и CKH.
Байты AL, AH, LL, LH, D1…Dn зависят от типа команды. Несмотря на это, байты контрольной суммы CKL (младший) и CKH (старший) являются обязательными.
Если пакет данных принят корректно и выполнение команды завершено успешно, BSL возвращает символ подтверждения DATA_ACK = 90h. При некорректно принятых посылках, операциях, не завершённых успешно, запрещённых и неопределённых командах возвращается символ DATA_NAK = A0h.
Примечание: Версии BSL, ниже, чем V1.30 поддерживают только байтовые операции доступа. Из-за этого, периферийные модули с адресами 0100h–01FFh недоступны, т.к. ориентированы на по-словный доступ.
Начиная с версии V1.30 адреса 0000h–00FFh доступны побайтно; все остальные доступны по-словно.
7.3.2 Принять блок данных (RX Data Block)
Команда «Принять блок данных» используется для всех операций записи во флеш-память, ОЗУ либо регистры контроля периферийных модулей по адресам 0000h–01FFh. Команда защищена паролем.
16-битный чётный адрес начала блока задаётся байтами AL (младший) и AH (старший).
16-битная чётная длина блока определяется байтами LL (младший) и LH (старший). Ввиду того, что число собственно байт данных ограничено до 250, LH всегда равен 0.
Последующие байты данных завершаются байтами контрольной суммы CKL (младший) и CKH (старший). Если приём и программирование соответствующего блока данных были успешными, BSL передаёт символ подтверждения DATA_ACK. В противном случае BSL возвращает DATA_NAK.
Примечание: Версии BSL V1.40 и выше поддерживают верификацию в режиме реального времени внутри MSP430 для адресов 0200h–FFFFh, что на 50% снижает время программирования/верификации.
В случае ошибки загружаемая версия программатора на основе загрузочного сектора BL_150S_14x.txt дополнительно содержит адрес первой некорректно записанной ячейки +3 в буфере ОЗУ по адресу 0200h (либо 021Eh для МК семейства F14x).
7.3.3 Принять пароль (RX Password)
Команда «Принять пароль» используется для снятия защиты с команд, защищённых паролем, выполняющих чтение, запись либо посекторное стирание памяти. Данная команда паролем не защищена.
Стартовый адрес, равно как длина блока, для данной команды не требуются, т.к. 32-байтовый пароль всегда расположен по адресам FFE0h–FFFFh. Байты данных от D1 до D20h содержат пароль, начинающийся с D1 по адресу FFE0h.
Если приём и верификация пароля выполнены успешно, BSL возвращает подтверждение DATA_ACK, а команды, защищённые паролем, разблокируются. В противном случае, BSL возвращает DATA_NAK.
Однократная разблокировка защищённых команд сохраняет своё действие вплоть до следующей инициализации сессии BSL.
7.3.4 Полное стирание (Mass Erase)
Команда «Полное стирание» производит стирание всей области флеш-памяти (основная память плюс информационная память, см. соответствующую документацию). Команда не защищена паролем.
Все параметры, указанные в Таблице 1, являются обязательными. После стирания BSL возвращает символ подтверждения DATA_ACK.
Полное стирание инициализирует область пароля со значением 32 байта 0FFh.
7.3.5 Стереть сегмент (Erase Segment)
Команда «Стереть сегмент» производит стирание определённых сегментов флеш-памяти и является защищённой паролем.
Байты адреса AL (младший) и AH (старший) определяют соответствующий сегмент. Корректным является любой чётный адрес в пределах сегмента, предназначенного к стиранию. По завершении операции BSL (V1.40 или ниже) возвращает символ подтверждения DATA_ACK.
BSL версий V1.60 или выше выполняет автоматическую проверку стирания соответствующего сегмента и возвращает DATA_NAK, если стирание не было выполнено успешно. В этом случае, адрес +1 первого нестёртого сегмента хранится в буфере в ОЗУ по адресу 0200h (или 021Eh для семейства F14x).
Стирание сегмента 0 очищает область пароля, таким образом, пароль принимает значение 32 байта 0FFh.
Задание LL = 0x04 и LH = 0xA5 приводит к полному стиранию основной памяти.
Выполнение такой команды должно быть повторено как минимум 12 раз, чтобы обеспечить общее время стирания не менее 200 мс. Последующая автоматическая проверка стирания не производится, следует дополнительно использовать команду «Проверка стирания» (Erase check).
Разбивка памяти микроконтроллеров MSP430Fxxxx по сегментам выглядит следующим образом:
0FE00h – 0FFFFh : Сегмент 0 основной памяти
0FC00h – 0FDFFh : Сегмент 1
0FA00h – 0FBFFh : Сегмент 2
0F800h – 0F9FFh : Сегмент 3
…
…
01200h – 013FFh : Сегмент n-1
01100h – 011FFh : Сегмент n
01080h – 010FFh : Сегмент A информационной памяти
01000h – 0107Fh : Сегмент B информационной памяти
7.3.6 Проверка стирания (Erase Check)
Команда «Проверка стирания» проверяет стирание флеш-памяти в пределах заданного диапазона адресов. Команда защищена паролем.
16-битный стартовый адрес блока определяется байтами AL (младший) и AH (старший). 16-битная длина блока задаётся байтами LL (младший) и LH (старший). Оба могут быть как чётными, так и нечётными для обеспечения проверки границы чётности.
Если проверка стирания соответствующего блока выполнена успешно (все байты имеют значение 0FFh), BSL возвращает символ подтверждения DATA_ACK. В противном случае, BSL возвращает DATA_NAK и первый нестёртый адрес +1 сохраняется в буфере ОЗУ по адресу 0200h (или 021Eh для семейства F14x).
Примечание: Эта команда не входит в набор стандартных команд. Она включена в BSL, начиная с версии V1.60 и в загружаемую версию BL_150S_14x.txt.
7.3.7 Сменить скорость обмена (Change Baud Rate)
Команда «Сменить скорость обмена» позволяет вести обмен на скоростях, выше, чем 9600 бод, являющейся скоростью обмена по умолчанию. Ускоренный обмен данными позволяет укоротить циклы программирования, что важно для устройств с большим объёмом флеш-памяти. Эта команда не защищена паролем.
Три байта от D1 до D3 определяют выбираемую скорость обмена. D1 и D2 определяют скорость процессора (f ? fmin), D3 косвенно задаёт частоту генератора контроллера флеш-памяти (fFTGmin ? fFTG ? fFTGmax) следующим образом:
D1: |
F1xx: |
Управляющий регистр основного модуля тактирования (Basic clock module) DCOCTL (DCO.2 … DCO.0) |
F4xx: |
Управляющий регистр умножителя частоты FLL+ SCFI0 (D, FN_8 … FN_2) |
D2: |
F1xx: |
Управляющий регистр основного модуля тактирования BCSCTL1 (XT2Off, Rsel.2 … Rsel.0) |
F4xx: |
Управляющий регистр умножителя частоты FLL+ SCFI1 (NDCO) |
D3: |
0: |
9600 Бод |
1: |
19200 Бод |
2: |
38400 Бод |
После приёма этой командной последовательности BSL возвращает символ подтверждения DATA_ACK на скорости обмена, соответствующей выбранной. Для программы обмена, работающей с BSL рекомендуется выдерживать паузу (примерно10 мс) между сменой скорости обмена и последующим обменом данными для стабилизации системы тактирования.
Примечание: Верхняя максимально допустимая скорость обмена зависит от различных параметров самой системы и окружающей среды, таких, как напряжение питания, диапазон температур и минимальной и максимальной рабочей частоты процессора. См. документацию на конкретный МК.
Примечание: Эта команда входит в набор команд BSL, начиная с версии V1.60 и в загружаемую версию BL_150S_14x.txt.
Таблица 2. Рекомендации для MSP430F149 (F449) (TA = 25°C, VCC = 3.0 В, fmax = 6.7 МГц) (см. Примечание 2)
Скорость обмена, бод |
Частота процессора Fmin (МГц) (см. Примечание 4) |
D1 DCOCTL SCFI0 (см. Примечание 1) |
D2 BCSCTL1 SCFI1 (см. Примечание 1) |
D3 (см. Примечание 1) |
Время программирования/верификации 60КБ (сек.) (См. Примечание 3) |
9600 (начальная) |
1.05 |
80 (00) |
85 (98) |
00 (00) |
78+3.7 (0.0) |
19200 |
2.1 |
E0 (00) |
86 (B0) |
01 (01) |
39+3.7(2.4) |
38400 |
4.2 |
E0 (00) |
87 (C8) |
02 (02) |
20+3.7 (2.4) |
- D1 .. D3 – байты в шестнадцатеричном виде
- Значения в скобках () приведены для процессора MSP430F449.
- Дополнительные 3.7 (2.4) секунды связаны с загрузкой, верификацией и запуском загружаемого BSL.
- Минимальная частота процессора меньше, чем в стандартном BSL ПЗУ (см. Статус после инициализации, глава 12.3).
7.3.8 Загрузить программный счётчик (Load PC)
Команда «Загрузить программный счётчик» непосредственно загружает в программный счётчик (регистр R0) любое значение в пределах всего адресного пространства. Команда защищена паролем.
После приёма данной командной посылки, BSL возвращает символ подтверждения DATA_ACK.
После этого, выбранный адрес загружается в программный счётчик. Начинается выполнение программы с этого адреса, а сессия BSL прерывается.
Следует учитывать, что защита паролем в это время уже не действует.
7.3.9 передать блок данных (TX Data Block)
Команда «Передать блок данных» используется для осуществления операции чтения из флеш-памяти, ОЗУ, либо регистров контроля периферийных модулей по адресам 0000h–01FFh. Команда защищена паролем.
16-битный стартовый адрес блока определяется байтами AL (младший) и AH (старший). 16-битная длина блока задаётся байтами LL (младший) и LH (старший). Из-за того, что число байт данных ограничено до 250, байт LH всегда равен 0. В конце посылки передаются байты контрольной суммы CKL (младший) и CKH (старший).
В ответ на команду BSL возвращает запрошенный блок данных. После передачи HDR, незначащего CMD, L1 и L2, BSL передаёт байты данных от D1 до Dn, завершающиеся байтами контрольной суммы CKL (младший) и CKH (старший). Символ подтверждения в данном случае не требуется.
7.3.10 Передать версию BSL (TX BSL Version)
Команда «Передать версию BSL» возвращает пользователю информацию об идентификаторе чипа и программную версию загрузчика BSL. Пароль для данной команды не требуется.
Значения AL, AH, LL, и LH могут быть любыми, но, всё равно, должны быть переданы для обеспечения требований протокола. Посылка завершается байтами контрольной суммы CKL (младший) и CKH (старший).
После этого, BSL возвращает блок данных длиной 16 байт. Сначала передаётся HDR, потом незначащие параметры CMD, L1 и L2, после чего BSL пересылает байты данных от D1 до D16 (десятичных), завершается посылка байтами контрольной суммы CKL (младший) и CKH (старший). Символ подтверждения в данном случае не требуется.
Байты D1, D2 и D11, D12 (десятичные) содержат специальную информацию:
D1: Тип семейства (старший байт)
D2: Тип семейства (младший байт)
D11: Версия BSL (старший байт)
D12: Версия BSL (младший байт)
Остальные 12 байт содержат информацию для служебного пользования.
8 Загружаемые BSL
Для повышения функциональных возможностей BSL, иногда бывает удобно загрузить более свежую версию BSL в ОЗУ устройства с целью использования дополнительных возможностей. Это осуществляется путём передачи следующих команд BSL:
- Принять пароль (RX password) (снять защиту паролем для нижеследующих команд)
- Принять блок данных (RX data block) (код загружаемого BSL, стартовый адрес ??220h)
- Передать блок данных (TX data block) (для верификации)
- Принять блок данных (RX data block) (передать стартовый адрес)
- Загрузить программный счётчик (Load program counter PC) (записать стартовый адрес загружаемого BSL)
- Принять пароль (RX password) (снять защиту паролем для загруженного BSL)
- Выполнить любую команду (используя загруженный BSL)
Доступны следующие версии загружаемых BSL:
- BL_150S_14x.txt это полный BSL для семейств F14x/F13x с прошитым BSL версии 1.10. Поддерживает все функции загрузчика BSL версии V1.60. Ввиду того, что размер кода превышает 1 КБ, этот загрузчик можно использовать только с МК семейств F1x8 и F1x9. Адрес буфера ошибок для команд «Передать блок» ("RX Block"), «Стереть сегмент» ("Erase Segment"), и «Проверка стирания» ("Erase Check") - 021Eh. BL_150S_14x.txt также может использоваться взамен PATCH.txt.
- BS_150S_14x.txt это урезанный BSL с неполным набором команд для семейств F14x/F13x с прошитой версией загрузчика BSL 1.10. Так как размер кода не превышает 512Б, этот загрузчик можно использовать совместно с любыми устройствами от F1x4 до F1x9. Поддерживаются следующие команды загрузчика BSL версии V1.60: «Сменить скорость обмена» (Change Baudrate), «Принять блок» (RX Block) (с верификацией в режиме реального времени), «Проверка стирания» (Erase Check) и «загрузить программный счётчик» (Load PC). Если требуется команда «Передать блок» (TX Block) (перенаправляемая к BSL, прошитому в ПЗУ), (например, для передачи адресов ошибок или верификации) загрузчик BSL должен быть по новой запущен из ОЗУ с помощью команды «Загрузить программный счётчик» (Load PC). Адрес буфера ошибок для команд «Передать блок» ("RX Block") и «Проверка стирания» ("Erase Check") - 021Eh. BS_150S_14x.txt также может быть использован в качестве частичной замены для PATCH.txt.
Примечание: Пароль не требуется, команда «Принять пароль» отсутствует!
Более подробная информация по загрузке различных типов BSL, см. пример применения «Применение программы начальной загрузки в микроконтроллеры MSP430 с флэш-памятью: программные и аппаратные предложения (версия B)» (Application of Bootstrap Loader in MSP430 With Flash Hardware and Software Proposal) (SLAA096).
Программное обеспечение третьих фирм обычно использует загружаемые BSL для обеспечения максимальной функциональности, в частности, использования верификации в режиме реального времени, и для повышения скорости при работе с соответствующими устройствами.
9 Выход из BSL
Существуют 2 способа выхода из режима BSL:
- Микроконтроллер продолжает работу с определённого адреса, задаваемого командой «Загрузить программный счётчик». Следует учитывать, что защита паролем в это время уже не действует.
- Выполнить стандартную процедуру RESET (см. Рис. 1), что приведёт к выполнению микроконтроллером программы со стандартного адреса вектора сброса 0FFFEh.
10 Защита паролем
Защита паролем запрещает выполнение любой команды, потенциально допускающей непосредственный или косвенный доступ к данным. Без предварительного приёма корректного пароля после активизации BSL, могут быть выполнены только незащищённые паролем команды, такие, как «Полное стирание» и «Принять пароль» (опционально – «Передать версию BSL» и «Сменить скорость обмена»).
Выполнение команды «Принять пароль», сопровождаемое передачей корректного пароля разблокирует выполнение остальных команд.
Действие разблокировки сохраняется вплоть до следующей инициализации сессии BSL. Операция сброса (-RST/NMI = 0 ? 1, VCC = 0 ? 1) не оказывает влияния на функции защиты.
Пароль представляет собой значение 16-ти векторов прерываний, расположенных по адресам от FFE0h до FFFFh (256 бит), начиная с первого байта по адресу FFE0h. После выполнения процедуры «Полное стирание» и в незапрограммированных чипах значение пароля состоит из всех лог. «1»
Примечание: Пользователь должен обращать внимание на тот факт, что пароль будет изменён в случае изменения векторов прерываний и инициализации следующей сессии BSL. Кроме этого, настоятельно рекомендуется инициализировать неиспользуемые вектора прерываний для повышения защиты данных.
11 Предохранитель защиты данных (Code Protection Fuse)
После того, как предохранитель JTAG (code protection fuse) пережжён, последующий доступ к функции JTAG/test невозможен. Единственным способом доступа чтения/записи к памяти является использование программатора на основе загрузочного сектора с передачей корректного пароля.
При этом, пережигание предохранителя JTAG посредством BSL невозможно. Если требуется пережигание предохранителя, следует использовать программирование через интерфейс JTAG.
12 Внутренние настройки и ресурсы BSL
Нижеследующие параграфы описывают внутренние настройки и ресурсы BSL. Ввиду того, что одинаковые МК могут существовать с различными прошитыми версиями BSL, для программы, работающей с BSL, требуется знать соответствующие настройки и ресурсы, которые могут зависеть как от типа устройства (например, назначение выводов RX/TX) так и от версии BSL (например, побайтовый/пословный доступ). Различные возможные комбинации параметров будут рассмотрены ниже.
12.1 Идентификатор чипа и версия BSL
Старшие 16 байт в ПЗУ загрузчика (по адресам 0FF0h–0FFFh) содержат информацию об устройстве и версии загрузчика BSL в двоично–десятичном виде. Это справедливо для всех видов МК и всех версий BSL:
- 0FF0h–0FF1h: Идентификатор чипа (например, F413h для МК серии F41x).
- 0FFAh–0FFBh: Номер версии BSL (например, 0130h для версии BSL V1.30).
См. также таблицу соответствия между семействами MSP430 и версией BSL в Приложении A.
12.2 Вектора
Стартовая часть ПЗУ загрузчика содержит вектора программного вызова:
- 0C00h: Вектор для «холодного» запуска (мнемоника: BR &0C00h)
- 0C02h: Вектор для «горячего» запуска (мнемоника: BR &0C02h). Версия V1.30 или выше.
- 0C04h: Вектор(а) для будущего использования. Таблица может быть расширена.
12.3 Статус после инициализации
После инициализации BSL, в силу вступают следующие настройки:
- Остановить сторожевой таймер Watchdog Timer
- Запретить все прерывания (GIE=0)
- В версии V1.10: указатель стека не изменяется, кроме тех случаев, когда он указывает на несуществующую область памяти. В этом случае, он будет инициализирован по адресу 021Ah.
- В версиях V1.30 и выше: указатель стека не изменяется в случае программного вызова BSL по адресу «горячего» запуска. В случае запуска BSL при помощи аппаратной активизации либо программного вызова по адресу «холодного» старта, указатель стека инициализируется по адресу 0220h
- F1xx:
Базовый модуль тактирования настраивается следующим образом ( минимальная частота при этом равна1.5МГц):
BCSCTL1 = 85h (RSEL = 5, XT2Off = 1)
DCOCTL = 80h (DCO = 4, MOD = 0)
BCSCTL2 = 00h только в случае «холодного» запуска
SR: SCG1 = 00h (SMCLK вкл) только в случае «холодного» запуска
F4xx:
Умножитель частоты FLL и модуль тактирования настраивается следующим образом ( минимальная частота при этом равна1.5МГц):
SCFI0 = 00h (D = 0, FN_x = 0)
SCFI1 = 98h (N_DCO)
SCFQCTL: (M = 0)
SR: SCG0 = 1 (петля захвата FLL отключена)
FLL_CTL1 = 00h только в случае «холодного» запуска
- Программный УАПП (SW-UART): Timer_A функционирует в непрерывном режиме (continuous mode), источник тактирования - MCLK (Div = 1)
CCR0 используется для сравнения
CCTL0 используется для поллинга CCIFG0
- Вывод TX сконфигурирован как выход, на выходе лог. «1» для состояния готовности RS232
- Вывод RX сконфигурирован как вход
- Защищённые паролем команды заблокированы (только в случае «холодного» запуска)
После системной инициализации, BSL готов к работе и находится в ожидании первой синхропоследовательности (SS), сопровождаемой посылкой данных, содержащих первую команду BSL.
12.4 Распределение памяти и используемые ресурсы
Программный код загрузчика BSL расположен в загрузочном ПЗУ по адресам 0C00h–0FEFh.
По адресам 0FF0h–0FFFh расположен идентификатор чипа
Переменные BSL расположены в ОЗУ по адресам:
0200h–0213h (V1.10)
0200h–0219h (V1.30 и выше).
Стек загрузчика BSL расположен в ОЗУ по адресам:
0214h–0219h (V1.10)
021Ah–021Fh (V1.30 или выше, только в случае «холодного» запуска).
Используемые регистры:
R5–R9 (V1.30 и ниже)
R5–R10 (V1.40)
R5–R11 (V1.60).
Содержимое регистров не сохраняется.
F1xx:
Используемые регистры базового модуля тактирования:
DCOCTL по адресу 056h
BCSCTL1 по адресу 057h
F4xx:
Используемые регистры умножителя частоты FLL и модуля тактирования:
SCFI0 по адресу 050h
SCFI1 по адресу 051h
SCFQCTL по адресу 052h
Используемые управляющие регистры таймера Timer_A:
TACTL по адресу 0160h
CCTL0 по адресу 0162h
TAR по адресу 0170h
CCR0 по адресу 0172h
Влияния на обработку прерываний не оказывает.
13 Отличительные особенности версии BSL 1.10
Первая официальная версия V1.10 загрузчика BSL требует небольшого загружаемого дополнения PATCH.TXT, для корректного выполнения команды «Принять блок данных» (RX block). Ввиду этого, после запуска BSL следует выполнить следующие действия:
- Отправить команду «Принять пароль» (RX password) и разблокировать выполнение последующих команд
- Отправить команду «Загрузить программный счётчик» (Load program counter (PC)) со значением 0C22h (инициализировать указатель стека на безопасный адрес)
- Повторить команду «Принять пароль» (RX password) (unlock password protection for subsequent commands)
- Отправить команду «Принять блок данных» (RX data block) (код загружаемого дополнения, стартовый адрес 0220h)
- Отправить команду «Передать блок данных» (TX data block) (код загружаемого дополнения для верификации)
- С данного момента команды «Принять блок данных» (RX data block) и «Передать блок данных» (TX data block) могут быть использованы с одним условием: перед их выполнением следует установить программный счётчик на стартовый адрес обновления.
- Отправить команду «Загрузить программный счётчик» (Load program counter (PC)) со значением 0220h стартового адреса загружаемого обновления
- Отправить команду «Принять блок данных» (RX data block) (код, записываемый по любому адресу) – или -
- Отправить команду «Передать блок данных» (TX data block) (с любого адреса)
- Более подробная информация по загрузке обновления или других загрузчиков BSL содержится в примере применения «Применение программы начальной загрузки в микроконтроллеры MSP430 с флэш-памятью: программные и аппаратные предложения (версия B)», (Application of Bootstrap Loader in MSP430 With Flash Hardware and Software Proposal) (SLAA096).
14 Ссылки
- «Руководство пользователя MSP430x1xx» (MSP430x1xx Family User’s Guide) (SLAU049)
- «Руководство пользователя MSP430x4xx» (MSP430x4xx Family User’s Guide) (SLAU056)
- «Применение программы начальной загрузки в микроконтроллеры MSP430 с флэш-памятью: программные и аппаратные предложения (версия B)», Application of Bootstrap Loader in MSP430 With Flash Hardware and Software Proposal (SLAA096)
Список третьих фирм, предлагающих программные и аппаратные решения для работы с BSL, расположен на сайте, посвящённом микроконтроллеру MSP430 по адресу http://www.ti.com/sc/msp430 (> Design Resources > Third Party > Tools).
Приложение A. Различия между версиями BSL в различных микроконтроллерах
В таблицах данного раздела собрана информация о соответствии различных версий BSL разным микроконтроллерам серии MSP430 и используемых ими программных и аппаратных ресурсах.
Таблица 3. Версия BSL 1.10 в микроконтроллерах серий F13x, F14x(1), F11x, и F11x1
Тип микроконтроллера |
F13x F14x(1) |
F11x(устаревшие) F11x1(устаревшие) |
Версия BSL |
1.10 |
Адрес вектора BSL |
«Холодный» запуск |
0C00h |
«Горячий» запуск |
- |
Адрес идентификатора чипа |
0FF0h |
Идентификатор чипа |
F149h |
F112h |
Адрес версии BSL |
0FFAh |
Версия BSL |
0110h |
Номинальное время полного стирания, мс |
17,2 |
Доступ чтения/записи по адресам 0000h-FFFFh |
побайтный |
Верификация в режиме реального времени (во время записи) |
отсутствует |
Инициализация указателя стека |
Недопустимый адрес SP |
021Ah |
Допустимый адрес SP |
не изменяется |
Ресурсы, используемые BSL |
Вывод передатчика(TX)/вывод приёмника(RX) |
P1.1/P2.2 |
Используемый диапазон ОЗУ/стека |
0200h-0219h |
Рабочие регистры |
R5-R9 |
Изменяемые регистры управления системным тактированием |
BCSCTL1, DCOCTL |
Изменяемые регистры управления таймером Timer_A |
TACTL, TAR, CCTL0, CCR0 |
Подготовка к программному вызову |
mov #00h, &CCTL0 bic.b #02h, &P1SEL bic.b #04h, &P2SEL bic.b #32h, &IE1 mov.b #00h, &BCSCTL2 mov #00h, SR br &0C00h |
Комментарий 1 |
Обязательная доработка |
Загрузить файл PATCH.TXT для исправления ошибки в ПЗУ. См. разделы «Отличительные особенности версии BSL 1.10» и «Загружаемые BSL» |
Комментарий 2 |
Опциональная доработка для F148 и F149: использовать загружаемый BSL (требуется >1KБ ОЗУ) |
Загрузить файл BL_150S_14x.txt, что позволит использовать все возможности версии V1.60 и корректно использовать команду «Стереть сегмент» (Erase segment) См. раздел «Загружаемые BSL» |
Комментарий 3 |
Опциональная доработка для F1x4…F1x9: использовать маленький загружаемый BSL (требуется <512Б ОЗУ) |
Загрузить файл BS_150S_14x.txt , что позволит использовать часть возможностей версии V1.60. См. раздел «Загружаемые BSL» |
Таблица 4. Версия BSL 1.30 в микроконтроллерах серий F41x, F11x, и F11x1
Тип микроконтроллера |
F41x |
F11x(устаревшие) F11x1A |
Версия BSL |
1.30 |
Адрес вектора BSL |
«Холодный» запуск |
0C00h |
«Горячий» запуск |
0C02h |
Адрес идентификатора чипа |
0FF0h |
Идентификатор чипа |
F413h |
F112h |
Адрес версии BSL |
0FFAh |
Версия BSL |
0130h |
Номинальное время полного стирания, мс |
206,4 |
Доступ чтения/записи по адресам |
0000h-00FFh |
побайтный |
0100h-FFFEh |
пословный |
Верификация в режиме реального времени (во время записи) |
отсутствует |
Инициализация указателя стека |
«Холодный» запуск |
0220h |
«Горячий» запуск |
не изменяется |
Ресурсы, используемые BSL |
Вывод передатчика (TX) |
P1.0 |
P1.1 |
Вывод приёмника (RX) |
P1.1 |
P2.2 |
Используемый диапазон ОЗУ/стека |
0200h-021Fh |
Рабочие регистры |
R5-R9 |
Изменяемые регистры управления системным тактированием |
SCFI0, SCFI1, SCFQCTL |
BCSCTL1, DCOCTL |
Изменяемые регистры управления таймером Timer_A |
TACTL, TAR, CCTL0, CCR0 |
Подготовка к программному вызову |
mov #00h, &CCTL0 mov.b #00h, &FLLCTL1 br &0C00h mov #00h, &CCTL0 mov.b #00h, &BCSCTL2 mov #00h, SR
br &0C00h |
Таблица 5. Версия BSL 1.40 в микроконтроллерах серий F12x
Тип микроконтроллера |
F122, F123x |
Версия BSL |
1.40 |
Адрес вектора BSL |
«Холодный» запуск |
0C00h |
«Горячий» запуск |
0C02h |
Адрес идентификатора чипа |
0FF0h |
Идентификатор чипа |
F123h |
Адрес версии BSL |
0FFAh |
Версия BSL |
0140h |
Номинальное время полного стирания, мс |
206,4 |
Доступ чтения/записи по адресам |
0000h-00FFh |
побайтный |
0100h-FFFEh |
пословный |
Верификация в режиме реального времени (во время записи) |
Для диапазона адресов 0200h – FFFEh |
Инициализация указателя стека |
«Холодный» запуск |
0220h |
«Горячий» запуск |
не изменяется |
Ресурсы, используемые BSL |
Вывод передатчика (TX) |
P1.1 |
Вывод приёмника (RX) |
P2.2 |
Используемый диапазон ОЗУ/стека |
0200h-021Fh |
Рабочие регистры |
R5-R10 |
Изменяемые регистры управления системным тактированием |
BCSCTL1, DCOCTL |
Изменяемые регистры управления таймером Timer_A |
TACTL, TAR, CCTL0, CCR0 |
Подготовка к программному вызову |
mov.b #00h, &BCSCTL2 mov #00h, SR br &0C00h |
Таблица 6. Версия BSL 1.60 в микроконтроллерах серий F11x2, F12x2, F43x, F44x, FE42x, FW42x, FG43x
Тип микроконтроллера |
F1122, F1132 |
F1222, F1232 |
F43x, F44x |
FE42x, FW42x |
FG43x |
Версия BSL |
1.60 |
Адрес вектора BSL |
«Холодный» запуск |
0C00h |
«Горячий» запуск |
0C02h |
Адрес идентификатора чипа |
0FF0h |
Идентификатор чипа |
1132h |
1232h |
F449h |
F427h |
F439h |
Адрес версии BSL |
0FFAh |
Версия BSL |
0160h |
Номинальное время полного стирания, мс |
206,4 |
Доступ чтения/записи по адресам |
0000h-00FFh |
побайтный |
0100h-FFFEh |
пословный |
Верификация в режиме реального времени (во время записи) |
Для диапазона адресов 0200h – FFFEh |
Команда «Проверка стирания» (Erase check) |
Присутствует |
Команда «Стирание сегмента» (Erase segment) |
C верификацией стирания, адрес буфера ошибок 0200h |
Команда «Передача идентификатора» (TX identification) |
Присутствует |
Команда «Сменить скорость обмена» (Change Baud Rate) |
Присутствует |
Инициализация указателя стека |
«Холодный» запуск |
0220h |
«Горячий» запуск |
не изменяется |
Ресурсы, используемые BSL |
Вывод передатчика (TX) |
P1.1 |
P1.0 |
Вывод приёмника (RX) |
P2.2 |
P1.1 |
Используемый диапазон ОЗУ/стека |
0200h-021Fh |
Рабочие регистры |
R5-R12 |
Изменяемые регистры управления системным тактированием |
BCSCTL1, DCOCTL |
SCFI0, SCFI1, SCFQCTL |
Изменяемые регистры управления таймером Timer_A |
TACTL, TAR, CCTL0, CCR0 |
Подготовка к программному вызову |
mov.b #00h, &BCSCTL2 mov #00h, SR br &0C00h |
mov.b #00h, &FLLCTL1 br &0C00h |
Комментарий |
Адреса от 1000h до 11FFh верифицируются совместно (3 сегмента) |
Используйте также команду «Проверка стирания» (Erase check) |
Таблица 7. Версия BSL 1.61 в микроконтроллерах серий F15x, F16x, F161x
Тип микроконтроллера |
F15x, F16x |
Предварительная информация для F1610, F1611, F1612 |
Версия BSL |
1.61 |
Адрес вектора BSL |
«Холодный» запуск |
0C00h |
«Горячий» запуск |
0C02h |
Адрес идентификатора чипа |
0FF0h |
Идентификатор чипа |
F169h |
F16Ch |
Адрес версии BSL |
0FFAh |
Версия BSL |
0161h |
Номинальное время полного стирания, мс |
206,4 |
Доступ чтения/записи по адресам |
0000h-00FFh |
побайтный |
0100h-FFFEh |
пословный |
Верификация в режиме реального времени (во время записи) |
Для диапазона адресов 0200h – FFFEh |
Команда «Проверка стирания» (Erase check) |
Присутствует |
Команда «Стирание сегмента» (Erase segment) |
C верификацией стирания, адрес буфера ошибок 0200h |
Команда «Передача идентификатора» (TX identification) |
Присутствует |
Команда «Сменить скорость обмена» (Change Baud Rate) |
Присутствует |
Инициализация указателя стека |
«Холодный» запуск |
0220h |
«Горячий» запуск |
не изменяется |
Ресурсы, используемые BSL |
Вывод передатчика (TX) |
P1.1 |
Вывод приёмника (RX) |
P2.2 |
Используемый диапазон ОЗУ/стека |
0200h-021Fh |
Рабочие регистры |
R5-R12 |
Изменяемые регистры управления системным тактированием |
BCSCTL1, DCOCTL |
Изменяемые регистры управления таймером Timer_A |
TACTL, TAR, CCTL0, CCR0 |
Подготовка к программному вызову |
mov.b #00h, &BCSCTL2 mov #00h, SR br &0C00h |
Комментарий |
Адреса от 1000h до 11FFh верифицируются совместно (3 сегмента) |
Используйте также команду «Проверка стирания» (Erase check) |
|