Прошивка контроллеров MSP430 с помощью Bootstrap Loader

Пт 13 Ноябрь 2009 by levap

Существует два метода загрузки исполняемого кода во внутреннюю память микроконтроллера: через  отладочный интерфейс JTAG и посредством встроенного загрузчика Bootstrap Loader (BSL). Связь с процессором по интерфейсу JTAG доступна до тех пор, пока не уничтожена аппаратная перемычка (fuse), после чего связь возможна только через интерфейс BSL. Насколько я понял, в новой серии микроконтроллеров 5xx аппаратно пережигаемая перемычка заменена программной блокировкой.

В этой статье мы рассмотрим второй вариант загрузки кода, с помощью Bootstrap Loader (BSL)как наиболее простой для начала работы. Он позволяет производить загрузку кода без возможности внутрисхемной отладки.

Данный загрузчик доступен в контроллерах всех серий, содержащих встроенную FLASH-память. При этом у процессоров серий 1xx, 2xx и 4xx загрузчик располагается в ROM, а у серии 5xx в защищенной области FLASH.

Для чтения данных, записанных в памяти, через BSL, необходим пароль, который может быть извлечен из прошивки или введен из внешнего источника (например, считан из файла). При его отсутствии, возможно выполнение только команды полной очистки FLASH-памяти.

Для работы с загрузчиком через компьютерный порт RS232 (COM), необходимы 4 сигнальные линии: TxD, RxD, DTR, RTS. Для преобразования уровней можно использовать любую микросхему, которая поддерживает питание 3,3 В и имеет хотя бы 3 входа (для сигналов TxD, DTR, RTS) и 1 выход (для сигнала RxD). В том числе, микросхемы-преобразователи USB->UART (например, FT232).

Я использую для этого самодельный переходник USB->UART на основе микросхемы FTDI FT232BM. У фирмы FTDI также имеется микросхема FT232R, которая требует минимального количества внешней обвязки и отлично подходит для решения данной задачи.

На сайте будут представлены несколько схем BSL-программаторов, а также схема JTAG-адаптера на LPT порт.

Подключение BSL-программатора к целевому микроконтроллеру осуществляется в соответствии со следующей таблицей:

Сигнал RS232

Контроллеры с ножкой TEST

Контроллеры семейства F4xx

Остальные контроллеры

TxD

RxD (P2.2)

RxD (P1.1)

RxD (P2.2)

RxD

TxD (P1.1)

TxD (P1.0)

TxD (P1.1)

DTR

RST/NMI

RST/NMI

RST/NMI

RTS

TEST

TCK

TCK

GND

GND

GND

GND

Рассмотрим работу с BSL-программатором на примере программы msp430-bsl.exe, входящей в состав пакета MSP GCC.

Для получения справочной информации, в консоли (Start->Run -> cmd) введите:

[text]C:\ >cd c:\mspgcc\bin

C:\mspgcc\bin>msp430-bsl.exe –h[/text]

Вывод программы с русским переводом находится под спойлером:
[spoiler]
[text]C:\mspgcc\bin>msp430-bsl.exe -h
MSP430 Bootstrap Loader Version: 2.0
Использование: msp430-bsl.exe [options] [file]
Версия: 2.0
Файлы с расширением ".txt" принимаются как файлы в формате TI-Text,
а файлы ".a43" и ".hex" как файлы в формате IntelHEX, а все остальные
как файлы ELF.
Основные параметры:
-h, --help            Показать эту страницу с помощью.
-c, --comport=port    Указать номер используемого COM-порта.
(По умолчанию 0)
0->COM1 / ttyS0
1->COM2 / ttyS1
и т.д.
-P, --password=file   указывает на файл, содержащий векторы прерываний,
которые используются в качестве пароля. Это может
быть любой файл, ранее используемый для программирования.
(например -P INT_VECT.TXT).
-f, --framesize=num   Максимальное количество байт, передаваемых за один фрейм.
(от 16 до 240 с шагом 16) (например -f 240).
-m, --erasecycles=num Число циклов полного стирания памяти (по умолчанию = 1).
Требуется для некоторых устаревших контроллеров.
(например для F149: -m20).
-U, --unpatched       Не загружать патч BSL, когда это может быть необходимо.
Используется когда нет необходимости программировать FLASH,
а программа загружается в RAM для исполнения.
-D, --debug           Увеличивает уровень отладочной информации.
-I, --intelhex        Формат входного файла IntelHex.
-T, --titext          Формат входного файла TI-Text.
-N, --notimeout       Не использовать таймаут для последовательного порта.
-B, --bsl=bsl.txt     Загрузить новый BSL из файла TI-Text.
-S, --speed=baud      Изменение скорости порта (читайте slaa089a.pdf для дополнительной
информации). Возможные значения: 9600, 19200, 38400
(по умолчанию 9600).
-1, --f1x             Указывает семейство контроллера.
-4, --f4x             Указывает семейство контроллера.
--invert-reset        Инвертирование сигнала на ножке RST.
--invert-test         Инвертирование сигнала на ножке TEST/TCK.
--swap-reset-test     Взаимозамена управляющих сигналов TEST/TCK и RST.
--test-on-tx          Also toggle TX line for the TEST/TCK signal.
--ignore-answer       Игнорировать ответы ACKs от BSL (не используйте
если не знаете что это)
--no-BSL-download     Do not download replacement BSL (disable automatic)
--force-BSL-download  Download replacement BSL even if not needed (the one
in the device would have the required features)
Программирование:
-e, --masserase       Полное стирание (очищает всю FLASH-память)
-m, --mainerase       Стирание только основной области памяти(требует --password)
--erase=address       Стирание сегмента памяти по заданному адресу
(требует --password)
--erase=adr1-adr2     Стирание диапазона сегментов памяти по заданнымадресам
(требует --password)
-E, --erasecheck      Erase Check by file
-p, --program         Прошивка файла
-v, --verify          Верификация с помощью файла
The order of the above options matters! The table is ordered by normal
execution order. For the options "Epv" a file must be specified.
Program flow specifiers default to "pvr" if a file is given.
Don't forget to specify "e" or "eE" when programming flash!
Data retreiving:
-u, --upload=addr     Upload a datablock (see also: -s).
-s, --size=num        Size of the data block do upload. (Default is2)
-x, --hex             Show a hexadecimal display of the uploaded data.
(Default)
-b, --bin             Get binary uploaded data. This can be used
to redirect the output into a file.
Действия перед выходом:
-g, --go=address      Старт программы по заданному адресу.
This implies option --wait.
-r, --reset           Сброс целевого MSP430.
This is a normal device reset and will start
the programm that is specified in the reset
vector. (see also -g)
-w, --wait            Ждать <ENTER> перед закрытием последовательного порта.
Параметры адреса для --erase, --upload, --size могут быть указаны в формате
decimal, hexadecimal или octal.
Если программа отвечает "NAK received", значит не указан, или указан неверно пароль.
Необходимо произвести полное стирание памяти перед программированием.[/text]

[/spoiler]

Параметры, которые будут нас интересовать в первую очередь:

-c, --comport=port - устанавливает номер COM-порта, используемый для программирования, причем, "0" соответствуетCOM1, "1" соответствует COM2 и т.д.

--invert-reset – инвертирует логический уровень на ножке RST

--invert-test – инвертирует логический уровень на ножке TEST (TCK)

-e, --masserase – полное стирание FLASH-памяти

-p, --program – загрузка прошивки (программирование)

-v, --verify – верификация (проверка) прошивки

-r, --reset – сброс контроллера по окончании программирования

Инвертирование сигналов полезно в случае, когда используется не родной программатор, схема и печатная плата которого описана в документе от Texas Instruments, а самодельный, в котором это не предусмотрено аппаратно.

Предположим, наш программатор (на основе простейшего преобразователя уровней) подключен к порту COM3, программируемый контроллер имеет ножку TEST. Тогда вызов процедуры программирования кристалла будет выглядеть следующим образом:

[text]C:\mspgcc\bin>msp430-bsl.exe -c2 --invert-reset -e -p -v -r leds.a43

MSP430 Bootstrap Loader Version: 2.0
Mass Erase...
Transmit default password ...
Invoking BSL...
Transmit default password ...
Current bootstrap loader version: 1.60 (Device ID: 1232)
Program ...
226 bytes programmed.
Verify ...
Reset device ...[/text]

Для устройств без ножки TEST, в которых используется TCK, необходимо добавить параметр  --invert-test.

Приведенный пример запуска программы-загрузчика осуществляет полное стирание FLASH-памяти, загрузку новой прошивки из файла leds.a43, проверку новой прошивки и сброс устройства.

Входной файл прошивки может иметь форматы Intel HEX или TI TXT.

Полезные ссылки: