Skip to content
prcoder-1Public

About

Программатор MC68HC908JB8 через ROM-монитор под Linux (KDE3) и адаптер на MAX232 (2007–2009)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

hc08prog

Собранный адаптер

Программатор flash‑памяти микроконтроллера MC68HC908JB8 (семейство HC08, Motorola/Freescale) для Linux. Состоит из программы для KDE 3 и простого адаптера на MAX232, который подключается к COM‑порту компьютера. Работает через ROM‑монитор, встроенный в микроконтроллер, поэтому заранее записывать в него загрузчик не нужно. Написан в 2007–2009 годах.

Возможности

  • Вход в режим монитора: передача 8‑байтового кода защиты и проверка результата (индикатор Security check: зелёный — доступ к flash открыт, красный — код не подошёл).
  • Чтение, программирование и верификация flash ($DC00–$FBFF, 8 КБ) и векторов прерываний ($FFF0–$FFFF). При ошибке верификации выводится окно с адресом.
  • Полное стирание flash (после подтверждения).
  • Чтение и запись RAM ($0040–$013F).
  • Загрузка прошивки из файла Motorola S‑record (*.s19, *.sx): записи раскладываются по буферам flash, векторов и RAM, контрольные суммы проверяются.
  • Просмотр буферов RAM, flash и векторов в hex‑виде.
  • Проверка связи миганием светодиодов на выводах PTD0 и PTD1 целевой платы.
  • Сброс микроконтроллера линией DTR.

Как это работает

Если при выходе из сброса на вывод ~IRQ подано повышенное напряжение, микроконтроллер запускает не прошивку, а ROM‑монитор. Адаптер держит это напряжение на ~IRQ постоянно, а сбросом управляет программа через линию DTR.

Монитор общается с компьютером по одному проводу (линия DAT) на скорости 9600 бод, 8N1. Адаптер сводит на эту линию и передатчик, и приёмник COM‑порта, поэтому каждый отправленный байт возвращается дважды: сначала «аппаратное» эхо с самой линии, затем эхо монитора. Программа проверяет оба.

Сразу после сброса программа передаёт 8 байт кода защиты. Монитор сравнивает их с байтами $FFF6–$FFFD во flash. Если они совпали, доступ к flash открыт и бит 6 байта по адресу $0040 установлен — по нему программа и включает индикатор.

Команды монитора, которыми пользуется программа:

Код Команда
$4A READ — прочитать байт по адресу
$49 WRITE — записать байт по адресу
$1A IREAD — прочитать два следующих байта
$19 IWRITE — записать следующий байт
$0C READSP — прочитать указатель стека
$28 RUN — выйти из монитора и выполнить программу

Монитор умеет только читать и писать память, поэтому flash программируется подпрограммами, зашитыми в ПЗУ микроконтроллера. Программа снимает защиту flash (FLBPR = $FF), записывает частоту шины в переменную CPUSPD и для каждого блока в 64 байта:

  1. загружает данные блока в буфер RAM $004C–$008B, а адрес его последнего байта — в переменную LADDR;
  2. кладёт в RAM по адресу $0040 заглушку из трёх команд: LDHX #адрес, JSR $FC09, SWI;
  3. заменяет в кадре стека монитора адрес возврата на $0040 и подаёт команду RUN. Заглушка вызывает подпрограмму записи из ПЗУ, а SWI возвращает управление монитору.

Блоки, целиком состоящие из $FF, пропускаются. Верификация устроена так же, но вызывает $FC03, а затем читает из стека регистр CCR: сброшенный флаг C означает расхождение. Полное стирание — вызов $FC06 с битом 6 в переменной CTRLBYT.

Карта памяти MC68HC908JB8 (как в src/serialio.h):

Область Адреса
RAM $0040–$013F
Заглушка, которую запускает программа с $0040
Переменные подпрограмм ПЗУ CTRLBYT, CPUSPD, LADDR $0048, $0049, $004A–$004B
Буфер данных подпрограмм ПЗУ $004C–$008B
Flash $DC00–$FBFF
ПЗУ монитора $FC00–$FDFF, $FE10–$FFDF
Регистры flash FLCR, FLBPR $FE08, $FE09
Векторы прерываний $FFF0–$FFFF

Адаптер

Принципиальная схема адаптера

Уровни RS‑232 преобразует MAX232 (IC1).

  • DAT. Линия подтянута к VCC резистором R4. Сигнал TXD проходит через приёмник MAX232 и диод D1, который может только прижать DAT к нулю, поэтому линию по очереди используют и компьютер, и микроконтроллер. Состояние DAT через передатчик MAX232 попадает на RXD — отсюда «аппаратное» эхо.
  • ~RST. Сигнал DTR через приёмник MAX232 подаётся на ~RST (подтяжка — R3): пока DTR включена, микроконтроллер в сбросе.
  • ~IRQ. Повышенное напряжение для входа в монитор берётся с вывода V+ MAX232 через резистор R2. Стабилитрон D2 ограничивает его, конденсатор C7 сглаживает.
  • Питание. +7 В с контакта 5 разъёма PC через предохранитель F1 и стабилизатор 7805 (IC2) превращаются в +5 В (VCC). VCC выведено и на контакт 2 разъёма ICD. Зелёный светодиод LED1 показывает наличие питания.

Разъёмы (5 контактов):

Контакт ICD (к микроконтроллеру) PC (к COM‑порту)
1 GND GND
2 VCC (+5 В) RXD
3 ~IRQ TXD
4 ~RST DTR
5 DAT +7 В

