Программатор USB

E-mail Печать PDF

Некоторое время назад я анонсировал выпуск нашего простого USB программатора для платы Марсоход. Была даже опубликована его фотография (смотрите в предыдущих постах).

Действительно, необходимость в простом программаторе назрела уже давно. Родные программаторы компании Альтера или совместимые с ними Terasic довольно дороги. Обычно мы рекомендуем делать программатор ByteBlaster, но ему нужен параллельный порт, который в современных компьютерах часто отсутствует. Собственно поэтому мы и решили сделать свой программатор.

Главное требование - он должен быть простым и дешевым. Совместимости с драйверами компании Альтера нет. Мы решили, что на первом этапе сделаем свою программу-утилиту для программирования, а уже на втором этапе сделаем драйвера для интеграции нашего программатора в среду Altera Quartus II. Первый этап мы уже почти прошли. Мы можем программировать нашу плату Марсоход через наш программатор с помощью нашей программы.

Итак, вот схема нашего программатора:

Схема программатора mbftdi

Так же, ее можно скачать в виде PDF файла: icon Схема программатора mbftdi (36.07 Кбайт)

Программатор собран на микросхеме FTDI FT2232HL.
Описание на эту микросхему есть на сайте производителя: http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT2232H.pdf
Эта микросхема уже имеет встроенный высокоскоростной интерфейс USB2 и может использоваться для реализации различных методов передачи: последовательной, параллельной, SPI, I2S, JTAG.

Нас интересует встроенное в микросхему устройство MPSSE - это Dual Multi-Protocol Synchronous Serial Engine. Именно это устройство позволяет организовать передачу и прием через JTAG интерфейс, а JTAG мы уже изучали. Через JTAG идет программирование микросхемы MAX-II на плате Марсоход.

Устройство MPSSE - это такой "процессор" внутри микросхемы FT2232, который принимает разные команды, приходящие через USB интерфейс, и исполняет их. Команд у этого "процессора" много, все они описаны компанией производителем (Future Technology Devices International Ltd) в специальном документе AN_108 "Command Processor for MPSSE and MCU Host Bus Emulation Modes". 

Кроме того, на сайте FTDI даже есть короткий пример как программировать JTAG через MPSSE: AN_129 "FTDI Hi Speed USB To JTAG Example".

Эти два документа стали нашими отправными точками для написания своей программы-утилиты для программирования ПЛИС платы Марсоход через микросхему FT2232.

Естественно, исходные тексты программы-утилиты программатора можно взять на нашем сайте: icon Программа для USB-JTAG программатора mbftdi (206.06 Кбайт)

Мы сделали специальный раздел, где будут храниться все версии утилиты. Программа написана так, что ее можно использовать и с ОС Windows и с ОС Linux.

Программа-утилита принимает в командной строке имя SVF файла и исполняет его от начала до конца (как SVF Player) и, таким образом, зашивает подключенную к программатору микросхему ПЛИС. SVF файл - это файл, содержащий всю последовательность команд интерфейса JTAG, необходимую для прошивки микросхемы. Среда проектирования Altera Quartus II может создавать SVF файлы в процессе компиляции ваших проектов ПЛИС.

