FTDI的设备用到的interface Driver有2个,分别位ftdi和ft232r。
【ftdi】
如果使用ftdi的interface配置,则使用的是FTDI的MPSSE模式,仅H系列芯片(FT232H、FT2232H、FT4232H)支持。这部分驱动使用的是libusb-1.0,而不是libftdi和D2XX。
默认情况下是JTAG,如果要使用SWD,则需要配置SWD_EN。
配置命令:
指定调试器的VID和PID,最多8组。例如:ftdi_vid_pid 0x0403 0xcff8 0x15ba 0x0003
指定调试器的描述符。
指定调试器的Serial Number。
指定FTDI设备的Channel。对应FT232H来说,只有Channel 0(默认),FT2232H/FT4232H是Channel 0和Channel 1。
指定FTDI GPIO的初始数据和方向,16bit数据宽度。参数data中1表示高电平,0表示低电平,而参数direction中1表示输出,0表示输入(注意与常规的设定不同)
以FT232H为例,其JTAG和SWD的PIN脚定义如下:
# Adafruit FT232H JTAG SWD
# Name Pin Name Func Func
# D0 J1-3 ADBUS0 TCK SWDCLK
# D1 J1-4 ADBUS1 TDO/DI SWDIO
# D2 J1-5 ADBUS2 TDI/DO SWDIO
# D3 J1-6 ADBUS3 TMS N/A
# D4 J1-7 ADBUS4 (GPIOL0) /nSRST optional module reset
# D5 J1-8 ADBUS5 (GPIOL1) /nTRST optional target reset
如果使用SWD,其IO口初始化命令:ftdi_layout_init 0x0030 0x003b
direction: 0b0000'0000'0011'1011, 即除了ADBUS2脚为输出,其他用到的IO都为输出,而不使用的IO为输入。
data: 0b0000'0000'0011'0000b,即nSRST和nTRST输出高电平,其他为低电平。
创建一个名字为name的信号。
-data|-ndata data_mask: data_mask是对应pin脚的掩码,-ndata表示输入数据反向,-data则不反向。
-input|-ninput input_mask:表示对应pin脚是否为输入,-input表示输入,-ninput表示非输入。
-oe|-noe oe_mask:表示对应pin脚是否为输出,-oe表示输出,-noe表示非输出。
-alias|-nalias name:如果使用-alias(或-nalias),则创建的信号相同(或数据取反)到已指定的信号名称。
输出信号
-0:输出低
-1:输出高
-z:设置为高阻态
读取信号
-rising, TCK上升沿采样TDO,默认
-falling, TCK下降沿采样TDO
【ft232r】
FT232R/FT230X/FT231X或其他支持synchronous bitbang mode的芯片,使用RS232的信号作为GPIO。注意不支持CBUS脚。仅支持JTAG模式。
FT232R: bit 7 – RI / bit 6 – DCD / bit 5 – DSR / bit 4 – DTR / bit 3 – CTS / bit 2 – RTS / bit 1 – RXD / bit 0 - TXD
配置命令:
指定调试器的VID和PID
指定调试器的描述符。
一次配置4个信号脚。默认0 3 1 2 或TXD CTS RXD RTS
配置tck脚
配置tms脚
配置tdi脚
配置tdo脚
配置trst脚
配置srst脚
在JTAG后恢复串口的IO口状态。低8位字节为方向设置,0x15表示TXD RTS DTR为输出,其他为输入。高8位字节为0表示禁止bitbang模式。默认值0xFFFFF表示停止发送控制字.
Windows下默认的驱动是VCP,OpenOCD是通过libftdi和libusb来访问设备的,所以需要更换驱动程序为选择 WinUSB 驱动。换驱动的工具推荐使用Zadig。(推荐参考网文:使用JTAG接口调试和恢复华为ONT的准备工作)。
JTAG连接STM32F103的调试参考命令,FTDI设备选择FT230X,复制ft232r.cfg为ft230x.cfg,修改如下:
interface ft232r
ft232r_vid_pid 0x0403 0x6015
adapter_khz 1000
#TCK:RTS,TMS:CTS,TDI:TXD,TDO:RXD
ft232r_jtag_nums 2 3 0 1
然后MCU的配置文件选择target文件夹下的stm32f1x.cfg,测试命令如下:
openocd.exe -f interface\ft230x.cfg -f target\stm32f1x.cfg
打印结果如下:
xPack OpenOCD, 64-bit Open On-Chip Debugger 0.10.0+dev (2019-07-17-11:28)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
FT232R nums: TCK = 2 RTS, TMS = 3 CTS, TDI = 0 TXD, TDO = 1 RXD
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : clock speed 1000 kHz
Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b (ARM Ltd.), part: 0xba00, ver: 0x3)
Info : JTAG tap: stm32f1x.bs tap/device found: 0x16410041 (mfg: 0x020 (STMicroelectronics), part: 0x6410, ver: 0x1)
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : stm32f1x.cpu: external reset detected
Info : Listening on port 3333 for gdb connections