查看: 688|回复: 3
打印 上一主题 下一主题

【banana pi BPI-M3】10把香蕉板当SPI flash编程器

[复制链接] qrcode

28

主题

31

帖子

94

积分

注册会员

Rank: 2

积分
94
楼主
跳转到指定楼层
发表于 2016-7-17 02:15 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 独行客 于 2016-7-17 14:42 编辑

【banana pi BPI-M3】10把香蕉板当SPI flash编程器


所有资料镜像工具都分享到百度网盘:
http://pan.baidu.com/s/1c1UzF00
没有密码,欢迎下载~~~~~~

感谢前人造的轮子
https://www.flashrom.org/RaspberryPi#Prerequisites

1.     烧系统镜像
[2016-05-17-ubuntu-mate-16.04-Xenial-gpu-mpv-1080p-bt-arduino-scratch-beta2-bpi-m3-sd-emmc.img.zip]
在我网盘里面可以下载

新镜像的账号密码是:账号:bpi 密码:bananapi

    为什么烧这个镜像?
试验发现这个镜像有spidev的设备驱动,当然别的系统镜像也有spidev的设备也可以,否则只能自己装驱动,比较麻烦就不说了
用命令发现如下/dev/spidev0.0
  1. root@bananapi:/home/bpi# ls /dev/spi*
  2. /dev/spidev0.0
  3. root@bananapi:/home/bpi#
复制代码



2.        安装flashrom软件
打开终端,一句话搞定: sudo apt-get installflashrom

  1. # bpi@bananapi:~$ sudo apt-get installflashrom
  2. [sudo] password for bpi:输入超级用户的密码
  3. Reading package lists... Done
  4. Building dependency tree      
  5. Reading state information... Done
  6. flashrom is already the newest version (0.9.9~rc1+r1942-1).
  7. 0 upgraded, 0 newly installed, 0 to removeand 425 not upgraded.
复制代码

前提是板子要联网,否则只能自己找源码编译安装了。


3.        硬件接线

SPI flash 的通用接口定义:

图片无法上传,暂时上传flash规格书:
25T80-en-规格书技术资料.pdf
BPI-M3上的40pin扩展口上 用杜邦线接出下面6

17脚:DCDC13.3V电源      SPI flash  8 VDD
19脚:SPI0_MOSI              SPI flash  5 SI
21脚:SPI0_MISO              SPI flash  2 SO
23脚:SPI0_CLK               SPI flash  6 SCK
24脚:SPI0_CS                 SPI flash  1 CS
25脚:GND                    SPI flash  4 GND

注意:
SPI flash 的其余脚:3WP接和7HOLD直接连到3.3V或用10K电阻上拉到3.3V


上图:
图片传不上去,坑爹!
所有资料在云盘可以下载,免密码:
http://pan.baidu.com/s/1kVm5P7h



回复

使用道具 举报

1

主题

109

帖子

21

积分

新手上路

Rank: 1

积分
21
沙发
发表于 2016-7-17 02:16 PM | 只看该作者
本帖最后由 独行客 于 2016-7-17 14:40 编辑

4.        启动软件测试

  $ flashrom -p linux_spi:dev=/dev/spidev0.0

  1. bpi@bananapi:~$ flashrom -p linux_spi:dev=/dev/spidev0.0
复制代码

说明硬件连接已经OK,软件已经识别到我的SPI FLASH
[Found Eon flash chip "unknown Eon SPI chip" (0 kB, SPI) on linux_spi.]
而我实际放到座子上的是T80-75HCP 2M_BYTE [可直接代换 EN25T80]


然后,我换了一片SPI flash 重新测试,烙铁拆下后比较脏,看不清具体型号。
  1. bpi@bananapi:~$ flashrom -p linux_spi:dev=/dev/spidev0.0
  2. flashrom v0.9.9-rc1-r1942 on Linux 3.4.39-BPI-M3-Kernel (armv7l)
  3. flashrom is free software, get the source code at https://flashrom.org
  4. Calibrating delay loop... OK.
  5. Found Macronix flash chip "MX25L6405" (8192 kB, SPI) on linux_spi.
  6. Found Macronix flash chip "MX25L6405D" (8192 kB, SPI) on linux_spi.
  7. Found Macronix flash chip "MX25L6406E/MX25L6408E" (8192 kB, SPI) on linux_spi.
  8. Found Macronix flash chip "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E" (8192 kB, SPI) on linux_spi.
  9. Multiple flash chip definitions match the detected chip(s): "MX25L6405", "MX25L6405D", "MX25L6406E/MX25L6408E", "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E"
  10. Please specify which chip definition to use with the -c <chipname> option.
