Jump to content

    
Sign in to follow this  
xxxmatrixxx

подключение нескольких JTAG к одной ПЛИС

Recommended Posts

Здравствуйте, уважаемые форумчане

Возникла такая задача, чтобы 2е Плис Cyclone4, которые разнесены по 2м модулям, объединить в JTAG цепочку и программировать их как с внешнего разъема, так и с микросхемы FT4232HL

к этой микросхеме будут в сумме подключены:

1. шина ADBUS - JTAG 2х ПЛИС Сyclone4

2. шина BDBUS - JTAG от STM32, переключаемый с UART от спутника

3. шина СDBUS - UART от STM32

4. шина DDBUS - UART от IMX6

схему структурную я прилагаю

вопросы следующие:

1. так как я с этой микросхемой FT4232HL не работал раньше, предполагается, что при подключении и конфигурации ее через FtProg я буду видеть 4 интерфейса на компе - 2а jtag, на которые я могу ставить свои отдельные дрова, и 2а виртуальных uart, так ли это?

2. могу ли я управлять gpioL на adbus и bdbus, когда они сконфигурированы как jtag, при этом, если я сконфигурирую порт, как uart они мне будут не доступны?

3. пробовал ли кто-нибудь объединять ПЛИС и STM32 в JTAG цепочку, какие были проблемы с таким подключением, в частности интересует вопрос с драйверами, т.к. на одном jtag висят и плис и stm32, которые требуют своих драйверов, будут ли они работать одновременно, либо хотя бы по раздельности(поставил драйвер для usb-blaster, то работаешь с Плис, поставил драйвер jlink, то работаешь с stm32?

4. так как у меня стоят и стандартные внешние разъемы для отдельной возможности программирования и Плис и Stm32, при этом сигналы Jtag у меня завязаны с FT4232HL, то не подсадит ли мне эта микросхема сигналы JTAG, если к ней со стороны Usb ничего подключено не будет, а я буду прошивать только через внешний соединитель

выкладываю структурную схему, чтобы было понятнее о чем я говорю..

спасибо, буду рад любой помощи

 

 

 

 

 

KOMPAS - JTAG_UART_BMS2.pdf

Share this post


Link to post
Share on other sites
7 часов назад, xxxmatrixxx сказал:

1. так как я с этой микросхемой FT4232HL не работал раньше, предполагается, что при подключении и конфигурации ее через FtProg я буду видеть 4 интерфейса на компе - 2а jtag, на которые я могу ставить свои отдельные дрова, и 2а виртуальных uart, так ли это?

Да, при соответствующих настройках и программировании EEPROM подключенной к FT4232 через FT_Prog.

 

7 часов назад, xxxmatrixxx сказал:

2. могу ли я управлять gpioL на adbus и bdbus, когда они сконфигурированы как jtag

Сможете. Но только из своего софта. Стандартным - маловероятно...

7 часов назад, xxxmatrixxx сказал:

если я сконфигурирую порт, как uart они мне будут не доступны?

Не доступны. Как GPIO они доступны только в режиме MPSSE. В режиме UART это DTR, DSR, DCD и RI.

 

7 часов назад, xxxmatrixxx сказал:

3. пробовал ли кто-нибудь объединять ПЛИС и STM32 в JTAG цепочку, какие были проблемы с таким подключением, в частности интересует вопрос с драйверами, т.к. на одном jtag висят и плис и stm32, которые требуют своих драйверов, будут ли они работать одновременно, либо хотя бы по раздельности(поставил драйвер для usb-blaster, то работаешь с Плис, поставил драйвер jlink, то работаешь с stm32?

STM32 в общую с ПЛИС цепочку не подключал. Только Xilinx и AVR32. В ПО Xilinx и Atmel Studio можно задать сколько JTAG устройств в цепочке до программируемой микросхемы и сколько после. Если такое в Ква и Кубе задается, то проблем быть не должно, но нужно пробовать... Но это справедливо только про общий JTAG разъем к которому подключались по очереди кабель Xilinx и Atmel. С FT оба ПО должны поддерживать работу через него. Не уверен, что такое возможно без постоянной перешивки EEPROM у FT. И еще у FT4232 два JTAG. Стандартные драйвера Xilinx (Digilent) есть только для FT2232H и они работают только с первым JTAG. Со вторым, кажется, можно заставить работать только запретив первый порт или переключив его в UART.

 

6 часов назад, xxxmatrixxx сказал:

4. так как у меня стоят и стандартные внешние разъемы для отдельной возможности программирования и Плис и Stm32, при этом сигналы Jtag у меня завязаны с FT4232HL, то не подсадит ли мне эта микросхема сигналы JTAG, если к ней со стороны Usb ничего подключено не будет, а я буду прошивать только через внешний соединитель

Если вы подключите Reset FT через делитель к VBUS USB разъема так, чтобы FT была в сбросе при отключенном кабеле, то согласно AN_184 FTDI Device Input Output Pin States выводы JTAG у FT будут в TriSt-PU. Но лучше поставить мультиплексор типа SN74LVC257A. Одна группа входов от разъема, другая от FT. Он заодно буферизиует сигналы с разъема (защитит ваши ПЛИС от статики). И еще. Сигналы TCK и TMS для каждого потребителя лучше пропустить через свой буфер с последовательным резистором для согласования. Особенно при передаче на другую плату. Управление мультиплексором можно от VBUS USB разъема, а лучше переключаться на разъем программирования при подключении программатора. У Xilinx Platform Cable USB II кабеля есть специальный сигнал, который становится нулем при обращении к JTAG и единицей в Idle режиме. Не знаю есть ли что подобное у Altera. Если нет, то можно на плате один из земляных контактов JTAG разъема подключить к PullUp и на вход управления мультиплексора. При подключенном программаторе этот сигнал заземлится через программатор и подключит разъем к JTAG цепочке, а при отключенном к FT. Вместо мультиплексора можно использовать TriState буфер.

Share this post


Link to post
Share on other sites
7 minutes ago, Zig said:

Да, при соответствующих настройках и программировании EEPROM подключенной к FT4232 через FT_Prog.

 

Сможете. Но только из своего софта. Стандартным - маловероятно...

Не доступны. Как GPIO они доступны только в режиме MPSSE. В режиме UART это DTR, DSR, DCD и RI.

 

STM32 в общую с ПЛИС цепочку не подключал. Только Xilinx и AVR32. В ПО Xilinx и Atmel Studio можно задать сколько JTAG устройств в цепочке до программируемой микросхемы и сколько после. Если такое в Ква и Кубе задается, то проблем быть не должно, но нужно пробовать... Но это справедливо только про общий JTAG разъем к которому подключались по очереди кабель Xilinx и Atmel. С FT оба ПО должны поддерживать работу через него. Не уверен, что такое возможно без постоянной перешивки EEPROM у FT. И еще у FT4232 два JTAG. Стандартные драйвера Xilinx (Digilent) есть только для FT2232H и они работают только с первым JTAG. Со вторым, кажется, можно заставить работать только запретив первый порт или переключив его в UART.

 

Если вы подключите Reset FT через делитель к VBUS USB разъема так, чтобы FT была в сбросе при отключенном кабеле, то согласно AN_184 FTDI Device Input Output Pin States выводы JTAG у FT будут в TriSt-PU. Но лучше поставить мультиплексор типа SN74LVC257A. Одна группа входов от разъема, другая от FT. Он заодно буферизиует сигналы с разъема (защитит ваши ПЛИС от статики). И еще. Сигналы TCK и TMS для каждого потребителя лучше пропустить через свой буфер с последовательным резистором для согласования. Особенно при передаче на другую плату. Управление мультиплексором можно от VBUS USB разъема, а лучше переключаться на разъем программирования при подключении программатора. У Xilinx Platform Cable USB II кабеля есть специальный сигнал, который становится нулем при обращении к JTAG и единицей в Idle режиме. Не знаю есть ли что подобное у Altera. Если нет, то можно на плате один из земляных контактов JTAG разъема подключить к PullUp и на вход управления мультиплексора. При подключенном программаторе этот сигнал заземлится через программатор и подключит разъем к JTAG цепочке, а при отключенном к FT. Вместо мультиплексора можно использовать TriState буфер.

Огромное спасибо за подробный ответ

Share this post


Link to post
Share on other sites

Bypass по JTAG неподключенного ПВИ (по вышей схеме) удобно делать как рекомендуют в FMC. Поставить буфер с TriState выходом, например SN74LVC1G126. На вход A - TDO от FPGA модуля ПВВ, выход - к входу TDO FT и TDO разъема. Управление OE к PullUp заземляемое в модуле ПВИ при подключении модуля (PRSNT_L). Тогда не нужно будет управление ADBUS_IO0.

Share this post


Link to post
Share on other sites

сейчас пришел ft4232h mini module, запустил программу FT_Prog, но я не увидел там возможность переключение портов A и В в режим MPSE(JTAG), да и конфигурацию каждого порта и его пинов в зависимости от режимов

image.thumb.png.d042bf63c3c8b49ea9c83415b61205c7.png

Как все таки возможно сконфигурировать отдельные порты FT4232 через FT_Prog, либо это невозможно?

Какие пути есть для конфигурации портов A и B в JTAG, портов C и D в UART?

 

Share this post


Link to post
Share on other sites

Driver D2XX это и есть MPSSE.

Каждый из двух MPSSE (порт A и B) может быть из программы пользователя сконфигурирован как JTAG, I2C или SPI.

Share this post


Link to post
Share on other sites
13 minutes ago, Zig said:

Driver D2XX это и есть MPSSE.

Каждый из двух MPSSE (порт A и B) может быть из программы пользователя сконфигурирован как JTAG, I2C или SPI.

после конфигурации данных портов через программу, взаимодействующую с библиотекой D2xx, на JTAG, у меня порт А и В сконфигурируются и определятся через Диспетчер устройств, как устройства, к которым я смогу подключить драйвер USB-Blaster, я правильно понимаю?

Share this post


Link to post
Share on other sites

Почти так.

В диспетчере устройств в пункте "Контроллеры последовательной универсальной шины USB" у вас так и останется четыре "USB Serial Converter A, B, C, D" (если вы какой либо из них не отключили в Windows).

В диспетчере устройств в пункте "Порты COM и LPT" порты C и D сконфигурируются как "USB Serial Port (COMnn)".

В диспетчере устройств порты A и B нигде не будут видны, но при включении у вас попросятся установиться драйвера в том числе и на них.

 

И да. После того как вы напишите свою программу по примеру https://ftdichip.com/software-examples/mpsse-projects/ftcjtag-examples/ у вас будут из этой программы доступны два JTAG.

Насчет подключения USB-Blaster я не уверен. Вроде в параллельных темах про Digilent и универсальный программатор на FT232 упоминалась поддержка Altera, но поддерживается ли FT4232 я не знаю.

 

Вот темы:

Digilent программатор Xilinx

Xilinx JTAG на базе FTDI

USB программатор на ft2232h "Digilent JTAG-HS2" для Xilinx и программатор "MBFTDI" для Altera

Share this post


Link to post
Share on other sites
On 5/31/2021 at 8:56 PM, xxxmatrixxx said:

огромное спасибо, буду читать

Здесь многое определяется тем, какие программные инструменты вы планируете использовать для работы с FPGA и STM32. Для FPGA понятно - это Quartus, а для STM32 какой тулчейн планируете использовать?

 

Quartus умеет работать через USB-Blaster, а он построен на базе FT245 (никак не FT4232). Для STM32 вариантов больше, и среди них есть подключения через канал FT232H/FT2232 (и, наверное, FT4232), но и тут нужно вначале проверить, поддерживает ли ваша среда разработки такой способ.

 

В общем, если для вас критично все вышеописанное подключать через FT4232, то не избежать написания собственного прослоечного софта (драйвер + DLL), как минимум, для подключения программы разработки FPGA (Quartus) к их JTAG. Это сложный и долгий путь. Почему-то мне кажется, что это не входит в ваши планы.

 

Чтобы избежать этих проблем, я бы вывел все JTAG-сигналы на 1 или 2 разъема (цепочка FPGA_1-FPGA_2-STM32, или цепочка FPGA_1-FPGA_2 и отдельно разъем для STM32). Чтобы подостлать соломки, можно сделать состав этих цепочек конфигурируемым и перестраиваемым (переключателями или джамперами). К этим разъемам можно будет подключать те внешние JTAG-адаптеры, с которыми умеют работать ваши программные инструменты FPGA/STM32.

 

2x UART можно подключить к FT2232 - здесь все достаточно стандартно.

 

P.S. Если все-таки очень нужно иметь JTAG-адаптер, интегрированный на плату, то придется реализовать свой USB-Blaster. Это вполне реально, т.к. алгоритм его работы полностью известен на сегодняшний день. Типовые схемы реализации такие: 1) классическая - {FT245 + CPLD(EPM3064)}; 2) микроконтроллерная - на PIC'е или AVR.

