Table of Contents
很多板子的系统或者是 BIOS 是存储在 SPI Flash 中,此类 Flash 芯片大多使用 top 封 装,在板上也比较明显。烧写工具在某宝上可以轻易买到,效果也不错,手里恰好有 OpenJtag ,不常用但想着既然可能通过Jtag 烧写Flash, 直接烧写应该也可能,经过各种搜 索、研究和测试,成功读写国产的KH25LXXX芯片。由于网上记录比较多的是 使用 Jtag 及 JFlashSPI 烧写Flash , OpenJtag 和 oflash 烧写特定板子上的Flash。这里记录使用 OpenJtag 和 flashrom 烧写 SPI FLASH 芯片的 注意事项。
注意 这里要申明的是我买的 OpenJtag 比较早,也不知道与各位手中的产品是不是一致, 以下内容仅适合本人手中的产品,仅可作为参考。 我的产品虽然出自百问但是 VID 和 PID 分别是 1457 和 5118 ,即 openmoko Neo1973 debug board v2 。 flashrom 刚好支持。
1 Jtag
本来是有标准的,却衍生出大概6种不同数量针脚的接法,每个产品具体使用的哪种需要通 过产品手册和万用表去测一测进行判断和核实。
而板子上面的芯片及相关线的走向和接法也同样决定了后面使用 flashrom 的命令,详见后 文。本文介绍的是采用 FT2232D 主控及 74alvc164245 输入输出转换为 Jtag 板子,主 控电源由 USB 提供,而 74alvc164245 电源从Jtag vref 输入,且期 1OE 引脚由 ft2232 ADBUS4 引脚控制。
2 flashrom
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 号的产品时必须指定芯片类型。
注意事项 csgpiol 参数是否需要要看自己的 JTag 板子是否使用了 ft2232 上A口的引脚 来控制 SPI/JTag 信号输出。比如我的板子如果不使用这个参数是不能读写的,原因就是板 子上的 sn74alvc164245 的输出控制引脚由 ft2232 ADBUS4/GPIOL0 输出电平控制。这里 csgpiol=0 的意思就是 ft2232 输出使能信号时一并将此线电平置低,让信号得以到达 Flash 芯片。
2.6 总结
理论上只要是 spi flash 都可以使用 jtag 设备模拟 spi 接口进行烧写。而使用 ft2232 主控的 Jtag 不论是 OpenJtag 还是 'CloseJtag' 都可以变成烧写工具,即使它的VID 和 PID 都是自定义的,我们还可以使用 FT2232 的 FT_PROG 烧写工具修改,使其成为硬件相近且被 支持的板子。
再次强调,从接线到命令不能生搬硬套,要搞清楚自己板子的电路从而举一反三。
本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议 进行许可。
标签:OpenJtag,flash,烧写,flashrom,spi,ID,Jtag From: https://www.cnblogs.com/bu-wu-zheng-ye/p/16663745.html