Для использования программатора в Windows нужно:

  • Подключить программатор к ПК кабелем USB.
  • Установить драйвера FTDI (их взять с сайта http://www.ftdichip.com/Drivers/D2XX.htm)
  • Убедиться, что драйвера установлены и в диспетчере устройств появились два последовательных порта:

mbftdi видимый из диспетчера устройств Windows

  • Запустить программу mbftdi.exe с параметром в командной строке - имя SVF файла. 
  • Через несколько секунд чип прошит!

Если вы хотите сами откомпилировать программу программатора, то вам потребуется среда программирования Microsoft Visual Studio 2010. Программа написана на C/C++.

Использование программатора в Linux так же возможно, однако требует предварительной компиляции программы. Для этого сделайте следующее:

  • Выкачайте драйвера для Linux (http://www.ftdichip.com/Drivers/D2XX.htm
  • Распакуйте их в какой нибудь папке, например, в своем домашнем каталоге.
  • Возьмите наши исходники и тоже распакуйте где-то рядом.
  • В папке mBlasterFtdi\linux отредактируйте Makefile. Вам нужно правильно указать пути LIBPATH и INCPATH.  У меня  они вот такие:

LIBPATH = /home/nick/myftdi/libftd2xx1.0.4/build/i386

INCPATH = /home/nick/myftdi/libftd2xx1.0.4

Они должны указывать внутрь папки драйверов FTDI для Linux.

  • Компилируйте исходники, набрав в терминале команду make (возможно вам понадобится дополнительная установка gcc или еще чего-то)
  • Подключайте программатор к компьютеру и запускайте программу mbftdi с параметром в командной строке - имя SVF файла
  • Если программатор не запускается (пишет об ошибке), то скорее всего вам нужно выгрузить из ядра Linux драйвер ftdi_sio. Выполните как пользователь root в терминале команду "rmmod ftdi_sio" и тогда запускайте mbftdi. Это не моя прихоть. Так написано в readme.dat файле в комплекте с драйверами FTDI для Linux.

Поскольку исходные тексты программы и для Windows и для Linux фактически одинаковы, то в консоли Windows и в терминале Linux вы увидите примерно одинаковый вывод:


C:\Altera\marsohod\mBlasterFtdi\windows\Release>mbftdi.exe ..\..\common\test1.svf
mbftdi - burn MAX2 CPLD from Altera Vector Programming File *.svf
FTDI port to JTAG is used for programming
Usage example: mbftdi myfile.svf

Checking for FTDI devices...
2 FTDI devices found - the count includes individual ports on a single chip
Assume first device has the MPSSE and open it...
Configuring port for MPSSE use...
-----------------------------------
!CHECKING SILICON ID
-----------------------------------
!BULK ERASE
-----------------------------------
!PROGRAM
-----------------------------------
!VERIFY

JTAG program executed successfully.


Вот пока все.
Программатор и программа позволяют успешно за 3-4 секунды программировать микросхемы ПЛИС серии MAX-II через JTAG и может успешно применяться для программирования платы Марсоход.

Известная проблема у программы одна - не все SVF файлы она может исполнять. Пока программа слишком примитивно интерпретирует строки SVF файлов. Сейчас наша программа предполагает, что одна строка SVF файла - это фактически одна команда для записи SIR или SDR регистра интерфейса JTAG. Однако, в некоторых SVF файлах, в частности для FPGA Cyclone разных серий, это не так. Файл SVF может содержать очень длинные многострочные команды для записи в регистр SDR.

Это значит, что пока не все типы микросхем мы можем программировать. Я думаю, мы это скоро починим.

Кроме этого, мы планируем следующия этап - написание драйверов к нашему программатору, чтобы среда Altera Quartus II распознавала наш программатор как родной. Это не очень просто, но я думаю вполне возможно.

 

 

Комментарии 

 
0 #37 Danil 19.04.2012 10:17
ЧТОЖ ВЫ МОЛЧАЛИ про новую версию!?!?

Полдня хардварного дебагинга с осцилографом и тестером - это жестоко!

Такие вещи надо на главной странице объявлять.

Кстати кто знает как в Квартусе настроить частоту для svf файла? По умолчанию ставится 18 МГц - реально мой программатор смог только 2 МГц.

Как результат - FT2232D(L) работает с версией mbftdi v1.2 - проверено!
Цитировать
 
 
0 #36 Ю р и й 19.04.2012 08:01
Цитирую Danil:
Причем вывод программы одинаковый и в Linux и в Windows :(

Куда копать-то?

Можно попробовать более свежую версию - http://www.marsohod.org/index.php/ourblog/11-blog/186-ver12
Но она проверялась с чипом "D" , на счет "L" у нас информации нет.
Цитировать
 
 
0 #35 Danil 19.04.2012 06:01
Причем вывод программы одинаковый и в Linux и в Windows :(

Куда копать-то?
Цитировать
 
 
0 #34 Danil 19.04.2012 05:41
Собрал программатор, скомпилировал простой проект и никак :(


user@user-u10:~/Quartus_project s$ ./mbftdi ./MAXII_devboard/devboard.svf
mbftdi v1.0 - burn MAX2 CPLD from Altera Vector Programming File *.svf
FTDI port to JTAG is used for programming
Usage example: >mbftdi myfile.svf

Checking for FTDI devices...
2 FTDI devices found - the count includes individual ports on a single chip
Assume first device has the MPSSE and open it...
Configuring port for MPSSE use...
Frequency is set to 1.500000e+07Hz (FTDI clk divider 0001), requred 1.800000e+07Hz
-----------------------------------
!CHECKING SILICON ID
oops.. expect 15 bytes read but got 51
error on check TDO answer

Что делать-то?
Цитировать
 
 
0 #33 Danil 19.04.2012 04:38
Исправьте инструкцию для компиляции под Linux.
Нужно делать так:
а) распаковываем архив с исходниками (качаем и распаковываем драйвера ftd2xx если забыли);
б) идем в папку /mBlasterFtdi/linux и правим Makefile на предмет путей к драйверам ftd2XX (не забываем правильно указать версию для систем х64 если нужно)
в) запускаем консоль и идем в папку /mBlasterFtdi/linux
г) выполняем следующие команды:
1)> make clean
2)> make all