Share this post


Link to post
Share on other sites

для конфигурации порта А Ft4232 Mini Module я использовал драйвер марсохода, но долго парился с ним из-за того, что у меня установленно 2 Quartus- 18.1 и 13.1, причем последнюю установил именно 13.1, в итоге драйвер скинул в папку 18.1, а jtag server был запущен от 13.1 - поэтому не находился устройство mfbti 2.0, пока не положил в 13.1 папку этот драйвер

кстати, через этот драйвер получилось прошить Плис, сигналтаб запустить, но вот tcl console не работает, виснет при посылке 1й команды

я хотел порт B настроить и использовать для прошивки STM32F103 через JTAG с использованием JLINK под Eclipse, но пока нашел что-то ясное по описанию только для openocd

вторая проблема у меня еще в том, что мне необходимо управлять оставшимися портами ввода/вывода порта А и В, т.е. переключать их во время, например, работы драйвера марсохода mfbti 2.0 (вообще в моем случае допустимо изменять конфигурацию этих портов ввода/вывода до начала работы драйвера)

пока с конфигурацией портов ввода/вывода и реализацией драйвера для работы через JTAG(либо определения его через существующие средства) по JLINK не разобрался

 

 

Share this post


Link to post
Share on other sites

Похоже, простых путей мы не ищем....

