nuc970 spi flash 32M reboot 问题
昨天测试2块nuc970板子重启时遇到,其中一块重启过后提示没有image问题。如下:
另一块则没有。
分析两块flash , 一块是16MB(未出现),一块32MB(出现)。
经过网上搜索 发现可能是 address 3byte 和 4byte模式。
address 3byte 和 4byte模式 是指 flash 读取时的地址位数。地址位数决定寻址范围,所以 3字节模式最多支持 16MB。更大的flash需要用到 4byte模式, 或者把flash 分成多个16MB读取; uboot 和 kernel 在检测到超过16MB 时 ,默认设置 4byte模式。
Uboot:
Linux:
有的芯片支持启动时设置,3byte 还是4byte ; nuc970貌似不支持,所以出现软重启时检测不到image情况,因为 两边的地址模式不匹配。断电重启则不会出现。
解决办法:
给mtd注册一个reboot_notifier, 在软重启时设置flash退出4byte mode。
代码:
首先实现函数,退出时调用
然后注册函数:
注意添加头文件
#include <linux/reboot.h>