Тестовая версия UART загрузчика для STM8.

Ранее рассмотренный прототип UART-загрузчика для микроконтроллеров STM8S103F3P/STM8S003F3P перешел в стадию пробной версии. Пробной версии в смысле бета-тестирования. Ни каких ограничений по времени и количествам запусков он не имеет.
Пробная схема подключения

Проект был написан в среде разработки STVD на языке ST Assembler. Код в статье приводить не буду, уж слишком объемный он, просто дам ссылку на него.

Характеристики

Я уже озвучивал требования. Теперь приведу характеристики написанного загрузчика:

  • область занимаемой памяти: 0x9C00-9FFF и 0x8000-0x8003*;
  • время перехода к целевой программе: ~10 мкс**;
  • активация загрузчика: вывод отладчика (SWIM/PD1);
  • формат для загружаемой прошивки: Intel HEX;
  • интерфейс: терминал/UART;
  • метод программирования: побайтовая запись;
  • скорость программирования: ~75 байт/с.
(*) В области памяти 0x8000-0x8003 сохраняется вектор перехода на код загрузчика, но целевая программа может содержать в этой области свой вектор перехода (только вектор перехода), он будет сохранен в отдельной области памяти загрузчиком. К счастью этому условию удовлетворяет абсолютное большинство прошивок.
(**) Начальный код проверки необходимости запуска загрузчика и последующего освобождения используемых ресурсов занимает ~45 байт и просит ~30тактов. Таким образом, можно считать, что при частоте в 2МГц время выполнения проверки составит не более 10мкс. На практике время не замерял.

Что не реализовано

Далее приведу список желаемых доработок в порядке снижения их приоритета:

  1. программирование Option bytes - [необходимо];
  2. аналог Readout protection, стирание прошивки перед записью новой - [желательно];
  3. разбор Motorola S-record вместо Intel HEX;
  4. запись словами (Word programming) при возможности;
  5. отдельная версия загрузчика для защищенной от записи области (для встраивания в проекты).

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

Прошивку удалось поместить в 1кБайт памяти. Ещё имеется возможность оптимизации, что будет полезно при последующей доработке.

Как пользоваться

Прошивку самого загрузчика в микроконтроллер придется загружать в помощью какого-нибудь программатора и соответствующего ПО. С этим ничего не поделаешь. Предположим, что вы уже это сделали.

К выводам RX и TX подключаем преобразователь интерфейса UART, подключенный к компьютеру. На компьютере открываем соответствующий COM-порт и настраиваем его на: 9600бод, 8бит данных, без бита четности, 1 стоп бит. Так же указываем программный контроль передачи данных (XON/XOFF). Надо отметить, что загрузчик эгоист, и использует контроль только в своих целях, чтобы ему не слали данные, сам при этом совершенно игнорирует таковые указания. В прочем для компьютера это не проблема, при работе с загрузчиком компьютеру достаточно своего буфера данных и он не пытается запретить передачу данных загрузчиком.

Что бы активировать загрузчик, надо прижать к земле вывод SWID/PD1 (для версии stm8boot_d2 проверяется вывод PD2) и произвести сброс микроконтроллера/подать питание. В терминале должно появится приветствие:

STM8 ASM TopFlash bootloader (q - quit)
Загрузчик активировался и готов к приему прошивки.

Копируем текст целевой прошивки в окно терминала. Каждую строку кода загрузчик обрабатывает отдельно и подтверждает в случае успешного завершения программирования:

:1080000082008178820081A4820081A4820081A400	Ok.
:10801000820081A4820081A4820081A4820081A4C4	Ok.
:10802000820081A4820081A4820081A4820081A4B4	Ok.
:10803000820081A4820081A4820081A4820081A4A4	Ok.
Если же при вводе возникли ошибки или прошивка содержит недопустимый адрес, будет выдано сообщение об ошибке:
:109C0000FFFFFFFFAE03FF94721350117212501248	Error duaring process.
Надо заметить, что прошивку следует вводить без ошибок, т.к. не поддерживается возможность исправления вводимой строки. Так нет обработки backspace, delete, стрелок навигации и прочих служебных клавиш. Правильно будет именно копировать прошивку из файла (ну или просто направить файл на вывод в порт). Или просто игнорируйте сообщение об ошибке при неправильном вводе и повторно вводите строку.

В случае ввода недопустимой команды будет выведено сообщение:

Wrong format.
Оно же выводится и при получении пустых строк (простое нажатие клавиши <Enter>).

Для выхода из режима программирования надо набрать строку, начинающуюся с символа q или Q (не забудьте завершить ввод строки клавишей <Enter>). Проверяется только первый символ строки, поэтому остальные символы не имеют значения. Если микроконтроллер не содержит прошивку, то выход не возможен и будет выдано сообщение:

Firmware missed.
Если же прошивка была загружена (сейчас или раннее), то ей будет передано управление.

Так же можно выйти, освободив вывод SWIM/PD1 (может быть освобожден в любое время после активации загрузчика) и сбросив микроконтроллер.

Ститать домустимым cообщение об ошибке для строки с кодом 04, например в строке:

:020000040000FA
Это запись из формата Intel HEX Extended для задания более 64кБ и в нашем случае всегда имеет нулевое значение.

Результат

видео процесса загрузки двух тестовых прошивок
<a href="http://www.youtube.com/watch?v=lJWdT_6O21A">Смотреть на YouTube: http://www.youtube.com/watch?v=lJWdT_6O21A</a>
Первая прошивка ~436 байт мигает светодиодом на выводе PD3. Вторая ~526 байт использует встроенный модуль BEEPER для выдачи звука на вывод PD4. Обе прошивки выводят в терминал сообщения (скорость та же 9600бод).

Кто хочет проверить

Прошивки загрузчика и тестовых программ для stm8s103f3 - тут.
Подключение:

// PD5 -  2 in TSSOP20 - tx
// PD6 -  3 in TSSOP20 - rx
// PD4 -  1 in TSSOP20 - beeper	- для тестовой программы testsound
// PD3 - 20 in TSSOP20 - led	- для тестовой программы testblink
// PD2 - 19 in TSSOP20 - boot switch - для загрузчика *_d2.s19
// PD1 - 18 in TSSOP20 - boot switch - для загрузчика *_d1.s19
Прошивка stm8boot_d1 использует для активации вывод SWIM/PD1.
Прошивка stm8boot_d2 использует вывод PD2 и имеет команду d - распечатывающую содержимое EEPROM-памяти микроконтроллера. Для проверки можно использовать следующие заготовки:
Fill EEPROM up
:1040000000112233445566778899AABBCCDDEEFFB8
:00000001FF

Clear EEPROM up
:1040000000000000000000000000000000000000B0
:00000001FF

Fill EEPROM 0x20
:01402000346B
:00000001FF

Clear EEPROM 0x20
:01402000009F
:00000001FF

Проект для среды STVD с исходными кодами загрузчика для stm8s103f3 - тут.

Проект и не имеет никаких ограничений на использование. Хоть копируйте, хоть продавайте, но я не несу ответственности за ваши действия и последствия использования кода. Так сказать лицензия типа BSD.

Файлы: stm8boot_beta.zip, stm8boot_beta_src.zip

Hosted by uCoz