|
本帖最后由 独行客 于 2016-7-20 22:51 编辑
11添加自己的SPIflash EN25T80到flashrom
- 接上篇,【banana pi BPI-M3】10把香蕉板当SPI flash编程器
有一个SPIflash 型号为 T80-75HCP 实际为EON_EN25T80的spi flash不支持,有点遗憾,现在解决这个遗憾
上篇已经成功编译了flashrom程序,参考10把香蕉板当SPI flash编程器 里面的
【7. 源码编译flashrom 成功!】http://bbs.ickey.cn/community/fo ... 4371&extra=page%3D1
flashrom 的官方编译参考
https://www.flashrom.org/Downloads#Installation_from_source
官方参考:https://www.flashrom.org/Development_Guidelines#Adding.2Freviewing_a_new_flash_chip
打开源码【flashrom\flashchips.c】,因为【flashrom\flashchips.h】头文件已经有【EON_EN25T80】的ID定义
在
- const struct flashchip flashchips[] =
复制代码
找到EN25S80,复制然后在这段下面,依葫芦画瓢,改改
- {
- .vendor = "Eon",
- .name = "EN25S80",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25S80,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_UNTESTED,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {1650, 1950},
- },
复制代码
依葫芦画瓢,改改,添加一个芯片操作
- #if 1 //ADD EON_EN25T80 BY CHOW
- {
- .vendor = "Eon",
- .name = "EN25T80",
- .bustype = BUS_SPI,
- .manufacture_id = EON_ID_NOPREFIX,
- .model_id = EON_EN25T80,
- .total_size = 1024,
- .page_size = 256,
- .feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
- .tested = TEST_OK_PREW,
- .probe = probe_spi_rdid,
- .probe_timing = TIMING_ZERO,
- .block_erasers = {
- {
- .eraseblocks = { {4 * 1024, 256} },
- .block_erase = spi_block_erase_20,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_d8,
- }, {
- .eraseblocks = { {64 * 1024, 16} },
- .block_erase = spi_block_erase_52,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_60,
- }, {
- .eraseblocks = { {1024 * 1024, 1} },
- .block_erase = spi_block_erase_c7,
- }
- },
- .printlock = spi_prettyprint_status_register_bp2_srwd,
- .unlock = spi_disable_blockprotect,
- .write = spi_chip_write_256,
- .read = spi_chip_read,
- .voltage = {3000, 3600},
- },
- #endif
复制代码
参数详解就不发了,自己找找flashrom官方说明官方说明和源码
然后编译
1、读设备型号
- ./flashrom -p serprog:dev=/dev/ttyACM0:1152000
复制代码- bpi@bananapi:~/flashrom$ ./flashrom -p serprog:dev=/dev/ttyACM0:1152000
- flashrom v0.9.9-r1954 on Linux 3.4.39-BPI-M3-Kernel (armv7l)
- flashrom is free software, get the source code at https://flashrom.org
- Calibrating delay loop... OK.
- serprog: Programmer name is "serprog-STM32/GD"
- serprog: requested mapping AT45CS1282 is incompatible: 0x1080000 bytes at 0xfef80000.
- Found Eon flash chip "EN25T80" (1024 kB, SPI) on serprog.
- No operations were specified.
- bpi@bananapi:~/flashrom$
复制代码 2、读设备型号和详细调试信息
- ./flashrom -p serprog:dev=/dev/ttyACM0:1152000 -V
复制代码- Command line (3 args): ./flashrom -p serprog:dev=/dev/ttyACM0:1152000 -V
复制代码
4、读操作
- bpi@bananapi:~/flashrom$ ./flashrom -p serprog:dev=/dev/ttyACM0:1152000 -r readEN25T80.bin
复制代码- bpi@bananapi:~/flashrom$ ./flashrom -p serprog:dev=/dev/ttyACM0:1152000 -r readEN25T80.bin
- flashrom v0.9.9-r1954 on Linux 3.4.39-BPI-M3-Kernel (armv7l)
- flashrom is free software, get the source code at https://flashrom.org
- Calibrating delay loop... OK.
- serprog: Programmer name is "serprog-STM32/GD"
- serprog: requested mapping AT45CS1282 is incompatible: 0x1080000 bytes at 0xfef80000.
- Found Eon flash chip "EN25T80" (1024 kB, SPI) on serprog.
- Reading flash... done.
- bpi@bananapi:~/flashrom$
复制代码
3、擦除操作(写操作之前一定要先擦除操作)
- bpi@bananapi:~/flashrom$ ./flashrom -p serprog:dev=/dev/ttyACM0:1152000 -E
复制代码
- bpi@bananapi:~/flashrom$ ./flashrom -p serprog:dev=/dev/ttyACM0:1152000 -E
- flashrom v0.9.9-r1954 on Linux 3.4.39-BPI-M3-Kernel (armv7l)
- flashrom is free software, get the source code at https://flashrom.org
- Calibrating delay loop... OK.
- serprog: Programmer name is "serprog-STM32/GD"
- serprog: requested mapping AT45CS1282 is incompatible: 0x1080000 bytes at 0xfef80000.
- Found Eon flash chip "EN25T80" (1024 kB, SPI) on serprog.
- Erasing and writing flash chip... Erase/write done.
- bpi@bananapi:~/flashrom$
复制代码
4、写操作
- bpi@bananapi:~/flashrom$ ./flashrom -p serprog:dev=/dev/ttyACM0:1152000 -w writeEN25T80.bin
复制代码
- bpi@bananapi:~/flashrom$ ./flashrom -p serprog:dev=/dev/ttyACM0:1152000 -w writeEN25T80.bin
- flashrom v0.9.9-r1954 on Linux 3.4.39-BPI-M3-Kernel (armv7l)
- flashrom is free software, get the source code at https://flashrom.org
- Calibrating delay loop... OK.
- serprog: Programmer name is "serprog-STM32/GD"
- serprog: requested mapping AT45CS1282 is incompatible: 0x1080000 bytes at 0xfef80000.
- Found Eon flash chip "EN25T80" (1024 kB, SPI) on serprog.
- Reading old flash chip contents... done.
- Erasing and writing flash chip... Erase/write done.
- Verifying flash... VERIFIED.
- bpi@bananapi:~/flashrom$
复制代码
4、验证烧写是否成功
重新读出来,然后比较下
- bpi@bananapi:~/flashrom$ ./flashrom -p serprog:dev=/dev/ttyACM0:1152000 -r rereadEN25T80.bin
- flashrom v0.9.9-r1954 on Linux 3.4.39-BPI-M3-Kernel (armv7l)
- flashrom is free software, get the source code at https://flashrom.org
- Calibrating delay loop... OK.
- serprog: Programmer name is "serprog-STM32/GD"
- serprog: requested mapping AT45CS1282 is incompatible: 0x1080000 bytes at 0xfef80000.
- Found Eon flash chip "EN25T80" (1024 kB, SPI) on serprog.
- Reading flash... done.
- bpi@bananapi:~/flashrom$
复制代码 比较下
- bpi@bananapi:~/flashrom$ cmp rereadEN25T80.bin writeEN25T80.bin
复制代码 没有返回信息表示 写进去的和重新读出来的都一样,表示添加spi flash 【EN25T80】成功!!!
规格书 EN25T80
25T80-en-规格书技术资料.pdf
改好的源码
flashrom_add_EN25T80_OK_20160720.zip
|
|