1. Denx的UBOOT针对DDR内存的检测过程

从上图,可以看出要经过3个阶段:

(1) 检测数据线

如果数据线是断开的,则一切测试都无从谈起,因此先测试Data lines.

Data lines可能有2种错误:

(1.1) 断开

如果是两根数据线,只需要写入并读出一个pattern=0b01(0b开头表示二进制数)就能判断它们是否短路或断开。

大部分的嵌入式平台不止两根数据线,我们以64位地址线为例:

pattern = 0b101010101010101010.... 能检测出奇偶位之间的数据错误。

如果这个错误被排除,每两根数据线组成一组(这是理解下一个pattern的关键),

再用相同的办法,检测每相邻两组之间是否有短路,就得到第二个pattern,就是 0b110011001100......

依次类推,以4根数据线为一组,8根线为一组,......,相继得到共6个pattern,分别是 :

0xaaaaaaaaaaaaaaaa (单根数据线为一组)

0xcccccccccccccccc (02根数据线为一组)

0xf0f0f0f0f0f0f0f0 (04根数据线为一组)

0xff00ff00ff00ff00 (08根数据线为一组)

0xffff0000ffff0000 (16根数据线为一组)

0xffffffff00000000 (32根数据线为一组)

只要相继写入并读出这6个pattern就能验证是否存在数据线交叉短路错误。

取以上6个paatern的反码,总共12个pattern,就能检测到每一位都可以写入和读出0和1。

(1.2) 布线造成的互相短路

-------------------------------------------------------------------

数据线的其它问题:

(1.1) 什么是floating buses错误

floating buses会“欺骗”测试软件,如果测试软件写入并很快读出一个值的时候,写操作会跟数据线上的电容充电,

总线会短暂的保持它的状态。当测试软件读操作时,总线会返回刚写入的值,即使实际上该数据线是断路的。

(1.2) 如何检测数据线的floating buses错误

写入和读回之间再插入一次对不同地址写入不同值的操作。

例如,X写入X1位置,Y写入Y1位置,再从X1位置读出X值则表示floating buses错误不存在。

(2) 检测地址线

如果地址线存在错误,其症状是地址空间中的两个不同位置被映射到同一物理存储位置。

更通俗地讲,就是写一个位置却“改变”了另一个位置。

地址线的错误检测相对简单,其算法是:

(2.1)将地址的值作为内容写入该地址处,汇编的表示方法是 (addr) = addr。

即将地址值写到地址对应的空间里,这样确保每一个位置的内容不同。

(2.2)依次将内存基地址的某一根地址线的值翻转(flip/toggle)得到某个地址,从该地址取值,

如果该值和基地址的值相等,则表示某一位地址线有问题。

这个算法的特点是每次只检测一根地址线,方法简单有效。

(3) 检测DDR物理内存部件

存储单元的检测则是真正对DDR内存芯片的检测。内存芯片的常见错误是bit-stuck,简而言之,就是让它是0,它偏为1,

让它为1,它偏为0,检测方法也很简单,就是用不同的pattern去写尽可能所有的地址并读回比较。

有一些常用的 pattern如0x5555, 0xAAAA等。

2. Uboot中的测试命令

在Uboot命令行下也有几个简单的命令可以检测常见内存故障,如下所示:

(1)mtest addr lenth pattern

用特定的pattern去刷DDR的空闲空间.

这个命令需要注意,DDR在Uboot启动后被映射到了0地址,但是uboot的代码和堆、栈空间0x10000000处开始,

这些空间是不能被刷的,否则就挂死了。

(2)复制NOR flash的内容到内存中,如 cp.b 0x20080000 0x7fc0 20000,然后比较 cmp.b 0x20080000 0x7fc0 20000。

(3)下载kernel image到内存中,copy NOR flash 或tftp都行,然后调用iminfo LOAD_ADDR 检测CRC错误。

第二种和第三种方法可以说Pattern的随机性更大一些。

当然最彻底的检测方法当然是长时间跑Linux系统,上面的方法更适用于系统不稳定时定位错误。

