четверг, 11 ноября 2010 г.

Улучшаем прошивку jtagicemk2klon программатора usbprog

Все началось с потребности запрограммировать микроконтроллер AT90CAN32, но так получилось что электронщики развели плату без SPI разъема. Был только JTAG. Т.к. до этого у нас был программатор для SPI, да еще и работающий через LPT, то программировать JTAG было нечем.

После недолгих поисков был найден usbprog (http://www.embedded-projects.net/index.php?page_id=135).

Отличная поделка, которая может эмулировать кучу всяких разных программаторов, в зависимости от прошивки.

Итак, наши электронщики испекли плату по схемам с сайта usbprog, сделали мне шлейфик и я довольный побежал вливать душу в программатор. В качестве души была выбрана прошивка "jtagicemk2klon".

Для прошивки программатора, в первый раз я пользовался программкой usbprog-gui, которая сама откуда то выкачала выбранную прошивку и загрузила ее в программатор.

Ура, появилось моргание лампочек :)

Перевтыкаем программатор в usb-удлинитель, и dmesg радостно сообщает что это "JTAGICE mkII":


[262627.588038] usb 2-2: new full speed USB device using uhci_hcd and address 9
[262627.763126] usb 2-2: New USB device found, idVendor=03eb, idProduct=2103
[262627.763131] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[262627.763134] usb 2-2: Product: JTAGICE mkII
[262627.763137] usb 2-2: Manufacturer: ATMEL
[262627.763139] usb 2-2: SerialNumber: A000000D3F
[262627.763250] usb 2-2: configuration #1 chosen from 1 choice

Потом началась канитель с неправильно сделанным шлейфиком (от программатора к моему устройству). Но наконец-то! Шлейф сделан правильно и сейчас вот-вот побегут первые байтики в flash-память микроконтроллера.

Да, забыл сказать что программирую обычно все avr-железки я софтинкой avrdude, которая есть в моем любимом Debian.

Итак, для проверки подписи устройства, да и работоспособности программатора в целом запускаем команду: avrdude -c jtag2 -P usb -pc64


Ура, программатор работает, однако, как выяснилось при программировании железки программатор не умеет корректно отвечать на некоторые запросы программки "avrdude", или вообще не поддерживает некоторые команды.

Так же программатор неправильно программировал fuse. Ну и в завершении на программирование микроконтроллера уходило порядка 3х минут, что ну очень как долго, когда ты только разрабатываешь прошивку и постоянно находишь ошибки :)

Было принято решение скачать прошивку "usbprog" и немного "допилить" ее.

Выкачиваем исходники:
svn checkout svn://svn.berlios.de/usbprog/trunk


Итак, прошивка допилена. Вот некоторые изменения:

  • Поддержка команд avrdude, правильные ответы на эти команды
  • Программирование fuse-бит в соответствии с спецификациями JTAG
  • "Разгон" программатора с 3х минут до 18 секунд на микроконтроллере AT90CAN64 (немного оптимизаций, работы напильником и все OK ;)
  • Поддержка JTAG-цепочек (JTAG-chains). Цепочки необходимы когда твое устройство стоит не первым после разъема куда ты подключаешь программатор, а 5м или 10м. Чтобы до него достучаться (запрограммировать и т.д.) в JTAG есть понятие jtag-chains. Что такое цепочки можно посмотреть тут: http://www.xjtag.com/sup-kb-Q3.php

После этого я пытался как нибудь связаться с авторами, но у них не работает регистрация на форуме (чтобы запостить сообщение) а официальных имэйлов не нашел.

Решил выложить патчи сюда, авось пригодиться кому-нибудь :-) Вот ссылки:
https://github.com/snufrick/usbprog/

Ну и собственно на прошивку jtagicemk2klon:
https://github.com/snufrick/usbprog/tree/master/jtagicemk2klon/