Детали: MAX232, стабилизатор 7805L, предохранитель F1, зелёный светодиод, резисторы 220 Ом (R1), 2 кОм (R2), 10 кОм (R3, R4), конденсаторы 1 мкФ (C1–C5, C7), 10 мкФ (C6), 100 нФ (C8), диод D1, стабилитрон D2.

Плата односторонняя:

Разводка платы
Разводка
Сторона компонентов
Сторона компонентов с маркировкой

Изготовление платы

Рисунок дорожек на меди
1. Рисунок дорожек на меди перед травлением
Плата после травления
2. После травления
Плата после лужения
3. После лужения
Сторона пайки
4. Сторона пайки после монтажа

Программа

В окне программы — hex‑просмотр трёх буферов (RAM, flash и векторы), индикатор прогресса и кнопки. В надписях интерфейса flash называется «EEPROM».

Кнопка Действие
Enter Monitor mode открыть порт, передать код защиты, показать результат на индикаторе Security check
Read EEPROM прочитать flash и векторы в буферы
Prog EEPROM записать в flash буферы flash и векторов
Verify EEPROM сверить flash и векторы с буферами
Erase EEPROM стереть всю flash
Read from RAM прочитать RAM в буфер
Write to RAM записать буфер в RAM
Load from S19 загрузить файл S‑record в буферы
Save to S19 не реализовано
LED Flash Test семь раз мигнуть светодиодами на PTD0 и PTD1
Reset microcontroller сбросить микроконтроллер линией DTR

Обычный порядок прошивки: Enter Monitor mode → Load from S19 → Erase EEPROM → Prog EEPROM → Verify EEPROM.

Ход работы и ошибки программа пишет в консоль (qDebug), поэтому её удобно запускать из терминала.

Настройка

Параметров командной строки нет, всё задаётся в исходниках:

Что Где По умолчанию
Последовательный порт src/hc08progwidget.cpp, buttonEnterMonitor_clicked() /dev/ttyS0
Код защиты там же, securityBytes FF FF FF FF DF D6 FF FF
Модель микроконтроллера src/serialio.h, #define JB8 / JB12 / JB16 JB8
Скорость порта src/serialio.h, SPEED 9600 бод для JB8, 19200 для JB12 и JB16
Частота шины (для CPUSPD) src/serialio.h, BUS_SPEED 3 МГц для JB8 (кварц 6 МГц), 6 МГц для JB12 и JB16 (кварц 12 МГц)

Код защиты должен совпадать с байтами $FFF6–$FFFD прошивки, которая сейчас записана в микроконтроллер. В исходниках стоит код прошивки «usbgadget» автора (рядом в комментарии — код «usbgadget2»). У стёртого микроконтроллера все восемь байт равны $FF.

Для JB12 и JB16 в src/serialio.h заданы свои адреса RAM, flash, векторов и переменных подпрограмм ПЗУ.

Сборка

Нужны g++, make, Qt 3 и kdelibs 3 (KDE 3.5) с заголовочными файлами. В современных дистрибутивах KDE 3 нет, поэтому собирать проще в виртуальной машине или контейнере со старым дистрибутивом, где есть KDE 3.5.

Файлы, которые генерирует autotools (configure, Makefile.in и другие), уже лежат в репозитории:

./configure
make
sudo make install

Пересоздать их командой make -f Makefile.cvs можно только autotools тех лет: admin/cvs.sh принимает autoconf 2.5x–2.6x и automake 1.6–1.10.

Проект разрабатывался в KDevelop 3, его файл — hc08prog.kdevelop.

Пользователю нужны права на чтение и запись порта. Обычно достаточно добавить его в группу dialout и перелогиниться:

sudo usermod -aG dialout "$USER"

Ограничения

  • Порт, код защиты и модель микроконтроллера задаются только в исходниках. Поле «Security Code» в окне пока ни на что не влияет.
  • Сохранение в S19 («Save to S19») не реализовано.
  • Из файлов S‑record берутся только записи S1 (16‑битные адреса).
  • Ошибки видны в основном только в консоли.
  • Программа рассчитана на Linux (termios) и KDE 3.

Исходники

Файл Назначение
src/main.cpp main(): сведения о программе, запуск приложения KDE
src/hc08prog.h, src/hc08prog.cpp главное окно (KMainWindow)
src/hc08progwidgetbase.ui форма окна (Qt Designer)
src/hc08progwidget.h, src/hc08progwidget.cpp обработчики кнопок; буферы RAM, flash и векторов; раскладка S‑записей по буферам
src/serialio.h, src/serialio.cpp порт (termios), команды монитора, чтение и запись RAM, программирование, верификация и стирание flash; карты памяти JB8, JB12, JB16
src/srecord.h, src/srecord.cpp чтение файлов Motorola S‑record (S0, S1, S9) с проверкой контрольных сумм
src/qhexview.h, src/qhexview.cpp виджет hex‑просмотра на QGridView
src/hc08progui.rc, src/hc08prog.desktop, src/hi*-app-hc08prog.png меню, ярлык и значки для KDE
admin/, configure.in.in, Makefile.am, Makefile.cvs система сборки KDE 3 (autotools)
hc08prog.kdevelop проект KDevelop 3
photos/ схема, разводка и фотографии платы адаптера

Лицензия

GNU General Public License версии 2 или (на ваш выбор) любой более поздней, см. COPYING.

© 2007–2009 Oleg Khudyakov (Олег Худяков), prcoder@gmail.com

About

Программатор MC68HC908JB8 через ROM-монитор под Linux (KDE3) и адаптер на MAX232 (2007–2009)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages