首页 > 其他分享 >使用 OpenJtag 和 flashrom 烧写 spi flash 的一般方法

使用 OpenJtag 和 flashrom 烧写 spi flash 的一般方法

时间:2022-09-06 23:44:27浏览次数:78  
标签:OpenJtag flash 烧写 flashrom spi ID Jtag

Table of Contents


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

注意事项:

  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 号的产品时必须指定芯片类型。

注意事项 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

相关文章