Загрузка FPGA платы Марсоход2RPI из Raspberry Pi3 с помощью OpenOCD

openocd

OpenOCD ( http://openocd.org/ ) - это программа On-Chip Debugger. Позволяет вести отладку микроконтроллеров и микропроцессоров, программировать микросхемы флеш памяти, загружать ПЛИС. Поддерживает множество аппаратных программаторов и интерфейсов: STLink, Altera UsbBlaster, J-Link, SWD, OpenJTAG, FTDI.. Поддерживает большое число различных плат, кстати, даже и платы Марсоход/ Марсоход2/ Марсоход3!

Сейчас я расскажу, как можно загрузить ПЛИС платы Марсоход2RPI из микрокомпьютера Raspberry Pi3 с помощью OpenOCD.

Итак, плата Марсоход2RPI соединена с Raspberry Pi3.

Смотрим схему нашей платы Марсоход2RPI:

По схеме платы сигналы JTAG с ПЛИС идут на разъем GPIO платы Raspberry Pi3:

  • tck -> GPIO7
  • tms -> GPIO0
  • tdi -> GPIO11
  • tdo <- GPIO1

Нам нужна программа, которая будет загружать ПЛИС управляя сигналами GPIO как сигналами JTAG. OpenOCD версии 0.10.0 умеет это делать.

В принципе, я пробовал установить OpenOCD в raspberry обычным способом:
>sudo apt-get install openocd

Он замечательно ставится, но так это не работает. На момент написания статьи распбери поставил мне openocd версии 0.8.0.
Маловато будет. Пришлось сносить эту версию и компилировать и устанавливать из исходных текстов.

Но, на самом деле - это не трудно. В терминале распбери выполняем несколько команд:

>sudo apt-get install git autoconf libtool make pkg-config libusb-1.0-0 libusb-1.0-0-dev
>git clone https://git.code.sf.net/p/openocd/code openocd-code
>cd openocd-code
>./bootstrap
>./configure --enable-sysfsgpio --enable-bcm2835gpio
>make
>sudo make install

Теперь нужно кое что поправить в конфигурационных файлах.
Добавлю скрипт m2rpi.cfg в папку /usr/share/openocd/scripts/boards

 


source [find interface/m2rpi-jtag.cfg]
adapter_khz 2000
transport select jtag
source [find fpga/altera-ep3c10.cfg]


 

И второй скрипт m2rpi-jtag.cfg в папку /usr/share/openocd/scripts/interface

 


#
# Config for using RaspberryPi's expansion header
#
# This is best used with a fast enough buffer but also
# is suitable for direct connection if the target voltage
# matches RPi's 3.3V
#
# Do not forget the GND connection, pin 6 of the expansion header.
#

 

interface sysfsgpio

# Each of the JTAG lines need a gpio number set: tck tms tdi tdo
# Header pin numbers: 23 22 19 21
sysfsgpio_jtag_nums 7 0 11 1
#11 25 10 9

# At least one of srst or trst needs to be specified
# Header pin numbers: TRST - 26, SRST - 18
sysfsgpio_trst_num 5
# sysfsgpio_srst_num 24


 

На самом деле OpenOCD сам по себе поддерживает Raspberry Pi3, но он использует другие пины для JTAG.
Именно поэтому я взял оригинальный конфигурационный файл, скопировал его себе и заменил пины "11 25 10 9" на наши "7 0 11 1", которые соответствуют плате Марсоход2RPI.

Еще, для чего-то (не знаю для чего), OpenOCD хочет иметь сигнал trst.
Я в своем конфигурационном файле взял от фонаря и назначил пятый пин: sysfsgpio_trst_num 5.

Теперь, когда конфигурационные файл есть, можно запускать сервер OpenOCD:
> sudo openocd -f board/m2rpi.cfg

Сервер запускается и далее ничего не происходит, но сервер ждет команды по сетевому подключению. Можно подключиться по сети, например, телнетом. Я использую программу Putty - она поддерживает режим telnet.

rpi oocd1

Подключаться нужно на порт 4444.

После подключения телнетом можно выполнить команду "svf" - она берет из командной строки имя файла SVF и воспроизводит его на интерфейсе JTAG.

rpi oocd2

SVF (Serial Vector File) создается при компиляции проекта ПЛИС в среде Intel Quartus Prime, но нужно в настройках проекта указать, что требуется создавать SVF. Для этого в среде Quartus выберите пункт меню Assignments => Device... Далее из диалогового окна кнопка Device and Pin Options. В следующем появившемся диалоговом окне слева выбираем Programming Files и затем справа в том же диалоге ставим галочку в чекбоксе Serial Vector Format File (*.svf). Теперь при компиляции проекта появится SVF файл.

Ну пробуем, в окне телнета запускаем команду svf и через несколько секунд видим, что проект загрузился в ПЛИС без ошибок и сама плата заработала:

rpi oocd3

Мой проект в плате Марсоход2RPI теперь мигает светодиодиками.

Вот здесь видеодемонстрация:

 

 

 

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