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

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

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

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

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

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

Так же, ее можно скачать в виде PDF файла:

Программатор собран на микросхеме 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.

Естественно, исходные тексты программы-утилиты программатора можно взять на нашем сайте:

Мы сделали специальный раздел, где будут храниться все версии утилиты. Программа написана так, что ее можно использовать и с ОС 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 распознавала наш программатор как родной. Это не очень просто, но я думаю вполне возможно.

 

Добавить комментарий