16 hours ago, xxxmatrixxx said:

для конфигурации порта А Ft4232 Mini Module я использовал драйвер марсохода, но долго парился с ним из-за того, что у меня установленно 2 Quartus- 18.1 и 13.1, причем последнюю установил именно 13.1, в итоге драйвер скинул в папку 18.1, а jtag server был запущен от 13.1 - поэтому не находился устройство mfbti 2.0, пока не положил в 13.1 папку этот драйвер

кстати, через этот драйвер получилось прошить Плис, сигналтаб запустить, но вот tcl console не работает, виснет при посылке 1й команды

Marsohod mfbti - это и есть пример того прослоечного софта, о котором я говорил. О его свойствах можете судить сами. Я не говорю уже, что это решение только под Windows.

16 hours ago, xxxmatrixxx said:

я хотел порт B настроить и использовать для прошивки STM32F103 через JTAG с использованием JLINK под Eclipse, но пока нашел что-то ясное по описанию только для openocd

Что-то я не понял - зачем здесь кузнец JLINK? Ведь канал B FTDI-ки и будет играть роль JTAG-адаптера (т.е., то же, что делает JLINK). OpenOCD умеет подключаться к FTDI устройствам, там есть примеры конфигурирования. Не помню насчет FT4232, но касательно всего более младшего - точно есть. А Eclipse работает через OpenOCD.