Если просто написать "make" - не скомпилируется т.к. в архиве уже лежит собранный исполняемый файл mbftd.

ЗЫ. Собралось все вроде нормально, но пока не запускал - программатор еще паяется (кстати собран на FT2232L).
Цитировать
 
 
0 #32 Иван 06.04.2012 01:44
А может кто-то нарисовать схему для FT2232D? :roll:
Цитировать
 
 
+1 #31 Stu 11.01.2012 13:01
Цитирую dcoder:
C:\>d:\marsohod\mbf tdi.exe d:\marsohod\tes t\test1.svf
mbftdi - burn MAX2 CPLD from Altera Vector Programming File *.svf
FTDI port to JTAG is used for programming
Usage example: mbftdi myfile.svf

Checking for FTDI devices...
2 FTDI devices found - the count includes individual ports on a single chip
Assume first device has the MPSSE and open it...
Configuring port for MPSSE use...
-----------------------------------
!CHECKING SILICON ID
oops.. expect 15 bytes read but got 51
error on check TDO answer

Такие дела...
В чем может быть дело?

та же ситуация, но пару раз написала, что прошила.
Цитировать
 
 
+1 #30 lesha birukov 09.01.2012 13:35
имхо следует здесь описать, или хотя бы дать ссылку на описание создания svf в Quartus-е, причем через
"Programming Files page of the Device and Pin Options dialog box", а не через
"Open programmer -> Create/Update > Create Jam, JBC, SVF, or ISC File command (File menu)".
Чтобы раз и навсегда. И в "почти пустом проекте" надо бы поставить галку соответствующую .
Цитировать
 
 
0 #29 lexaInz 12.12.2011 10:53
Решил попробовать Вашу прогу v1 (у меня есть платка с FT2232H и Cyclone III ) прошилась без проблем.
Спасибо!!! Что делитесь опытом и знаниями.
В коде разобрался, одно не понятно ОТКУДА такие Instruction Code в файле .SVF
SIR 10 TDI (002);
SIR 10 TDI (004);
SIR 10 TDI (003);
В доках на Alter-у ничего подобного нет!
Цитировать
 
 
0 #28 TheBits 27.11.2011 07:55
На схеме программатора красный и синий светодиоды нужно поменять местами. На самом программаторе они стоят в другом порядке.
Цитировать
 

GitHub YouTube Twitter

Подписка RSS

marsohod.org - лента

Последние комментарии: