BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #10758同步于 2011/6/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

求助,写数据到内存中出现有规律错误

AuGust0806
2011/6/22镜像同步16 回复
利用uboot启动内核kernel,但是刚启动uboot之后就卡住了,分析代码和现象,利用jtag调试,发现拷贝nandflash中二进制uboot数据到内存中之后,比较内存与nandflash二进制数据是否相同,结果不相同失败,然后死循环卡住的。 分析在内存中的数据出现有规律的错位问题,于是修改uboot用于测试,进一步证明确实是有规律的错位问题。如附件,代码中实际上是从地址0x57e00000开始,使用以下16个字节循环写入内存中,(E1FB0050--DA04FFFE--0050E1FA--6EE5CC(I++)),(I++)初始化为0.但是发现对于最低4位地址的数据,把地址4--7的数据写到了c---f中,而把c---f的数据写到了下一行的4---7地址中。 希望有类似开发经验的人给点提示。 谢谢了
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
hobby机器人#1 · 2011/6/22
看来是读写内存出错了吧 希望澄清几点,有助于分析问题 1、看描述应该是uboot都启动完?启动到什么位置了? uboot能输入命令了吗?可以把已有的uboot打印发出来看看。 2、是否能单独确认flash和内存的读写是正确无误的。 比如可以在uboot中加些调试语句做flash和内存的读写测试,多写一些地址,写入不同的数值,然后读出来比较。 注意:flash的读写测试和内存的读写测试分开进行,以便隔离问题。
hobby机器人#2 · 2011/6/22
对了,还有一点 是自己做的板子吗?如果是的话,可能有两点也要考虑 1、是否存在焊接问题,比如焊错了管脚,或者有虚焊 2、板子的配置是怎么来的,比如sdram的时序和频率等配置
AuGust0806机器人#3 · 2011/6/23
【 在 hobby 的大作中提到: 】 : 看来是读写内存出错了吧 : 希望澄清几点,有助于分析问题 : 1、看描述应该是uboot都启动完?启动到什么位置了? : ................... 1、uboot启动并未完成,在sram中执行uboot前4k的代码没有问题,这个执行中copy-uboot-to-dram出现了问题,拷贝之后对比两者二进制不相同,于是死循环卡住的。所以还没到执行命令这个阶段。 2、分别测试nand和内存,可以确定的是nandflash中的读写没有问题。内存的读写有问题,因为单独的往0x57e0000f写入一个字节数据,结果这个数据被写到了0x57e00017这个位置上了。 3、是自己做的板子,没什么经验,感觉焊错管脚的可能比较小,昨天也和同学检查了一遍,没发现问题。虚焊的可能性不大,因为出现错误明显错位,如果虚焊应该很乱,毫无规律可言(个人看法)。 4、寄存器的配置问题,有哪个寄存器的配置跟这种错位规律有联系吗.burstlength为4,cl设置为2,对着数据手册来设置寄存器的。而时序以及频率配置按照ddr sdram的配置来的。
ArmStrong机器人#4 · 2011/6/23
感觉是sdram读写的问题啊,应该不是虚焊,否则会很乱的.也许是设计问题或者信号问题吧, 后者的话可以降频试试.另外再看看sdram的初始化吧. 【 在 AuGust0806 (APologize) 的大作中提到: 】 : 1、uboot启动并未完成,在sram中执行uboot前4k的代码没有问题,这个执行中copy-uboot-to-dram出现了问题,拷贝之后对比两者二进制不相同,于是死循环卡住的。所以还没到执行命令这个阶段。 : 2、分别测试nand和内存,可以确定的是nandflash中的读写没有问题。内存的读写有问题,因为单独的往0x57e0000f写入一个字节数据,结果这个数据被写到了0x57e00017这个位置上了。 : 3、是自己做的板子,没什么经验,感觉焊错管脚的可能比较小,昨天也和同学检查了一遍,没发现问题。虚焊的可能性不大,因为出现错误明显错位,如果虚焊应该很乱,毫无规律可言(个人看法)。 : ...................
vanxy机器人#5 · 2011/6/23
前一阵我用CPU向DSP的寄存器写数,写出来的结果就是这样,后来找到原因是DSP boot没有成功,没boot成功的原因是CPU权限设置不对。不知道对你有没有帮助
AuGust0806机器人#6 · 2011/6/23
【 在 vanxy 的大作中提到: 】 : 前一阵我用CPU向DSP的寄存器写数,写出来的结果就是这样,后来找到原因是DSP boot没有成功,没boot成功的原因是CPU权限设置不对。不知道对你有没有帮助 : -- 权限设置??这个是什么意思呢?能具体点吗,网上搜索相关内容也没结果呀?
AuGust0806机器人#7 · 2011/6/23
【 在 ArmStrong 的大作中提到: 】 : 感觉是sdram读写的问题啊,应该不是虚焊,否则会很乱的.也许是设计问题或者信号问题吧, 后者的话可以降频试试.另外再看看sdram的初始化吧. : 【 在 AuGust0806 (APologize) 的大作中提到: 】 : : 1、uboot启动并未完成,在sram中执行uboot前4k的代码没有问题,这个执行中copy-uboot-to-dram出现了问题,拷贝之后对比两者二进制不相同,于是死循环卡住的。所以还没到执行命令这个阶段。 : ................... 首先谢谢了。又作了一部分测试,将ddr的频率由133mhz降低为66mhz,这个有规律的错位错误消失了,但是还是uboot卡住了,出现了很小很小部分的随机错误,再将内存降低频率到33mhz,也是随机错误。请问,这个降低频率之后,错位错误消失是不是说明信号问题,这个信号问题指的是什么,是来自于硬件布线吗?
hobby机器人#8 · 2011/6/23
那就是说纯粹是SDRAM的读写问题了呗 如果有可参考的板子或设计,比照着查一查 软件上,找相关的寄存器配置。之前实验室做的板子用的是ppc的cpu,里面有很多控制内存读写的寄存器,可配置时序延时等。 硬件上,SDRAM有没有一些信号线是直接拉高或拉低的(例如控制芯片的工作模式),也查一查? 【 在 AuGust0806 的大作中提到: 】 : 首先谢谢了。又作了一部分测试,将ddr的频率由133mhz降低为66mhz,这个有规律的错位错误消失了,但是还是uboot卡住了,出现了很小很小部分的随机错误,再将内存降低频率到33mhz,也是随机错误。请问,这个降低频率之后,错位错误消失是不是说明信号问题,这个信号问题指的是什么,是来自于硬件布线吗?
hobby机器人#9 · 2011/6/23
之前好像有个什么芯片的时序控制,看手册不太懂,但是经过一些实验,找到一组比较稳定的配置,就那么用了。楼主要是没办法了也可以试试 大致的想法是:遍历所有配置,每组配置进行读写测试,找效果最好的。 例如A、B、C那个寄存器,那么就三层循环,在最内侧的循环里做读写测试。然后打印各组结果。 当然,前提是你的uboot能打印出来东西