现在做的一个项目遇到的问题。
uboot是2010的 spi flash 是 winbond W25Q256。启动了uboot之后在命令行下使用md 0x1c000000 ---这是最开始的位置 以及md 0x1d000000 这两个位置的内容是一样的。 说明只有flash的前16M在ram中,到了16M之后又反转到了最开始的位置读。
我看了spi flash驱动是没有问题的 。我直接在命令行下使用 sf read 0x1d000000 1000000 1000000 然后在显示1d位置的内容是flash中的内容。
但是上电重启flash的内容仍然没有读到ram中。我觉得应该是寻址宽度的原因,spi flash原来是24bit也就是3字节的寻址方式,只能读16M,后来我改成了4字节的。后面我看到了》
单板linux内核添加spi flash驱动后,在shell下敲reboot命令挂死。
在内核中的reboot的系统调用中添加打印后,发现最后代码走到了对CPU的寄存器写,让CPU复位。好像看不出有任何问题。
联想起之前的文章 "32M的spi接口Flash和24bit地址模式 " (http://blog.chinaunix.net/uid-26598889-id-4304874.html)。CPU启动时是按照24bit模式启动的,然后添加内核的spi flash驱动后,由于是32M bytes flash,驱动将flash从24bit模式切换到了32bit模式。导致单板reboot后,CPU是24bit模式,而flash还是32bit模式,无法启动uboot而挂死。 ----http://blog.chinaunix.net/uid-26598889-id-4351061.html 上面的说 我觉得是不是这个问题。但是我又不知道该如何把那个CPU的模式改为32bit的模式。
求指点。