复制代码

从上面的提示[Multiple flash chip definitions match the detected chip(s)]可以看出这个芯片有多重名字,具体操作的时候需要指定具体型号

哈哈,终于识别到我的芯片型号了


5.        使用flashrom软件

  1. $flashrom –h
复制代码

获取使用帮助

  1. bpi@bananapi:~$ flashrom -h
  2. flashrom v0.9.9-rc1-r1942 on Linux 3.4.39-BPI-M3-Kernel (armv7l)
  3. flashrom is free software, get the source code at https://flashrom.org

  4. Please note that the command line interface for flashrom has changed between
  5. 0.9.5 and 0.9.6 and will change again before flashrom 1.0.

  6. Usage: flashrom [-h|-R|-L|-p <programmername>[:<parameters>] [-c <chipname>]
  7. [-E|(-r|-w|-v) <file>] [-l <layoutfile> [-i <imagename>]...] [-n] [-f]]
  8. [-V[V[V]]] [-o <logfile>]

  9. -h | --help                        print this help text
  10. -R | --version                     print version (release)
  11. -r | --read <file>                 read flash and save to <file>
  12. -w | --write <file>                write <file> to flash
  13. -v | --verify <file>               verify flash against <file>
  14. -E | --erase                       erase flash memory
  15. -V | --verbose                     more verbose output
  16. -c | --chip <chipname>             probe only for specified flash chip
  17. -f | --force                       force specific operations (see man page)
  18. -n | --noverify                    don't auto-verify
  19. -l | --layout <layoutfile>         read ROM layout from <layoutfile>
  20. -i | --image <name>                only flash image <name> from flash layout
  21. -o | --output <logfile>            log output to <logfile>
  22. -L | --list-supported              print supported devices
  23. -p | --programmer <name>[:<param>] specify the programmer device. One of
  24.     internal, dummy, gfxnvidia, drkaiser, satasii, atavia, it8212, serprog,
  25.     buspirate_spi, dediprog, pony_spi, nicintel, nicintel_spi, nicintel_eeprom,
  26.     ogp_spi, linux_spi, pickit2_spi, ch341a_spi.

  27. You can specify one of -h, -R, -L, -E, -r, -w, -v or no operation.
  28. If no operation is specified, flashrom will only probe for flash chips.
复制代码

尝试后,试验成功!


5.1        擦除芯片操作


bpi@bananapi:~$ flashrom -p linux_spi:dev=/dev/spidev0.0 -c MX25L6405D -E

  1.     bpi@bananapi:~$ flashrom -p linux_spi:dev=/dev/spidev0.0 -c MX25L6405D -E
  2. flashrom v0.9.9-rc1-r1942 on Linux 3.4.39-BPI-M3-Kernel (armv7l)
  3. flashrom is free software, get the source code at https://flashrom.org

  4. Calibrating delay loop... OK.
  5. Found Macronix flash chip "MX25L6405D" (8192 kB, SPI) on linux_spi.
  6. Erasing and writing flash chip... Erase/write done.
  7. bpi@bananapi:~$
复制代码

擦除命令解释:
  1. flashrom -p linux_spi:dev=/dev/spidev0.0 -c MX25L6405D -E
复制代码

前面的不解释,后面的 –c MX25L6405D 表示指定芯片型号
-E 表示擦除整芯片
擦除时,感觉就像死机一样,约2分钟后擦除完成【Erase/write done】

5.2        读flash操作
  1. ~$ flashrom -p linux_spi:dev=/dev/spidev0.0 -c MX25L6405D -r readMX25L6405D.bin
  2. flashrom v0.9.9-rc1-r1942 on Linux 3.4.39-BPI-M3-Kernel (armv7l)
  3. flashrom is free software, get the source code at https://flashrom.org

  4. Calibrating delay loop... OK.
  5. Found Macronix flash chip "MX25L6405D" (8192 kB, SPI) on linux_spi.
  6. Reading flash... done.
复制代码

命令解释:
  1. flashrom -p linux_spi:dev=/dev/spidev0.0 -c MX25L6405D -r readMX25L6405D.bin
复制代码

后面的 -r readMX25L6405D.bin 表示读取flash到当前目录的  readMX25L6405D.bin文件

显示读出来的二进制数据用hexdump命令,系统自带

  1. bpi@bananapi:~$ hexdump readMX25L6405D.bin      
  2. 0000000 ffff ffff ffff ffff ffff ffff ffff ffff
  3. *
  4. 0800000
  5. bpi@bananapi:~$
复制代码

由于是擦除后才读出的,所以整个文件都是1

