烽火社区
标题:
11添加自己的SPIflash EN25T80到flashrom
[打印本页]
作者:
爱萝莉丶IC
时间:
2016-7-20 10:30 PM
标题:
11添加自己的SPIflash EN25T80到flashrom
本帖最后由 独行客 于 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
添加自己的spi flash到程序
官方参考:
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官方说明官方说明和源码
然后编译
$make
复制代码
验证读写
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
作者:
btiger2000
时间:
2016-7-20 10:36 PM
本帖最后由 独行客 于 2016-7-20 22:55 编辑
万恶的非法字符 555~~~~~~~~~~~~~~,最后发了无数遍,才发现这一行是非法字符,删掉就可以发表了,坑爹
[attach]28362[/attach]
删掉这行就行,不知道怎么回事????
你说非法字符,也要告诉我非法字符在那个位置啊,呀不然怎么发帖啊!!!
测试 :
/* OTP: 256B total; enter 0x3A
可以发表
作者:
狂热者3
时间:
2016-7-20 10:55 PM
本帖最后由 独行客 于 2016-7-20 22:57 编辑
测试 /* OTP: 256B total; enter 0x3A *
测试:
/* OTP: 256B total; enter 0x3A * /*和/之间有一个空格也可发表,去掉空格就提示非法字符,
太坑了,严重打击我的发帖积极性!!!!
作者:
二水ershui
时间:
2016-7-21 09:27 PM
感谢 LiuYang 的精
作者:
无望
时间:
2016-7-22 01:33 PM
/ * * / 非法字符 请留意
欢迎光临 烽火社区 (http://bbs.cnecport.com/)
Powered by Discuz! X3.2