linux下uboot内存测试,uboot中的内存测试方法相关推荐

  1. Linux下几款C++程序中的内存泄露检查工具

    Linux下编写C或者C++程序,有很多工具,但是主要编译器仍然是gcc和g++.最近用到STL中的List编程,为了检测写的代码是否会发现内存泄露,了解了一下相关的知识. 所有使用动态内存分配(dy ...

  2. ZedBoard--(5)嵌入式Linux下的DMA测试(Direct Register Mode)(PS + PL)

    ZedBorad–(5)嵌入式Linux下的DMA测试(PS+PL) 本文将详细介绍如何在ZedBorad上使用AXI接口的DMA IP核.(文末会给出测试代码的下载链接) DDR控制器.AXI DM ...

  3. 在linux 下怎么查看服务器的cpu和内存的硬件信息

    1,Linux下可以在/proc/cpuinfo中看到每个cpu的详细信息.但是对于双核的cpu,在cpuinfo中会看到两个cpu.常常会让人误以为是两个单核的cpu. 其实应该通过Physical ...

  4. Linux下使用Speedtest测试网速教程

    Linux下使用Speedtest测试网速教程 文章目录: 一.通过Speedtest官网直接测试网络速度 二.通过下载源码,在命令行中测试网速 1.下载安装 2.Speedtest的参数使用: 有时 ...

  5. 性能测试入门(六)windows及Linux下做压力测试的注册表设置

    windows及Linux下做压力测试的注册表设置 from: http://www.cnblogs.com/tianzhiliang/articles/2400176.html TcpTimedWa ...

  6. linux查服务器总内存大小,在linux 下怎么查看服务器的cpu和内存的硬件信息

    1,Linux下可以在/proc/cpuinfo中看到每个cpu的详细信息.但是对于双核的cpu,在cpuinfo中会看到两个cpu.常常会让人误以为是两个单核的cpu. 其实应该通过Physical ...

  7. 查linux服务器CPU多少C,在linux 下怎么查看服务器的cpu和内存的硬件信息

    在linux 下怎么查看服务器的cpu和内存的硬件信息 ------------------------------------------------ fzljnqkt 采纳率:44% 11级 20 ...

  8. 用Prime95来做linux下CPU压力测试

    Prime95是用来做linux下CPU压力测试的,由GIMPS (Great Internet Mersenne Prime Search)所提供,主要是透过运算找出梅森质数,质数(Prime nu ...

  9. Linux下sed命令替换配置文件中某个变量的值(改变包含字符的一行的值)之二——只改变第一出现的那一行

    一.背景 在之前的文章中有介绍过<Linux下sed命令替换配置文件中某个变量的值(改变包含字符的一行的值)> 但是这种方法存在一定的问题,就是假如某个变量在一个文件中出现两次,却只想更改 ...

  10. linux下网速测试

    linux下网速测试 speedtest 是一个知名的网速测试工具,它是用 Python 写成的,可以使用 apt 或 pip 命令来安装. 安装 sudo apt install speedtest ...

最新文章

  1. Windows 10的应用体验之二
  2. C ++ 函数模板求三个数的最大和
  3. 频频转型的蘑菇街,能讲好直播这个“老故事”吗?
  4. 笔记-中项案例题-2018年下-整体管理
  5. SAP 电商云 Spartacus UI 里如何捕捉语言设置的更改
  6. 内推 | 旷视研究院深度学习实习生招聘(含内推邮箱)
  7. 山东科技职业学院单招计算机,山东科技职业学院单招
  8. Android关于对话框,Android对话框(Dialog)完全使用手册
  9. PostgreSQL教程
  10. GLSL-Compute Shader
  11. 从Oppo手机拍照无法展示谈图片压缩
  12. 2022年天猫、淘宝春节打烊还能继续下单吗?发货时间需要多久?
  13. Android O 自定义通知实例及一个自定义自动适配缩放图片至特定大小的田字格ImageView
  14. 趁1024,来总结2022年流走的10个月
  15. 数学建模-回归分析(Stata)
  16. chrome:initiator
  17. 过滤器Filter方法详解(init,doFileter,destory)
  18. 微服务的架构模式:一个服务一个数据库模式
  19. php微信商城和微信小程序源码【CRMEB】
  20. Java基础(飞机大战小游戏)

热门文章

  1. 里氏代换原则(企鹅是不是鸟!)
  2. 科研人必备图像处理软件—ImageJ
  3. pdf、markdown、docx文件预览
  4. PostgreSQL下载安装教程以及官网下载包出现的问题
  5. dotnet core error 0x80070057
  6. 启动Maven项目 死活报404 配置文件都没问题
  7. Linux中修改HTTP默认主页
  8. 怦然心动(Flipped)-5
  9. 计算机如何回到桌面,windows下电脑怎么回到桌面主页?
  10. CUBA Platform系列:自定义可视化组件