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 烧写Flash , OpenJtag 和 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 参照设置。
注意事项:
- 网上各种号称 Jtag 接口的图片大多不一致,最好仔细检查并进行测量。
- OpenJtag 的 VREF 及GND 一定要接,可能他恰好就是 OpenJtag 中 sn74alvc164245 芯 片的电源,那么不接的话可能就没有输出了。
- TDO 接到 DO 的不要擅作主张改到 DIO 上。
- 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 烧写工具修改,使其成为硬件相近且被 支持的板子。
再次强调,从接线到命令不能生搬硬套,要搞清楚自己板子的电路从而举一反三。