当前位置:   article > 正文

DDR SDRAM内存测试的一种官方方案(简单易懂)_cpu到ddr的测试pattern

cpu到ddr的测试pattern

#话不多说,先上图,再上代码!

 

  1. ddr_base = DDR_BASE;
  2. ddr_size = 0x100000; // Partial memory range
  3. if ( memfill32( ddr_base, ddr_size, 0xffffffff ) )
  4. errors += 0x01;
  5. if ( memfill32( ddr_base, ddr_size, 0xaaaaaaaa ) )
  6. errors += 0x02;
  7. if ( memfill32( ddr_base, ddr_size, 0x55555555 ) )
  8. errors += 0x04;
  9. if ( memfill32( ddr_base, ddr_size, 0x00000000 ) )
  10. errors += 0x08;
  11. Uint32 memfill32( Uint32 start, Uint32 len, Uint32 val )
  12. {
  13. Uint32 i;
  14. Uint32 end = start + len;
  15. Uint32 errorcount = 0;
  16. /* Write Pattern */
  17. for ( i = start; i < end; i += 4 )
  18. {
  19. *( volatile Uint32* )i = val;
  20. }
  21. /* Read Pattern */
  22. for ( i = start; i < end; i += 4 )
  23. {
  24. if ( *( volatile Uint32* )i != val )
  25. {
  26. errorcount++;
  27. break;
  28. }
  29. }
  30. return errorcount;
  31. }
  1. DDR2的寻址方式,为 行地址+列地址+bank地址寻址,理解成2维表格就可以,你是哪一张纸上的二维表格(bank),横纵坐标定位(行列地址)。
  2. 测数据肯定得写呀,比如你有2根数据线,你写个值 0b 01,读出来是0b 10 ,00 ,11都说明你硬件有问题。连线就不对。当然了,肯定不止有2根数据线了,延伸到你有16位数据线,你写0xaaaa(1010 1010 1010 1010),如何能读到0xaaaa,说明你的硬件连线奇偶顺序是对的,因为奇数位都是0,偶数位都是1,错误也只能是第一位和第三位,或者第五位顺序跌倒。
  3. 如果上一步过了,就写数据0b 1100 1100 1100 1100,即0xcccc,把相邻2根线合并为一组,来缩小奇偶范围,接着4根线合并为一组,8根线一组,测完就可以知道你的硬件布线是否出错了。
  4. 以上就是原理,和代码不是完全对照,可以参考理解。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/820017
推荐阅读
相关标签
  

闽ICP备14008679号