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

Итак, на макетке с ft232h за 300 рублей, пятью проводами и фпга за 2к рублей +, получил отличный и быстрый программатор.
Может какая команда SVF файла не правильно отрабатывается? Нужно под отладчиком пройти программу.
И ничего если я код портирую на си шарп и гуи прикручу?
Честно говоря давно Xilinx не пробовал загружать. Когда-то это работало: marsohod.org/.../171-mbftdiv10
Теперь возник другой вопрос. Программа пишет, что все успешно. Но прошивка вроде не встаёт.
Поддерживается ли svf от xilinx? Применительно к spartan6?
Вы сперва запустите cmd.exe - консоль командной строки, а потом уже в ней запускайте mbftdi.exe - тогда хотя бы будет видно какие сообщения программа выдает.
С чем связана такая тормознутость программатора mbftdi2, и можно ли повысить скорость прошивки??
Прошивал из Quartus 8. Проект для микросхемы EP1C6Q240C8N. Windows XP. Quartus определяет программатор как MBFTDI-Blaster v1.5b (32).
Еще, прошивка конфигурационно й памяти EPC2LC20 (program+verify)
программатор mbftdi2 – 23сек.
программатор китай 1мин 51сек. С чем связана такая разница по времени прошивки?
К сожалению у нас нет такой микросхемы, чтобы проверить..
А поддерживаются svf fpga семейства Arria2?
mih@mihbook:~/f tdi$ make
make: *** Нет правила для сборки цели `../common/mbla stercore.c', требуемой для `mbftdi'. Останов.
Пути на драйвер прописал. Как дальше жить? (:
пустил между TCK и TDO землю все заработало как часы, осцил "слабенький" в хозяйстве, наводки не показывал.
сопротивление выходного буфера.
Они , возможно, нужны, если программатор отсоединить,
и то, чисто гипотетически.
почитал DS на MAX2, в нем рекомендовано CLK подтягивать к земле 1k . . .
спасибо
да нее, с питанием все норм. смотрел осцилом во время попыток прошивки
на отладочной платке, ниже ссылка на схему, на каждый пин питания емкость по 0,1uF установлена плюс основная после LDO, на тестовой только для прошивки в принципе можно без емкостей, работает только TAP контроллер . . .
s11.postimg.org/.../...
чип новый
питание и земля от программатора
ошибки аналогичные
уже и на знаю куда копать :sigh:
чипы мертвыми быть не могут, брал в терреэлектроник е, паяльник антистатический , второй чип паял в антистатич. браслете . . .
Может.
проводочки 20см, частоту изначально уменьшил до 180kHz, данный пункт тоже исключается
спасибо
за тему про JTAG Chain Debugger спасибо, а то уже было начал курить хелп квартуса по данному пункуту, с инглишем туго правда
будем дебажить . . .
Дебужить не пробовали? - marsohod.org/.../...
чип EPM240T100C5N
тактовую уменьшил
Frequency is set to 1.8MHz (FTDI clk divider 0010), requred 1.8MHz
консоль выдает теже данные, ну только за изменением указанной строки
проводки есть
прозвонил все важные пины неоднократно, 3 день танцы
JTAG прозвонил между пинами чипов, FTDI и EMP240
питание/земля на положенных пинах EMP240 присутствует
осцилом проверил, сигналы на пины плис приходят, но TDO молчит, я так понимаю плис не отвечает? отличие от вашей платы, притянул к питанию JTAG плис 5k
вот схемки программатора и отладки
postimg.org/image/lajyxn5zv/
postimg.org/image/xe2w3vua1/
скорей всего где то ошибка, но сам не вижу "глаз замылился" за 3 дня
Какой чип вы программируете, есть ли проводки между программатором и чипом?
Попробуйте уменьшить тактовую частоту (в *.svf файле)
Поставьте вместо 15, например, 1.5
спасибо
mbftdi v1.4 - 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...
Device: Dual RS232-HS A
Serial: A
Hi-speed device (FT232H, FT2232H or FT4232H) detected
Configuring port for MPSSE use...
Frequency is set to 15MHz (FTDI clk divider 0001), requred 18MHz
-----------------------------------
!CHECKING SILICON ID
compare TDO failed at 0
Expect buffer:
32 04 80 A2 54 00 82 94 00 2C 18 00 00 00 00
Compare buffer:
FE FF FF FE FF FF FE FF FF FE FF FF FE FF FF
Mask buffer:
FF FE 80 FF FE 80 FF FE 80 FF FE 80 FF FE 80
error on check TDO answer
Драйвер уже есть, платку переразвели, через неделю-две будет новый программатор с поддержкой "PS" и"AS" режимов.
Пока не работает с программной стороны или сам FTDI не поддерживает связь с микросхемами конфигурации? Нужно ли будет менять схему прграмматора?
Active Serial пока не работает.
Надеюсь скоро будет
пробовалась Mega32 и Altera(EPM3064ATC44)
прошились без проблем
железо FT2232HL
interface: flossjtag-noeeprom
target :adapter_khz 4500
но вот пытаюсь залить прошивку в xc3s50an с помощью mbftdi.exe, и он сразу выдает вот такой еррор:
//Loading device with 'idcode' instruction.
error SIR parameters
вот кусок
//Loading device with 'idcode' instruction.
SIR 6 TDI (09) SMASK (3f) ;
SDR 32 TDI (00000000) SMASK (ffffffff) TDO (f2610093) MASK (0fffffff) ;
TIR 0 ;
HIR 0 ;
TDR 0 ;
HDR 0 ;
TIR 0 ;
HIR 0 ;
HDR 0 ;
TDR 0 ;
это нормально?
вы на каком то сайте размещали статью о программаторе, где написали, что вам удалось прошить им FPGA от Xilinx вроде бы серии virtex 5.
Начал прошивать первый проект выдало ошибку на ~75%.
Очистил без проблем.
И прошил по очереди UFM затем CFM - заработало.
Подскажите в какой последовательно сти правильно прошивать?
Сначала конфигурационну ю память (CFM) или пользовательску ю (UFM). И нужно-ли каждый раз перед прошивкой нового проекта делать очистку памяти (Erase)?
Спасибо.
Вы, для начала, сделайте короткий - marsohod.org/.../programmer
чтобы убедится , что у вас все заботает.
Затем уже можно пробовать подлиннее. Я думаю, что
1м многовато, возможно прийдется заморачиваться с согласованием. :-|
Подскажите пожалуйста допустимую длину проводов для кабеля от LPT до JTAG-разъема.
Насколько мне известно в данном случае: чем короче - тем лучше.
А вы что скажете ? 1м это не много ?
Спасибо.
Попробуйте версию v1.3 - если не поможет опишите подробнее что происходит
$ fpga_flash cyclone3.svf
Error: Module ftdi_sio is not currently loaded
mbftdi v1.2 - execute 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...
Device: Dual RS232-HS A
Serial:
Hi-speed device (FT232H, FT2232H or FT4232H) detected
Configuring port for MPSSE use...
Frequency is set to 15MHz (FTDI clk divider 0001), requred 25MHz
Что делать? Хочется шить под линуксом.
насколько я помню эти образы прошивки должны как-то мигать светодиодами
Большое спасибо :roll:
вот здесь разводка для P-CAD v8.5 marsohod.org/.../...
если у кого-то есть пришлите на мыло:Alias-06
Полдня хардварного дебагинга с осцилографом и тестером - это жестоко!
Такие вещи надо на главной странице объявлять.
Кстати кто знает как в Квартусе настроить частоту для svf файла? По умолчанию ставится 18 МГц - реально мой программатор смог только 2 МГц.
Как результат - FT2232D(L) работает с версией mbftdi v1.2 - проверено!
Можно попробовать более свежую версию - marsohod.org/11-blog/186-ver12
Но она проверялась с чипом "D" , на счет "L" у нас информации нет.
Куда копать-то?
user@user-u10:~/Quartus_projects$ ./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
Что делать-то?
Нужно делать так:
а) распаковываем архив с исходниками (качаем и распаковываем драйвера ftd2xx если забыли);
б) идем в папку /mBlasterFtdi/l inux и правим Makefile на предмет путей к драйверам ftd2XX (не забываем правильно указать версию для систем х64 если нужно)
в) запускаем консоль и идем в папку /mBlasterFtdi/l inux
г) выполняем следующие команды:
1)> make clean
2)> make all
Если просто написать "make" - не скомпилируется т.к. в архиве уже лежит собранный исполняемый файл mbftd.
ЗЫ. Собралось все вроде нормально, но пока не запускал - программатор еще паяется (кстати собран на FT2232L).
та же ситуация, но пару раз написала, что прошила.
"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)".
Чтобы раз и навсегда. И в "почти пустом проекте" надо бы поставить галку соответствующую .
Спасибо!!! Что делитесь опытом и знаниями.
В коде разобрался, одно не понятно ОТКУДА такие Instruction Code в файле .SVF
SIR 10 TDI (002);
SIR 10 TDI (004);
SIR 10 TDI (003);
В доках на Alter-у ничего подобного нет!
На самом деле причин может быть много, и чтобы разобраться, нужно
больше информации. Насколько я понимаю, у вас свой программатор,
поэтому, если можно, пришлите на наш адрес (info
более подробное описание экспериментов, в общем, все что сможете.
Очень постараемся помочь.
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
Такие дела...
В чем может быть дело?
Эл. почта: elaxcc
С удовольствием помогу в решении проблемы.
Давайте я сделаю спец версию программы для mbftdi чтоб выводила побольше дебаг сообщений. Тогда появится возможность хоть что-то сказать конкретное. Я думаю проблема может быть даже и в программе, если SVF файл интерпретируетс я не совсем корректно. PS: К сожалению в округе мы не можем найти таких микросхем. А на заказ их только партиями, что нам не очень интересно...
Еще - пришлите ваш эл. адрес. Так будет проще помогать.
Может ктонить знает проблему в сложившейся ситуации и подскажет решение?!
Когда я прошивал микросхему, о чем писал ниже по коментариям про EPM7128SLC84-15 , то на ПЛИС подавал своё напряжение +5 вольт. Согласование уровней между FTDI и плис не делал.
На счет разьема jtag - напряжение с 4 ноги не использовал, хотя на моей схеме, где ПЛИС, туда есть возможность подключиться установив джампер.
Файл отправил.
Ответы: 1) не понял вопроса: если про программатора, то куплен у вас, если про плату в которой стоит ПЛИС - своя. 2) действительно глупый вопрос. 3) Эту же плату с этой же ПЛИС (MAX7000S) прошивал через ByteBlaster - без проблем.
Этот программатор ПЛИС MAX2 прошивает нормально.
info
Еще несколько вопросов. 1) Вы используете покупной девелопер кит или делаете свою плату? Могут ли быть проблемы платы? 2) подаете питание на свою плату (извините за глупый вопрос)? 3) пробовали ли шить другие микросхемы?
В первой (которая V0.5) пишет:
-----------------------------------
!CHECKING SILICON ID
Unexpected number of bits for SDR (64)
Во второй (которая V1.0) как писал.
Куда файл выслать?
Скажите, а какую версию программы вы используете? В разделе для скачивания сейчас их две. Та что версия 1.0 новее и по идее лучше.
Еще - пришлите пожалуйста Ваш SVF файл
Пробовал прошивать этим программатором EPM7128SLC84-15 не получилось.
Пишет:
-----------------------------------
!CHECKING SILICON ID
error on check answer
-----------------------------------
!BULK ERASE
error processing RUNTEST
error processing RUNTEST
-----------------------------------
!PROGRAM
error processing RUNTEST
error processing RUNTEST
и т.д.
это если Вы захотите поменять для устройства VendorId или DeviceId, тогда нужна эта микросхема и ее нужно прошивать
Для работы нашей программки этот чип не нужен.
Но поскольку наш программатор является частью
нашего конструктора, то на платке мы его развели - может
кому/когда понадобится.
скорее всего можно
я уверен, что на ebay можно купить много интересных и дешевых устройств. Если думать только о цене, то тогда лучше вообще ничего не делать. В великом Китае все равно сделают дешевле. Наша цель шире - показать, рассказать, заинтересовать, обменяться идеями и опытом..
Судя по даташиту и вот-этой табличке www.ftdichip.com/.../ICs.htm
можно. но мы не пробовали.
Вот только схема у вас это мрак полный. Ну хрен с ними с гостами, но равняться на ардуинщиков и рисовать схемы-дебилки "от ножке к ножке"... Ладно была бы шняга на какой нибудь тини или 555, где ножек всего ничего, а FT2232 с ее 64мя выводами.. Это же совсем за гранью добра и зла.
Сижу вот считаю ножки на картинке...
Ещё бы, действительно, драйвер под квартус (да еще линуксовый бы, да чтобы всё, включая signal tap), и будет одна и та же платка для работы с Altera, ARM и AVR.
подходят микросхемы с встроенным MPSSE.
У микросхемы ft232h он есть, а вот у более старой ft232r нет.
Более подробно о внутренних возможностях микросхем FTDI можно посмотреть на сводной таблице www.ftdichip.com/.../ICs.htm