打印
[USB芯片]

CH347应用 USB转SPI功能之:开源项目flahrom实现flash烧写

[复制链接]
427|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzy871238103|  楼主 | 2024-9-5 17:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lzy871238103 于 2024-9-9 14:55 编辑

flashrom
flashrom作为一款强大的flash编程工具,集检测、读取、写入、验证和擦除功能为一体,通常用于擦写主板中闪存BIOS/EFI/coreboot/固件,同时也支持网卡(NIC)、SATA控制器卡和其他可以编程闪存芯片。
项目地址:https://github.com/flashrom/flashrom

CH347简介
CH347是一款高速USB总线转接芯片,通过USB总线提供异步串口、I2C同步串行接口、SPI同步串行接口和JTAG接口等。芯片资源如下:
1. 2个高速串口,最高波特率达9Mbps
2. 1个2线I2C接口,最高速率1MHz
3. 1个4线SPI接口,最高速率60MHz
4. 1个JTAG接口,最高速率60MHz
5.  1个SWD接口

作为CH341的升级款,CH347的功能更加强大,特别是CH347F,无需进行模式切换,即可使用所有功能。
具体可参考:
https://www.wch.cn/products/CH347.html


软件编译
代码的编译在项目中有所介绍这里不多赘述:
flashrom编译方式
而这里为了Windows系统下使用方便,特别将Windows下驱动改为官方驱动,并编译好版本,上传至GitHub仓库。
Windows版本:
https://github.com/ZhiyuanYuanNJ/flashrom/releases

软件使用
flashrom除基本的读写功能外,还可以解除芯片的读写保护,设置写保护区域以及读取芯片的Layout,具体可使用-h指令查看详情。
.\flashrom.exe -h
flashrom 1.4.0-devel (git:) on Windows 10.0 (x86_64) Dreg's mod https://www.rootkit.es v3.3
flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 100ns).
Usage: flashrom.exe [-h|-R|-L|
        -p <programmername>[:<parameters>] [-c <chipname>]
                (--flash-name|--flash-size|
                 [-E|-x|(-r|-w|-v) <file>]
                 [(-l <layoutfile>|--ifd| --fmap|--fmap-file <file>) [-i <region>[:<file>]]...]
                 [-n] [-N] [-f])]
        [-V[V[V]]] [-o <logfile>]

-h | --help                        print this help text
-R | --version                     print version (release)
-r | --read <file>                 read flash and save to <file>
-w | --write (<file>|-)            write <file> or the content provided
                                    on the standard input to flash
-v | --verify (<file>|-)           verify flash against <file>
                                    or the content provided on the standard input
-E | --erase                       erase flash memory
-V | --verbose                     more verbose output
-c | --chip <chipname>             probe only for specified flash chip
-f | --force                       force specific operations (see man page)
-n | --noverify                    don't auto-verify
-N | --noverify-all                verify included regions only (cf. -i)
-x | --extract                     extract regions to files
-l | --layout <layoutfile>         read ROM layout from <layoutfile>
      --wp-disable                  disable write protection
      --wp-enable                   enable write protection
      --wp-list                     list supported write protection ranges
      --wp-status                   show write protection status
      --wp-range=<start>,<len>      set write protection range (use --wp-range=0,0
                                    to unprotect the entire flash)
      --wp-region <region>          set write protection region
      --flash-name                  read out the detected flash name
      --flash-size                  read out the detected flash size
      --fmap                        read ROM layout from fmap embedded in ROM
      --fmap-file <fmapfile>        read ROM layout from fmap in <fmapfile>
      --ifd                         read layout from an Intel Firmware Descriptor
-i | --include <region>[:<file>]   only read/write image <region> from layout
                                    (optionally with data from <file>)
      --image <region>[:<file>]     deprecated, please use --include
-o | --output <logfile>            log output to <logfile>
      --flash-contents <ref-file>   assume flash contents to be <ref-file>
-L | --list-supported              print supported devices
      --progress                    show progress percentage on the standard output
-p | --programmer <name>[:<param>] specify the programmer device. One of
    dummy, raiden_debug_spi, ft2232_spi, serprog, buspirate_spi, dediprog,
    developerbox, pony_spi, usbblaster_spi, pickit2_spi, ch341a_spi, ch347_spi,
    digilent_spi, stlinkv3_spi, dirtyjtag_spi.

You can specify one of -h, -R, -L, -E, -r, -w, -v or no operation.
If no operation is specified, flashrom will only probe for flash chips.
Detect当前的flash
如当前连接flash为W25Q16.V
# -p指定当前adapter为CH347
.\flashrom.exe -p ch347_spi
flashrom 1.4.0-devel (git:) on Windows 10.0 (x86_64) Dreg's mod https://www.rootkit.es v3.3
flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 100ns).
Open CH347 device success.
Invalid SPI speed, using defaul(60M clock spi).
Found Winbond flash chip "W25Q16.V" (2048 kB, SPI) on ch347_spi.
No operations were specified.
读取flash内容
# 指定spi速度为15M
.\flashrom.exe -p ch347_spi:spispeed=15M -r data.bin
写入flash
# 默认SPI速度为60M
.\flashrom.exe -p ch347_spi -w data.bin

使用特权

评论回复
沙发
chenjun89| | 2024-9-6 08:08 | 只看该作者
flashrom是开源免费的吗?

使用特权

评论回复
板凳
lzy871238103|  楼主 | 2024-9-6 10:27 | 只看该作者
chenjun89 发表于 2024-9-6 08:08
flashrom是开源免费的吗?

开源免费的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

粉丝