nuc970 spi flash 32M reboot 问题

 

 

昨天测试2块nuc970板子重启时遇到,其中一块重启过后提示没有image问题。如下:

nuc970 spi flash 32M reboot 问题

另一块则没有。

分析两块flash , 一块是16MB(未出现),一块32MB(出现)。

经过网上搜索 发现可能是 address 3byte 和 4byte模式。

 

address 3byte 和 4byte模式 是指 flash 读取时的地址位数。地址位数决定寻址范围,所以 3字节模式最多支持 16MB。更大的flash需要用到 4byte模式, 或者把flash 分成多个16MB读取; uboot 和 kernel 在检测到超过16MB 时 ,默认设置 4byte模式。

Uboot:

nuc970 spi flash 32M reboot 问题

 

Linux:

nuc970 spi flash 32M reboot 问题

 

有的芯片支持启动时设置,3byte 还是4byte ; nuc970貌似不支持,所以出现软重启时检测不到image情况,因为 两边的地址模式不匹配。断电重启则不会出现。

 

解决办法:

给mtd注册一个reboot_notifier, 在软重启时设置flash退出4byte mode。

 

代码:

 首先实现函数,退出时调用

nuc970 spi flash 32M reboot 问题

然后注册函数:

nuc970 spi flash 32M reboot 问题

nuc970 spi flash 32M reboot 问题

 

注意添加头文件

#include <linux/reboot.h>