Table of Contents

  • 1. Jtag
  • 2. flashrom
  • 2.1. 支持的烧写器
  • 2.2. 支持的芯片
  • 2.3. 安装
  • 2.4. 硬件接线
  • 2.5. 命令示例
  • 2.6. 总结

很多板子的系统或者是 BIOS 是存储在 SPI Flash 中,此类 Flash 芯片大多使用 top 封 装,在板上也比较明显。烧写工具在某宝上可以轻易买到,效果也不错,手里恰好有 OpenJtag ,不常用但想着既然可能通过Jtag 烧写Flash, 直接烧写应该也可能,经过各种搜 索、研究和测试,成功读写国产的KH25LXXX芯片。由于网上记录比较多的是 使用 Jtag 及 JFlashSPI 烧写FlashOpenJtag 和 oflash 烧写特定板子上的Flash。这里记录使用 OpenJtag 和 flashrom 烧写 SPI FLASH 芯片的 注意事项。

注意

1

本来是有标准的,却衍生出大概6种不同数量针脚的接法,每个产品具体使用的哪种需要通 过产品手册和万用表去测一测进行判断和核实。

而板子上面的芯片及相关线的走向和接法也同样决定了后面使用 flashrom 的命令,详见后 文。本文介绍的是采用 FT2232D 主控及 74alvc164245 输入输出转换为 Jtag 板子,主 控电源由 USB 提供,而 74alvc164245 电源从Jtag vref 输入,且期 1OE 引脚由 ft2232 ADBUS4 引脚控制。

2


2.1

现支持以下近30种烧写器:

internal, dummy, nic3com, nicrealtek, gfxnvidia, drkaiser, satasii, atavia,
it8212, ft2232_spi, serprog, buspirate_spi, dediprog, developerbox, rayer_spi,
pony_spi, nicintel, nicintel_spi, nicintel_eeprom, ogp_spi, satamv, linux_mtd,
linux_spi, usbblaster_spi, pickit2_spi, ch341a_spi, digilent_spi, stlinkv3_spi

需要说明的是,这些烧写器不是某一个具体的产品,而是指某一类产品。使用相同主控的产 品大概率可以被支持,比如从百问早期买的OpenJtag 就使用的FT2232D的主控,可以使用 ft2232_spi 。

2.2

查找 flashrom 源码 include/flashchips.h 可以看到当前其支持以下公司的芯片:

GENERIC_DEVICE_ID
SFDP_DEVICE_ID
PROGMANUF_ID
PROGDEV_ID
ALLIANCE_ID
AMD_ID
AMIC_ID
ATMEL_ID
BOYA_BOHONG_ID
BRIGHT_ID
CATALYST_ID
ESMT_ID
EON_ID
EXCEL_ID
FIDELIX_ID
FUDAN_ID
FUJITSU_ID
GIGADEVICE_ID
HYUNDAI_ID
IMT_ID
INTEL_ID
ISSI_ID
ISSI_ID_SPI
MACRONIX_ID
NANTRONICS_ID
PMC_ID
SANYO_ID
SHARP_ID
SPANSION_ID
SST_ID
ST_ID
SYNCMOS_MVC_ID
TENX_ID
TI_ID
TI_OLD_ID
WINBOND_NEX_ID
WINBOND_ID
ZETTADEVICE_ID

当然对于一些用做替代的芯片,只要读出的ID与定义中匹配也会受到支持,比如国产KH25L系列替 代MX25L的产品。

2.3

# debian 
sudo apt install flashrom

2.4

可以参考 flashrom 文档关于 openmoko debug board 使用的说明。 20针的Jtag 接口使用如下接法:

Pin (JTAG Name)

SPI/Voltage Source

BIOS Chip connector name

1 (VREF)

VCC (from Voltage Source)

VCC (3.3v only)

2 (VTARGET)

VCC (to SPI target)

Not connected

4 (GND)

GND (from Voltage Source)

Ground

5 (TDI)

SI

DIO (Data Input)

6 (GND)

GND (to SPI target)

Not connected

7 (TMS)

CE#

CS (Chip select)

9 (TCK)

SCK

CLK (Clock)

13 (TDO)

SO

DO (Data output)

10 针 Jtag 参照设置。

注意事项:

  1. 网上各种号称 Jtag 接口的图片大多不一致,最好仔细检查并进行测量。
  2. OpenJtag 的 VREF 及GND 一定要接,可能他恰好就是 OpenJtag 中 sn74alvc164245 芯 片的电源,那么不接的话可能就没有输出了。
  3. TDO 接到 DO 的不要擅作主张改到 DIO 上。
  4. Flash 芯片要想办法供上电,当前可与 VREF 使用同一个电源。

2.5

sudo flashrom -p ft2232_spi:type=openmoko,csgpiol=0 -V -r read.bin -c MX25L6406E/MX25L6408E

由于要操作设备,所以要使用 Root 权限,使用 ft2232_spi 烧写可以使用 type 参数指定 非标准 VID 和 PID 的产品,使用 csgpiol ( 手册里还提到 gpiolX) 可能指定一些与 cs 信 号相关的特殊接线。 -c 参数要求探测到多个相同 ID 号的产品时必须指定芯片类型。

注意事项

2.6

理论上只要是 spi flash 都可以使用 jtag 设备模拟 spi 接口进行烧写。而使用 ft2232 主控的 Jtag 不论是 OpenJtag 还是 'CloseJtag' 都可以变成烧写工具,即使它的VID 和 PID 都是自定义的,我们还可以使用 FT2232 的 FT_PROG 烧写工具修改,使其成为硬件相近且被 支持的板子。

再次强调,从接线到命令不能生搬硬套,要搞清楚自己板子的电路从而举一反三。