u-boot 只识别32M spi flash的问题

ckangle 2014-11-19 09:09:07
现在做的一个项目遇到的问题。
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的模式。
求指点。
...全文
1662 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
suibozhulii 2017-01-08
  • 打赏
  • 举报
回复
有一个与cpu相关被编译的spi驱动文件,一般其中都会有一个支持设置为4byte的函数
vanguard2021 2016-12-05
  • 打赏
  • 举报
回复
请问楼主, 怎么修改为32Bit地址模式的? 困惑中
zhxianbin 2014-11-20
  • 打赏
  • 举报
回复
阅读一下代码试试
ckangle 2014-11-20
  • 打赏
  • 举报
回复
引用 9 楼 zhxianbin 的回复:
http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/69688.aspx
实际上我想要问的就是这么修改CPU为32bit的模式。。。。
ckangle 2014-11-19
  • 打赏
  • 举报
回复
引用 7 楼 zhxianbin 的回复:
文章的意思是继续使用 24bit地址模式
但是我想改为32bit的模式,不知道能不能改。
zhxianbin 2014-11-19
  • 打赏
  • 举报
回复
文章的意思是继续使用 24bit地址模式
ckangle 2014-11-19
  • 打赏
  • 举报
回复
引用 5 楼 zhxianbin 的回复:
flash的前16M在ram中,到了16M之后又反转到了最开始的位置读 这就说明驱动对地址的处理有问题啊,也许驱动中只取了地址的 24bit(16M),导致后面的读不出来
我跟过,在uboot启动过程中调用了spi flash驱动,只是调用的只是对uboot的镜像和环境设置做了读写,也就是64k左右的数据。 而后面的数据没有使用spi flash的驱动来读。 所以上电启动过程中应该是CPU进行的数据读写,那个时候驱动还没有启动。 而且我用过命令接口可以寻址到16M之后的数据 所以驱动本身是没有问题的。我觉得应该是之前的某个时候CPU把flash中数据读取到了内存中,而又因为CPU可能是3字节的寻址模式,所以只能读取16M。
zhxianbin 2014-11-19
  • 打赏
  • 举报
回复
flash的前16M在ram中,到了16M之后又反转到了最开始的位置读 这就说明驱动对地址的处理有问题啊,也许驱动中只取了地址的 24bit(16M),导致后面的读不出来
ckangle 2014-11-19
  • 打赏
  • 举报
回复
引用 2 楼 zhxianbin 的回复:
为什么驱动没问题呢?
sf read 0x1d000000 1000000 1000000因为这个命令调用的就是spi flash驱动的read接口,如果说驱动有问题的话是读不到ram中去的。
ckangle 2014-11-19
  • 打赏
  • 举报
回复
引用 1 楼 ckangle 的回复:
题目手滑了 是只识别16M
sf read 0x1d000000 1000000 1000000因为这个命令调用的就是spi flash驱动的read接口,如果说驱动有问题的话是读不到ram中去的。
zhxianbin 2014-11-19
  • 打赏
  • 举报
回复
为什么驱动没问题呢?
ckangle 2014-11-19
  • 打赏
  • 举报
回复
题目手滑了 是只识别16M

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