利用XP上的【WinSCP】软件可以把文件拷贝到XP系统,

5.3        写flash操作
  • 刚刚想把读出来的数据写到flash,结果提示写入的内容和flash的内容相同,跳过写操作

  • 然后写入比flash小的文件,提示文件太小烧写失败

  • 然后想到把刚刚读出的8M的文件在XP下的WinHex软件修改下,再烧进去测试下flash的写操作
    1. bpi@bananapi:~$ flashrom -p linux_spi:dev=/dev/spidev0.0 -c MX25L6405D -w writeMX25L6405D.bin
    2. flashrom v0.9.9-rc1-r1942 on Linux 3.4.39-BPI-M3-Kernel (armv7l)
    3. flashrom is free software, get the source code at https://flashrom.org

    4. Calibrating delay loop... OK.
    5. Found Macronix flash chip "MX25L6405D" (8192 kB, SPI) on linux_spi.
    6. Reading old flash chip contents... done.
    7. Erasing and writing flash chip... Erase/write done.
    8. Verifying flash... FAILED at 0x00000000! Expected=0x68, Found=0xff, failed byte count from 0x00000000-0x007fffff: 0xa0ab
    9. Your flash chip is in an unknown state.
    10. Please report this on IRC at chat.freenode.net (channel #flashrom) or
    11. mail flashrom@flashrom.org, thanks!
    12. bpi@bananapi:~$
    复制代码

命令解释:
  1. flashrom -p linux_spi:dev=/dev/spidev0.0 -c MX25L6405D -w writeMX25L6405D.bin
复制代码

-w writeMX25L6405D.bin  把writeMX25L6405D.bin烧到flash
但是writeMX25L6405D.bin文件大小必须等于flash的大小,内容不能和flash相同,否则烧写失败

  • 烧写完后读出来对比下,烧写时已经自动校验过了
  1. flashrom -p linux_spi:dev=/dev/spidev0.0 -c MX25L6405D -r rrMX25L6405D.bin
复制代码

可以用vi 或 nano命令来查看里面的文本内容
  1. $nano rrMX25L6405D.bin
复制代码

也可以拷贝到电脑上打开对比下

6.        强制使用之前没有支持到的flash芯片


强制擦除指定芯片型号
擦除失败
  1. flashrom -p linux_spi:dev=/dev/spidev0.0 -f -c EN25B80 -E
复制代码


强制读取
  1. flashrom -p linux_spi:dev=/dev/spidev0.0 -f -c EN25B80 -r readEN25T80.bin
复制代码

读出来的全部是1

写也失败
也就是目前flashrom 不支持我的EN25T80,需要自己在源码里添加,后面再说


7.        源码编译flashrom 成功!


参考链接https://www.flashrom.org/Downloads#Releases


实际操作是:
先安装subversion 等组件

  1. bpi@bananapi:~$ sudo apt install subversion

  2. sudo apt-get install pciutils-dev
  3. sudo apt-get install  build-essential
  4. sudo apt-get install zlib1g-dev
  5. sudo apt-get install libftdi-dev

  6. sudo apt-get install  libusb-dev
复制代码


libusb-dev 安装了,编译flashrom还是提示缺usb的头文本,干脆直接源码编译安装
源码编译安装libusb
https://sourceforge.net/projects/libusb/?source=typ_redirect
下载后

  1. tar -vxf libusb-1.0.20.tar.bz2
  2. cd libusb-1.0.20/
  3. ./configure
  4. make
  5.         sudo make install
复制代码


       下载flashrom源码
然后才是下面的步骤正式编译flashrom:

  1. svn co svn://flashrom.org/flashrom/trunk flashrom
  2. $ cd flashrom
  3. $ make
  4. # The next step is optional!
  5. $ sudo make install  
  6. 上面的install 安装可以省略,直接在编译成功路径下运行
  7. ./flashrom -p linux_spi:dev=/dev/spidev0.0
复制代码





8.    总结
             烧写8M的flash蛮快的
             但是我的1M的        EN25T80不支持,有点遗憾,源码编译后应该能添加进去,但是暂时不折腾



所有资料在云盘可以下载,免密码:

http://pan.baidu.com/s/1kVm5P7h




回复 支持 反对

使用道具 举报

0

主题

69

帖子

14

积分

新手上路

Rank: 1

积分
14
板凳
发表于 2016-7-17 10:44 PM | 只看该作者
马一下,很不错~
回复 支持 反对

使用道具 举报

0

主题

99

帖子

2

积分

新手上路

Rank: 1

积分
2
地板
发表于 2016-7-19 04:08 PM | 只看该作者
马一下,很不错~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表