tigard-tools/tigard

GitHub: tigard-tools/tigard

一个基于 FTDI FT2232H 的多协议硬件黑客工具,旨在解决通用调试接口缺失的问题。

Stars: 814 | Forks: 92

Tigard PCB Render # Tigard 一个基于 FTDI FT2232H 的多协议硬件黑客工具。 # 目标 市面上有很多 -232H 系列转接板,但它们通常是针对特定用途设计的,并不是为了方便地连接到各种不同的目标系统。 两个例外是 Exodus Intelligence Hardware Interface Board(不开源且不售卖),以及 [TIMEP](https://github.com/Matir/timep),它是该项目的起源和基础。 # 内容 - [软件功能](#software) - [硬件功能](#hardware-features) - [使用说明](#usage) - [硬件连接](#hardware-hookup) - [开关](#switches) - [UART](#uart) - [SPI](#spi) - [I2C(在 I2C 或 SPI 引脚头上)](#i2c-on-i2c-spi-or-jtag-header) - [JTAG 调试(在 JTAG 或 CORTEX 引脚头上)](#jtag-debug-on-jtag-or-cortex-header) - [JTAG 边界扫描(在 JTAG 或 CORTEX 引脚头上)](#jtag-boundary-scan-on-jtag-or-cortex-header) - [SWD(在 CORTEX 引脚头上)](#swd-on-cortex-header) - [iCE40 编程](#ice40-programming) - [AVR ISP](#avr-isp) - [调试](#debugging) - [引脚定义](#pinouts) - [条纹与尾巴](#stripes-and-tails) - [外壳(Dens)](#dens) - [序列号](#serial-numbers) - [获取 Tigard](#getting-tigard) # 软件功能 Tigard 设计为开箱即用,兼容多个已经支持 x232H 系列芯片的工具和库,包括: * UART 的 USB-Serial 驱动 * 用于 JTAG 的 OpenOCD 和 URJTAG * 用于 SPI 接口的 Flashrom、libmpsse、pyftdi 等工具 * 用于 I2C 接口的 libmpsse 和 pyftdi * 用于 ice40 FPGA 的 iceprog * 用于 AVR 微控制器的 avrdude 此外,用户也使用 Tigard 与 [BMDA](/../../issues/66)、[Mitou jtag](/../../issues/79)、[VSCode](/../../pull/75) 和 [SPI via FTDI](/../../issues/40) 配合。 # 硬件功能 亮点: * 双端口设计:一个端口专用于 UART,另一个端口与其他接口共享 * 高性能方向电平转换器,支持 1.8 到 5.5V 电平 * 电压选择开关,可在板载 1.8、3.3、5.0V 供电与 vTarget 之间切换 * 模式选择开关,可在 SPI/JTAG 与 I2C/SWD 模式之间切换 * 逻辑分析仪端口,用于观察设备级信号(v1.0 及之后版本) * 指示灯,辅助调试 # 使用说明 ## 硬件连接 从板子完全断开开始: 1. 使用夹子或跳线将板子连接到目标系统 2. 选择正确的模式(SPI/JTAG 或 SWD/I2C) 3. 确保电压开关处于 VTGT 模式 4. 插入 USB 电缆。PWR 和 EN 指示灯将亮起 5. 给目标设备上电 6. 如果将 VTGT 连接到目标,VTGT 指示灯会亮起;否则可以用电压选择开关选择电压 ## 开关 Tigard 上有两个开关用于设置工作模式:一个控制电压,一个控制多个 IO 引脚的布线方式。两者都需要为特定模式正确设置。具体细节请参见各接口章节,但以下是模式摘要: #### 电压开关 该开关选择电平转换器和目标系统的参考电压: * 1V8、3V3 和 5V 都会向 VTGT 引脚施加电压 * VTGT 断开与供电的关联,依赖连接到目标的线缆来设置电平转换器电压 这会产生三种使用场景: 1. **目标供电**:将开关设为 VTGT,并将 VTGT 线缆连接到**已供电**的目标。此时目标为电平转换器供电。 2. **Tigard 供电**:将开关设为某一电压,并将 VTGT 连接到**未供电**的目标。此时 Tigard 向目标供电。 3. **自供电**:将开关设为某一电压,但**不连接** VTGT 线缆。Tigard 自身为电平转换器供电,目标自行供电。 #### 模式开关 该开关控制部分 IO 引脚的连接方式,用于特定用途: * 设为 JTAG/SPI 模式时: * 所有信号直通 * CORTEX 和 JTAG 引脚头配置为标准 JTAG * SPI/JTAG 引脚头可用于 SPI * 设为 SWD/I2C 模式时: * DO 和 DI 连接在一起,形成 SWDIO 或 SDA * CORTEX 和 JTAG 引脚头可用于 SWD * SPI/JTAG 引脚头可用于 I2C ## UART #### 连接 * 大多数情况下需要 UART 引脚头的 2、3、4 号引脚——GND、TX 和 RX。将它们连接到目标 * 如果目标有 VCC 引脚头,将 1 号引脚 VTGT 连接到它,并将电压选择器设为 VTGT * 如果没有 VCC 引脚头,断开 VTGT 线缆,并使用选择器设置目标电压 #### 软件 两个串口中的第一个连接到 UART 引脚头。插入 Tigard 后,会出现两个串口设备——第一个即为目标串口。在软件中使用对应的串口,例如: ``` screen /dev/ttyUSB0 115200 ``` ## SPI #### 连接 SPI/I2C 引脚头的布局与标准 8 引脚 SPI 闪存芯片一致,便于使用夹子或插座连接。 * 在模式开关上选择 SPI/JTAG * 将夹子或插座连接到引脚头。注意 1 号引脚,通常插座上会有标记,或排线上的红色/高亮线 * 将夹子连接到目标或将芯片插入插座 * 如果是电路内连接,**必须**采取额外措施,确保没有其他设备与 SPI 设备通信 * 如果在目标供电状态下使用夹子,请将电压选择器设为 VTGT 选项 * 如果使用不带电目标的 ZIF 插座或夹子,请在电压选择器上设置相应电压 #### 软件 Flashrom 是最常用的 SPI 闪存转储工具。但尽管普及,它速度很慢且效率不高。 ``` flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 ``` libmpsse 是用于控制 MPSSE 或 x232H 系列高速串口的强大库。但由于依赖较多,已不再推荐使用。 pyftdi 是一个新的、简单的接口,与 libmpsse 非常相似: ``` from pyftdi.ftdi import Ftdi Ftdi.show_devices() from os import environ ftdi_url = environ.get('FTDI_DEVICE', 'ftdi://ftdi:2232:1:23f/2') from spiflash.serialflash import SerialFlashManager flash=SerialFlashManager.get_flash_device(ftdi_url) print("Flash device: %s @ SPI freq %0.1f MHz" % (flash, flash.spi_frequency/1E6)) f=open("data.bin","wb") f.write(flash.read(0,len(flash))) f.close() ``` ## I2C(在 I2C、SPI 或 JTAG 引脚头上) #### 连接 I2C 引脚头(硬件版本 1.0 及之后)与 [Sparkfun 的 Qwiic](https://www.sparkfun.com/qwiic) 和 [Adafruit 的 STEMMA QT](https://learn.adafruit.com/introducing-adafruit-stemma-qt/what-is-stemma-qt) 系统兼容: * 将 4 针 JST SH 兼容电缆插入 I2C 连接器 * 将另一端连接到你的 STEMMA QT、Qwiic 或其他 I2C 设备 此外,SPI 引脚头的布局与大多数 8 引脚 I2C 芯片一致,便于使用夹子或插座: * 将夹子或插座连接到引脚头。注意 1 号引脚,通常插座上会有标记,或排线上的红色/高亮线 * 将夹子连接到目标或将芯片插入插座 最后,JTAG 引脚头也可以用来获取 .1 英寸的独立 I2C 信号: * 将 8 线 JTAG 线缆连接到 JTAG 连接器 * 将白色 SCL 和灰色 SDA 线缆连接到目标的 I2C 引脚 无论哪种情况,都需要正确设置 Tigard 的开关: * 在模式选择开关上选择 I2C * 如果连接在电路中的目标设备有电源,选择 VTGT 选项 * 如果连接的是独立传感器、带电关闭的插座或夹子,请在电压选择器上选择正确电压 #### 特殊情况 FT2232H 的 I2C 实现非常有限。I2C 依赖开漏/开集电极而非推挽三态 I/O,但 FT2232H 支持不佳。因此: *仅支持控制器模式,不支持设备模式 * 如果 I2C 总线上有其他控制器,Tigard 可能无法正常工作 * 不支持时钟拉伸 * I2C 开关将 DI 和 DO 线短接,以实现双向通信 * 未包含上拉电阻,因为它们通常位于目标板上,而电平转换器上的弱上拉已足够 #### 扩展技巧 为了兼容 I2C 和 SWD,DI 和 DO 通过电阻 R16 合并。这是 SWD 所必需的,通常对 I2C 也可接受。 许多 I2C 目标已有上拉电阻。此外,Tigard 的所有 IO 引脚都有弱 100K 上拉。在测试中,这对大多数 I2C 设备的电路内和外部使用已足够。如果需要更强的上拉,可以临时通过拉高 SPI 引脚的 COPI 和 SCK,或 JTAG 引脚的 TCK 和 TDI 来实现。 #### 软件 libmpsse 是用于控制 MPSSE 或 x232H 系列高速串口的强大库。但由于依赖较多,已不再推荐使用。 pyftdi 是一个新的、简单的接口,与 libmpsse 非常相似: ``` from pyftdi.ftdi import Ftdi Ftdi.show_devices() from os import environ ftdi_url = environ.get('FTDI_DEVICE', 'ftdi://ftdi:2232:1:23f/2') from i2cflash.serialeeprom import SerialEepromManager flash = SerialEepromManager.get_flash_device(ftdi_url,'24AA32A',0x50) flash.write(5,10) flash.read(0,32) ``` ## JTAG 调试(在 JTAG 或 CORTEX 引脚头上) #### 连接 JTAG 引脚头的布局与 FTDI I/O 引脚标签顺序一致,以与许多 x232H breakout 板保持一致。 此外,CORTEX 引脚头也按标准 ARM 10 针 JTAG 引脚布线。 请务必将模式开关设为 JTAG。这会确保 TDI 和 TDO 分离,并保证 TMS 正确布线到 CORTEX 引脚头。否则,将使用标准连接方式。 #### 软件 **注意:这些 OpenOCD 配置需要 OpenOCD v0.12+**。早期版本可能使用在此提交中更新的已弃用命令:https://github.com/tigard-tools/tigard/commit/5e5722944c8c1ec73b0fa85d574793300c23b3ce OpenOCD 是用于 ARM、MIPS 等架构的在芯片调试的强大工具。 对应的配置文件(请将其设为链接文件)应如下所示: ``` adapter driver ftdi transport select jtag ftdi vid_pid 0x0403 0x6010 ftdi channel 1 adapter speed 2000 ftdi layout_init 0x0038 0x003b ftdi layout_signal nTRST -data 0x0010 ftdi layout_signal nSRST -data 0x0020 ``` 在 openocd 中使用: ``` openocd -f tigard-jtag.cfg ``` ## JTAG 边界扫描(在 JTAG 或 CORTEX 引脚头上) 边界扫描可用于控制设备以设置 I/O 引脚状态(`EXTEST`),或在设备运行期间查看其状态(`SAMPLE`)。 #### 连接 连接方式与 [JTAG 调试(JTAG 或 CORTEX 引脚头)](#jtag-debug-on-jtag-or-cortex-header) 中所述相同。 引脚布局与运行在 `B` 接口上的 `Olimex ARM-USB-OCD` 兼容。 #### 软件 [UrJTAG](https://urjtag.sourceforge.io/) 是面向底层和边界扫描使用的开源 JTAG 控制软件。 需要告知 UrJTAG Tigard 的 VID 和 PID,以及 JTAG 位于接口 1(默认是 0)。由于一个 bug,TCK 的计算值可能偏高 5 倍——例如下面设置中实际为 500kHz。 [TopJTAG](http://www.topjtag.com/) 是一个更易用但商业($100)且仅限 Windows 的选项。它包含一个“波形视图”,允许你在设备运行时查看任意引脚状态,如同设备上连接了逻辑分析仪。使用 TopJTAG 时,将以下作为 JTAG 连接设置: * `Connection`:Generic FTDI FT2232 * `Device`:Tigard V1.0 B * `Static Pins`:Olimex ARM-USB-OCD * `TCK Freq`:2 MHz(按需调整) 一个支持 Tigard 的开源选项是 [JTAG Boundary Scanner](https://github.com/viveris/jtag-boundary-scanner),它提供 Windows GUI,但后端库是跨平台的(用 C 编写)。该库提供许多功能,例如能够与连接到目标芯片的 SPI 设备通信(警告——速度较慢!)。 该库的 Python 绑定 Alpha 版本可在 [PyJTAGBS](https://github.com/colinoflynn/pyjtagbs) 中获取。例如使用 Tigard 检查扫描链: ``` from jtagbs import JTAGCore, JTAGBS interface = JTAGCore() jtag = JTAGBS(interface) probes = jtag.list_available_probes() print(probes) jtag.open_probe('Tigard V1.0 B') jtag.init_scanchain() print(jtag.list_devids()) ``` 有关加载用于切换特定引脚的 BSDL 文件的更多示例,请参见 PyJTAGBS 文档。如果驱动加载正确,应使用的探针名称为 `'Tigard V1.0 A TG100065A'` 和 `'Tigard V1.0 B TG100065B'`。 ## SWD(在 CORTEX 引脚头上) #### 连接 SWD 引脚头是一个标准的 10 针引脚头,常见于许多 SWD 目标开发板。使用两端带有相同引脚头的短“SWD”电缆是连接大多数目标的最佳方式。 请务必将模式开关设为 SWD。这将使用电阻 R16 将 DI 和 DO 连接起来,形成双向 SWDIO 引脚,并连接到 CORTEX 引脚头的 2 号引脚。否则,将使用标准连接方式。 #### 软件 **注意:这些 OpenOCD 配置需要 OpenOCD v0.12+**。早期版本可能使用在此提交中更新的已弃用命令:https://github.com/tigard-tools/tigard/commit/5e5722944c8c1ec73b0fa85d574793300c23b3ce OpenOCD 是用于 ARM、MIPS 等架构的在芯片调试的强大工具。要在 Tigard 上使用 SWD,需要从源码构建它。AND!XOR DC27 Badge 的 [逐步说明](https://hackaday.io/project/164346-andxor-dc27-badge/log/166464-swd-all-the-things) 涵盖了完整流程。 对应的配置文件(请将其设为链接文件)应如下所示: ``` adapter driver ftdi transport select swd ftdi vid_pid 0x0403 0x6010 ftdi channel 1 adapter speed 2000 ftdi layout_init 0x0028 0x002b ftdi layout_signal SWD_EN -data 0 ftdi layout_signal nSRST -data 0x0020 ``` 在 openocd 中使用: ``` openocd -f tigard-swd.cfg ``` ## iCE40 编程 Lattice iCE40 系列 FPGA 因其低成本和开源工具链而适用于小型项目。虽然这是非常特定的目标,但 Tigard 拥有所有必要的引脚,非常适合编程设备。 #### 连接 所有必要引脚都在 JTAG 引脚头上。 默认未安装“!?”引脚。JTAG 的“!?”引脚与 UART RX 引脚在内部短路,以防你需要刷新 iCE40 但不想焊接 Tigard。详见下表。 请务必在模式选择开关上选择 JTAG/SPI。这会确保 COPI 和 CIPO 分离。 如果计划编程 SRAM 而非 FLASH: * 交换 COPI 和 CIPO * 断开 CS 与 FLASH 的连接,但保留其连接到 iCE40 #### 软件 要编程目标的非易失 FLASH,请使用 iceprog: ``` iceprog -I B yourbitstream.bin ``` 如果希望直接编程 ice40 的 SRAM,请确保调整布线并再次使用 iceprog: ``` iceprog -I B -S yourbitstream.bin ``` 请注意,如果选择编程 SRAM,位流将在断电后丢失。 ## AVR ISP 要编程包括许多 Arduino 开发板在内的 AVR 微控制器,请使用带有自定义配置文件的 avrdude。 #### 连接 请务必在模式选择开关上选择 JTAG/SPI。使用 SRST 作为复位信号。 #### 软件 Avrdude 是一个开源的 AVR 烧录工具。Avrdude 7.1 及更高版本已内置对 Tigard 的支持——你只需: ``` avrdude -c tigard ``` 对于旧版本,请创建以下 `tigard.conf` 文件,以便将 Tigard 识别为 avrftdi 兼容设备并指定使用的引脚: ``` programmer parent "avrftdi" id = "tigard"; desc = "Tigard interface board"; usbdev = "B"; sck = 0; mosi = 1; miso = 2; reset = 5; ; ``` 然后,使用 `-C +tigard.conf` 添加配置文件,并使用 `-c tigard` 指定编程器: ``` avrdude -C +tigard.conf -c tigard ``` # 调试 #### PWR 指示灯: 当板子有 USB 供电时该灯会亮起;插入 USB 电缆后应立即点亮。 * 如果不亮,请检查 USB 线缆和电源。 * 如果灯亮后熄灭、变暗或闪烁,很可能线缆或目标存在短路。 #### EN 指示灯: 当 FTDI 芯片正常工作时该灯会亮起,通常在 USB 供电灯亮起后稍亮。 * 如果不亮,可能是 USB 线缆故障、仅供电的 USB 端口/线缆或 FTDI 芯片损坏。 #### VTGT 指示灯: 当电平转换器正常供电时该灯会亮起,无论是由目标供电还是由板载电平选择器供电。 * 如果在 VTGT 模式下不亮,请检查目标供电及与目标的电源和地线连接。 * 如果选择了电压但灯不亮,很可能线缆或目标存在短路。 * 存在某些边界情况,VTGT 可能被[锁存到输出引脚施加的电压](https://github.com/tigard-tools/tigard/issues/20)。养成始终从 VTGT 关闭开始使用的习惯有助于避免此问题。 #### 所有指示灯全亮: 当所有灯都亮起时igard 很可能按预期工作。如果仍有问题,可能性如下(按可能性从高到低排列): * 是**接线问题**。请确保线缆连接良好,并用万用表确认。 * 是**目标问题**。尝试更换目标以确认软件是否正常工作。 * 是**软件问题**。尝试更换软件工具或模式以确认板子是否正常工作。 * 是**协议问题**。使用逻辑分析仪或示波器观察信号是否正确。 * 是**硬件问题**。尝试更换另一块 Tigard 板。 * 是**Tigard 问题**。尝试更换另一块 x232H 开发板。 # 引脚定义 引脚定义的选择基于易用性原则,具体包括: * 如果存在广泛使用的标准,优先采用(SWD) * 如果存在主要的主流用途,采用该方式(SPI/I2C) * 如果其他常见开发板有对应引脚定义,采用其定义(UART 和 JTAG) ### UART 2.54mm 间距,1x9 针排针。 该引脚定义优先将 FT2232H 引脚按顺序排列——类似于许多 x232H breakout 板。 VTGT、GND、TX、RX 的颜色与大多数 USB-Serial 线缆一致。其余引脚包含但未安装在引脚头上,用户可根据需要选装。 | 引脚编号 | UART 信号 | 颜色 | FT2232H 引脚 | |----------|-----------|------|--------------| | 1 | VTGT | 红色 | -- | | 2 | GDD | 黑色 | -- | | 3 | TX | 绿色 | AD0 | | 4 | RX | 白色 | AD1 | | 5 | RTS | -- | AD2 | | 6 | CTS | -- | AD3 | | 7 | DTR | -- | AD4 | | 8 | DSR | -- | AD5 | | 9 | DCD | -- | AD6 | ### SWD 1.27mm 间距,2x5 针排针。 这是标准引脚定义。为了兼容 SWD 和 JTAG,模式开关: 1. 将 DI 和 DO 合并为 SWDIO 2. 选择引脚 2 为 SWDIO 或 TMS | 引脚编号 | SWD 信号 | FT2232H 引脚 | JTAG 信号 | FT2232H 引脚 | |----------|----------|--------------|-----------|--------------| | 1 | VTGT | -- | VTGT | -- | | 2 | SWDIO | BD1 BD2 | TMS | BD3 | | 3 | GND | -- | GND | -- | | 4 | SWDCLK | BD0 | TCK | BD0 | | 5 | GND | -- | GND | -- | | 6 | NC | -- | TDO | BD2 | | 7 | KEY | -- | KEY | -- | | 8 | NC | -- | TDI | BD1 | | 9 | GND | -- | GND | -- | | 10 | nSRST | BD5 | nSRST | BD5 | ### JTAG 2.54mm 间距,1x8 针排针。 该引脚定义优先将 FT2232H 引脚按顺序排列——类似于许多 x232H breakout 板。 一般使用时请将模式开关设为 SPI/JTAG 模式。 线缆颜色参考 [SecuringHardware.com](https://SecuringHardware.com/) 使用的 Adafruit FT232H 线缆颜色方案,颜色选择是因为逻辑分析课堂常使用黑、棕、红、橙,因此为线缆选择了这些独特颜色。 该引脚头也可用于 I2C 和 SPI(如果 8 针定义不适用)。 | 引脚编号 | JTAG 引脚 | 颜色 | FT2232H 引脚 | |----------|-----------|-------|--------------| | 1 | VTGT | 红色 | -- | | 2 | GND | 黑色 | -- | | 3 | TCK | 白色 | BD0 | | 4 | TDI | 灰色 | BD1 | | 5 | TDO | 紫色 | BD2 | | 6 | TMS | 蓝色 | BD3 | | 7 | TRST | 绿色 | BD4 | | 8 | SRST | 黄色 | BD5 | ### SPI 2.54mm 间距,2x4 针排针。 该引脚定义专门匹配大多数 8 引脚 SPI 和 I2C 芯片的引脚布局,便于使用夹子或插座连接。 为了兼容 SPI 和 I2C,模式开关: 1. 将 DI 和 DO 合并为 SDA(I2C 模式) 2. 在 I2C 模式下断开引脚 2(用于设备地址信号) | 芯片引脚编号 | 引脚头编号 | SPI 信号 | FT2232H 引脚 | |--------------|------------|----------|--------------| | 1 | 1 | CS | BD3 | | 2 | 3 | CIPO | BD2 | | 3 | 5 | WP | 上拉 | | 4 | 7 | GND | -- | | 5 | 8 | COPI | BD1 | | 6 | 6 | SCK | BD0 | | 7 | 4 | EN | 上拉 | | 8 | 2 | VTGT | -- | ### LA 1.27mm 间距,2x7 针排针。 LA 端口便于将逻辑分析仪连接到 Tigard 与目标硬件之间的信号,便于监控 UART、SPI 和 JTAG,也通常适用于 I2C。 虽然可以使用 FT2232H 作为简易逻辑分析仪,但这不是设计初衷——预期使用场景是:Tigard 与目标通信,但需借助外部逻辑分析仪调试通信过程。 LA 端口可作为被动机械适配器使用([不支持](https://github.com/tigard-tools/tigard/issues/20))。为获得最佳效果,请给 Tigard 供电但断开 VTGT 与目标的连接,并注意信号完整性。 该端口设计用于直接连接 Bitmagic 逻辑分析仪,或使用 Bitmagic 线缆连接其他工具。 8 个最关键的信号已连接——6 个来自 JTAG/SWD/SPI/I2C 端口,2 个来自 UART 端口。 | 引脚编号 | Bitmagic 信号 | FT2232 引脚 | JTAG 信号 | SPI 信号 | SWD 信号 | I2C 信号 | UART 信号 | |----------|---------------|-------------|-----------|----------|----------|----------|-----------| | 1 | xPB0 | BD0 | TCK | SCK | SWCLK | SCL | | | 2 | xPB1 | BD1 | TDI | COPI | SWDIO | SDA | | | 3 | xPB2 | BD2 | TDO | CIPO | SWDIO | SDA | | | 4 | xPB3 | BD3 | TMS | CS | | | | | 5 | xPB4 | BD4 | TRST | | | | | | 6 | xPB5 | BD5 | SRST | | | | | | 7 | xPB6 | AD0 | | | | | TX | | 8 | xPB7 | AD1 | | | | | RX | | 9 | GND | | | | | | | | 10 GND | | | | | | | | 11 | xTRIG | | | | | | | | 12 | xCLK | | | | | | | | 13 | xTRIG2 | | | | | | | | 14 | xIFCLK | | | | | | | ### I2C 1mm 间距,1x4 针排针,JST SH 兼容。 该引脚定义专门匹配 [Sparkfun 的 Qwiic](https://www.sparkfun.com/qwiic) 和 [Adafruit 的 STEMMA QT](https://learn.adafruit.com/introducing-adafruit-stemma-qt/what-is-stemma-qt) 系统。 使用模式开关选择 I2C/SWD 模式。 | 引脚编号 | I2C 信号 | FT2232H 引脚 | |----------|----------|--------------| | 1 | GND | --- | | 2 | VCC | --- | | 3 | SDA | BD1 和 BD2 | | 4 | SCL | BD0 | ### iCE40 使用 JTAG 引脚头,并额外使用未占用的“!?”引脚。 | 引脚编号 | 标签 | iCE40 信号 | FT2232 引脚 | |----------|-------------|--------------|--------------| | 1 | VTGT | VTGT | --- | | 2 | GND | GND | --- | | 3 | TCK | CLK | BD0 | | 4 | TDI/MOSI/SDA| MOSI/COPI | BD1 | | 5 | TDO/MISO/-- | MISO/CIPO | BD2 | | 6 | TMS/SS/-- | --- | --- | | 7 | TRST/CS/ICE_SS_B | CS/ICE_SS_B | BD4 | | 8 | SRST/CRESET | RESET | BD5 | | 9 | !? | CDONE | BD6 | JTAG 的“!?”引脚与 UART RX 引脚内部短路,以便在不焊接 Tigard 的情况下刷新 iCE40。 ### AVR ISP 常见于 AVR 开发板的 6 针 ICSP 引脚头需要以下连接: | 引脚编号 | 标签 | ISP 信号 | ICSP 引脚 | FT2232 引脚 | |----------|-------------|----------|-----------|--------------| | 1 | VTGT | VTGT | 2 | --- | | 2 | GND | GND | 6 | --- | | 3 | TCK | SCK | 3 | BD0 | | 4 | TDI/MOSI/SDA| MOSI | 4 | BD1 | | 5 | TDO/MISO/-- | MISO | 1 | BD2 | | 6 | TMS/SS/-- | --- | --- | --- | | 7 | TRST/-- | --- | --- | --- | | 8 | SRST/RST | RST | 5 | BD5 | # 条纹与尾巴 为了支持不同接口,可以使用定制布线或扩展板。推荐名称:“Tigard Stripes”指扩展板,“Tigard Tails”指布线。 * `UART Tail` 随板附带,包含 VTGT、GND、TX 和 RX * `JTAG Tail` 随板附带,包含标好的多用途 JTAG、SPI 和 I2C 信号线 * `SOIC8 Tail` 指带排缆的廉价 SOIC-8 夹具,兼容 SPI/I2C 引脚头 # Dens(外壳) Tigard 以裸板形式提供,但有多种 3D 打印的安装座和外壳(“Dens”)可供选择: * 第一个 [TigarDen](https://github.com/hamid-elaosta/TigarDen) 由 hamid 设计,是用于固定 Tigard 的多件式上下外壳 * [底部外壳](https://www.thingiverse.com/thing:5166570) 由 phaktor 设计,底部有漂亮的虎纹,或可单色打印 * [带铰链的外壳](https://www.thingiverse.com/thing:5169952) 由 professor_plum 设计,可容纳 Tigard、Bitmagic 和多个探针 * [简化 2 件式外壳](https://cad.onshape.com/documents/832906f0b96360664fedfe62/w/f1b917fd93e5b559c0927cf4/e/eb5666e6e328afd821567f83) 由 jwise 设计,适用于铣削或打印 * [tigard-tray](https://github.com/tigard-tools/tigard-tray) 是一个 3D 打印托盘,可固定 Tigard、Bitmagic 和 9 个探针夹,同时保护引脚,便于在拉链包中滑动 # 序列号 Tigard 遵循序列号分配约定。如果你决定自行制作并销售 Tigard,请将前两个字符 “TG” 替换为其他内容。 格式:`TGMmxxxx` * `TG` — 固定标识,表示 “Tigard” * `M` — 主版本号(十进制) * `m` — 次版本号(十进制) * `xxxx` — 4 位小写十六进制序列号,从 0 开始补零 ## 已分配 * 第一批 28 个(2020 年 7 月 5 日):TG010000 - TG01001b * 第二批 42 个(2020 年 8 月 5 日):TG01001c - TG010046 * 第三批 496 个(2020 年 10 月):TG100000 - TG1001f0 * 第四批 693 个(2021 年 1 月):TG110000 - TG1102b5 * 第四批 697 个(2021 年 9 月):TG110400 - TG1106b9
注意:该批次的通孔元件未使用选择性焊锡机焊接,部分需要返工,因为“hack”跳线被焊锡意外桥接。 * 第五批 1400 个(2022 年 11 月):约 TG110700 - TG110c7f * 第六批 1400 个(2024 年 1 月):约 TG110c80 - TG 1111ff
注意:该批次 JTAG 引脚头安装位置错误。应该是 8 针引脚头安装在 9 孔的插座中。插座第 9 脚应为空(仅用于刷写 ice40 FPGA 的 icebreaker)。但第 1 脚被错误地留空。我添加了 1 脚的头并修剪了第 9 脚,以便 8 针 JTAG 线缆无法插错,同时 9 针 UART 插座不会误用。 * 第七批 2100 个(2025 年 1 月):约 TG111200-TG111834 # 获取 Tigard ## 在哪里购买 Tigard 可直接从以下渠道购买: * [Crowd Supply](https://www.crowdsupply.com/securinghw/tigard) * [Mouser](https://www.mouser.com/ProductDetail/Securing-Hardware/TIGARD-V1?qs=aP1CjGhiNiFnjSEE%2FnXyEw%3D%3D) * [1BitSquared](https://1bitsquared.com/collections/embedded-hardware/products/tigard) [HackerWarehouse](https://hackerwarehouse.com/product/tigard/) 也提供由 SynapticRewrite 设计的 [激光切割亚克力外壳](https://hackerwarehouse.com/product/tigard-case/)。 Tigard 在欧洲可通过 [1BitSquared 的德国商店](https://1bitsquared.de/products/tigard) 购买。 10 块以上可享受折扣,直接从 [SecuringHardware.com](https://learn.securinghardware.com/product/tigard/) 批量订购。联系 tigards - at - securinghw.com 获取批发订单。 ## 自行制作 Tigard Tigard 采用 [CC-BY-SA 4.0 许可证](https://github.com/tigard-tools/tigard/blob/master/LICENSE.txt) 发布。这意味着你被允许并鼓励自行制作设备,或在 Tigard 设计基础上进行修改,只要注明项目来源并共享你的修改。 如果你选择自行制造ard 电路板,我们建议/要求: * 以某种方式区分你的电路板——选择不同颜色可能是最简单的方式,以免与 SecuringHardware.com 的电路板混淆 * 你可以称其为 “Tigard” 并将其写入 EEPROM 的 USB 产品描述符 * 在 EEPROM 中写入准确的制造商信息 * 使用不与上述[已列出的序列号](#serial-numbers)冲突的序列号——不要使用 “TG” 前缀 SecuringHardware.com 测试、验证并支持其生产和销售的每一块 Tigard。如在制作设备时发现[设计问题](https://github.com/tigard-tools/tigard/issues),请告知我们;但如果你购买的是第三方 Tigard 并遇到硬件问题,你需要与卖家或制造商联系解决。
标签:avrdude, AVR ISP, Flashrom, FTDI FT2232H, I2C, iCE40, iceprog, JTAG, libmpsse, OpenOCD, pyftdi, SPI, SWD, Tigard, UART, URJTAG, USB-Serial, USB转串口, 多协议, 开源硬件, 硬件 hacking, 硬件探测, 硬件接口, 硬件黑客, 逆向工具