Некоторое время назад я анонсировал выпуск нашего простого USB программатора для платы Марсоход. Была даже опубликована его фотография (смотрите в предыдущих постах).
Действительно, необходимость в простом программаторе назрела уже давно. Родные программаторы компании Альтера или совместимые с ними Terasic довольно дороги. Обычно мы рекомендуем делать программатор ByteBlaster, но ему нужен параллельный порт, который в современных компьютерах часто отсутствует. Собственно поэтому мы и решили сделать свой программатор.
Главное требование - он должен быть простым и дешевым. Совместимости с драйверами компании Альтера нет. Мы решили, что на первом этапе сделаем свою программу-утилиту для программирования, а уже на втором этапе сделаем драйвера для интеграции нашего программатора в среду Altera Quartus II. Первый этап мы уже почти прошли. Мы можем программировать нашу плату Марсоход через наш программатор с помощью нашей программы.
Итак, вот схема нашего программатора:
Так же, ее можно скачать в виде 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.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 распознавала наш программатор как родной. Это не очень просто, но я думаю вполне возможно.
Подробнее...