OpenOCD学习笔记 6-如何使用FTDI芯片作为SWD或JTAG调试器

FTDI的设备用到的interface Driver有2个,分别位ftdi和ft232r。

【ftdi】

如果使用ftdi的interface配置,则使用的是FTDI的MPSSE模式,仅H系列芯片(FT232H、FT2232H、FT4232H)支持。这部分驱动使用的是libusb-1.0,而不是libftdi和D2XX。

默认情况下是JTAG,如果要使用SWD,则需要配置SWD_EN。

配置命令:

  • ftdi_vid_pid [vid pid]+

指定调试器的VID和PID,最多8组。例如:ftdi_vid_pid 0x0403 0xcff8 0x15ba 0x0003

  • ftdi_device_desc description

指定调试器的描述符。

  • ftdi_serial serial-number

指定调试器的Serial Number。

  • ftdi_channel channel

指定FTDI设备的Channel。对应FT232H来说,只有Channel 0(默认),FT2232H/FT4232H是Channel 0和Channel 1。

  • ftdi_layout_init data direction

指定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输出高电平,其他为低电平。

  • ftdi_layout_signal name [-data|-ndata data_mask] [-input|-ninput input_mask] [-oe|-noe oe_mask] [-alias|-nalias name]

创建一个名字为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),则创建的信号相同(或数据取反)到已指定的信号名称。

 

  • ftdi_set_signal name 0|1|z

输出信号

-0:输出低

-1:输出高

-z:设置为高阻态

  • ftdi_get_signal name

读取信号

  • ftdi_tdo_sample_edge rising|falling

-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

配置命令:

  • ft232r_vid_pid vid pid

指定调试器的VID和PID

  • ft232r_serial_desc serial

指定调试器的描述符。

  • ft232r_jtag_nums tck tms tdi tdo

一次配置4个信号脚。默认0 3 1 2 或TXD CTS RXD RTS

  • ft232r_tck_num tck

配置tck脚

  • ft232r_tms_num tms

配置tms脚

  • ft232r_tdi_num tdi

配置tdi脚

  • ft232r_tdo_num tdo

配置tdo脚

  • ft232r_trst_num trst

配置trst脚

  • ft232r_srst_num srst

配置srst脚

  • ft232r_restore_serial word

在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

 

 

你可能感兴趣的:(工具)