前言:
最近在做ambarella s2l系列项目时,由于flash容量不够,需要将16M的spi nor flash(W25Q128)增大到32M
spi nor flash
(W25Q256)。由于amba默认sdk没有对W25Q256有很好的支持,因此调试过程中碰到了一些问题,现将调试过程中碰到的问题及解决方法记录如下:
1.flash容量没有增大,分区失败问题:
make menuconfig 中配置:
ambarella_spinor.c中增加w25q256
2.reboot失败问题
修改以上两个地方之后,flash容量已经增大到32M,分区也成功了,但是在soft reset的时候出现系统卡死,复位失败,如下
一直停留在此位置。。。
之后在网上参考了这个博客:
具体的reboot流程请参考上面这博客。
大概是说系统默认支持24bit(3byte)的spi地址模式,而要支持32M以上的spi flash,则必须切换到32bit(4byte)地址模式.在soft reset的时候,spi停留在了32bit模式,没有切换回默认的24bit模式,导致reset后,S2L在默认的24bit模式,无法和32bit模式的spi通讯,系统死机.
需要通过设备驱动中一个shutdown的方法来解决问题。
查阅ambarella_spinor.c的代码,发现驱动中已经有了shutdown的方法。
那为什么还是失败呢?
继续跟踪。。。
发现这个位置,在winbond的flash时直接就return了,直接参考下一个的代码,修改如下:
最终问题解决。
成功重启。.
总结:
通过注册设备的shutdown方法,让我们有机会在系统重启的时刻,做一些deinit的操作.通过此种方法来复位spi flash。