16 hours ago, xxxmatrixxx said:

вторая проблема у меня еще в том, что мне необходимо управлять оставшимися портами ввода/вывода порта А и В, т.е. переключать их во время, например, работы драйвера марсохода mfbti 2.0 (вообще в моем случае допустимо изменять конфигурацию этих портов ввода/вывода до начала работы драйвера)

Порт А у вас занимает mfbti, и если он ничего такого не позволяет, то дополнительно ничем поуправлять на этом порту не выйдет. Выход только такой - написать свой аналог mfdti, но с нужным вам функционалом.

Порт B будет занят OpenOCD, и здесь ситуация похожая, с той лишь разницей, что исходники последнего открытые и прикрутить свое легче.

16 hours ago, xxxmatrixxx said:

пока с конфигурацией портов ввода/вывода и реализацией драйвера для работы через JTAG(либо определения его через существующие средства) по JLINK не разобрался

См. выше.

Share this post


Link to post
Share on other sites

сделал в итоге, как я хотел, опишу, чтобы у других не вызывало трудностей настройка FT4232H:

 

1. порт A настроил для работы по JTAG с использованием драйвера от Марсохода(https://marsohod.org/prodmbftdi/mbftdiq2drv), сделал именно так, как описано, программатор нашелся в Quartus

Но так как у меня стояли 2е версии Quartus(18.1.1 и 13.1, причем последнюю ставил 13.1), то не учел, что Jtag Server запускается той версии Quartus, которая была поставлена последней, т.е. драйвер надо переносить в папки Quartus 13.1, тогда все увидится, у меня же был закинут в папку только 18.1.1, что по понятным причинам не обнаруживался...

 

2. настроил 2й порт для работы через OpenOCD с STM32F103 через JTAG, делал, как описано вот здесь https://marsohod.org/projects/proekty-dlya-platy-marsokhod3/mipsfpga/365-m3-mipsfpga-gdb и http://microsin.net/programming/arm/getting-started-openocd-with-ft2232h-for-swd-debugging.html

скачал новую скомпилированную версию OpenOCD, написал скрипт ft4232h-jtag-portb.cfg:

#
# FTDI MiniModule
#
# http://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_FT4232H_Mini_Module.pdf
#

# -f \interface\jlink.cfg -f \target\stm32f1x.cfg
# -f \interface\ftdi\ft4232h-jtag-portb.cfg -f \target\stm32f1x.cfg

adapter driver ftdi
transport select jtag
ftdi_vid_pid 0x0403 0x6011
ftdi_channel 1 
adapter speed 1000

#Config Command: ftdi_layout_init data direction
#Specifies the initial values of the FTDI GPIO data and direction registers. 
#Each value is a 16-bit number corresponding to the concatenation of the high and low FTDI GPIO registers. 
#The values should be selected based on the schematics of the adapter, such that all signals are set to safe levels with minimal impact on the target system. 
#Avoid floating inputs, conflicting outputs and initially asserted reset signals.
# Bit  MPSSE     FT4232    JTAG     Type   Description
# Bit0 TCK       BDBUS0    TCK      Out    Clock Signal Output
# Bit1 TDI       BDBUS1    TDI      Out    Serial Data Out
# Bit2 TDO       BDBUS2    TDO      In     Serial Data In
# Bit3 TMS       BDBUS3    TMS      Out    Select Signal Out
# Bit4 GPIOL0    BDBUS4    nTRST    In/Out General Purpose I/O
# Bit5 GPIOL1    BDBUS5    SW_PORTA In/Out General Purpose I/O
# Bit6 GPIOL2    BDBUS6    SW_PORTB In/Out General Purpose I/O
# data MSB..LSB       direction (1:out) MSB..LSB( 0 - input, 1 - output)
# 0000'0000'0XX1'0000 0000'0000'0111'1011
ftdi_layout_init 0x0038 0x007b
ftdi_layout_signal nTRST -ndata 0x0010

#SW_PORTA=0 => Jtag 2е ПЛИС
#SW_PORTA=1 => Jtag 1 ПЛИС(ПВВ)
#SW_PORTB=0 => Jtag STM32
#SW_PORTB=1 => не допустимо, т.к. подключен будет UART Спутника

и разместил его в папке \interface\ftdi\ в данном пакете.

для старта его из Eclipse необходимо в настройках запуска отладки через OpenOCD вбить:

-f \interface\ftdi\ft4232h-jtag-portb.cfg -f \target\stm32f1x.cfg

 

3. остальные порты не менял, они у меня как UART задействованы

 

Отладил все на FT4232H MiniModule, пока все заработало, перенес порты, определяющие конфигурацию переключателей, с порта А на порт В, т.к. там они мне доступны будут через OpenOCD, а вот через драйвер от Марсохода нет...

 

еще раз всем спасибо за помощь, надеюсь кому-нибудь эта информация пригодится

 

Edited by xxxmatrixxx

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this