vxWorks下用什么办法可以进行内存和Flash检测?
想在vxWorks下编写一个内存和Flash的检测工具。但不知道有有什么实现方法。
对于内存检测,如果对其中任意地址单元读写,估计程序会溢出。
对于Flash检测,如果是空的,可以写0x55,0xaa,但如果要保留原来flash里的内容,该怎么检测呢?
一种方法是使用风河的仿真器probe或者ice,里面有一个diagnostic的功能,能够测试地址线和数据线以及存储器。
另一种方法是自己写程序,常用的方法有以下几种,对地址测试和数据测试都适用:
1、走步0。依次写0xFFFFFFFE,0xFFFFFFFD,0xFFFFFFFB,0xFFFFFFF7,0xFFFFFFEF...0x7FFFFFFF,这样一组数字,如果是数据线测试,就向固定一个地址写入这些数字再读出来,写一个同步一下就读回来,如果数据线粘连读回来的会与原来的不同;如果是地址线测试,向这组数字表示的地址(注意不要超过存储器的上限)里面写入累加的一个数字,比如1、2、3。。。,全部写完后再读回来,如果地址线粘连会读到重复的数字,比如读到两个2,但没有读到1。
2、走步1。方法同上,只是数字的值变成了0、4、8、0x10、0x20。。。等。
3、写全F。前面两种方法主要检测的是焊接过程中的地址或数据线粘连,如果是存储器本身出错,比如有一个bit固定表现为0,可以使用写全F的方法,就是把所有的存储器空间写满F,然后读出来比较。
4、写全0。同上。
5、写0x55。原理与3、4相同,测试相邻晶元间是否有必然联系,比如bit1是0的时候bit2根据芯片内部不应该有的某种反应也变为0,这是我们不希望看到的。
6、写0xAA。同上。
7、写随机数。先在另外一个存储器上申请与待测存储器相同大小的空间,写满随机数,然后复制到待测存储器里,再读出来比较。
上面是常用的几种方法。华为的中试部门将这几种方法加一些辅助的其他测试方法总结成36步法、9步法、5步法、3步法等,其中1、2两种走步0、1都是必备的。因为晶片发生错误的概率很小,错误大多数发生在焊接过程中。
如果在系统启动的时候作自检,不能直接使用上面的方法,因为这些方法都是破坏性的,不能保全存储器里面的数据,只能用于出厂测试。一般自检时,内存检测在bios里面进行,在完成搬移之前,检查数据线和地址线,最多只需要操作128次,速度很快。flash检测,简单一点,可以把flash内容全部读到内存,检测完再拷贝回去,如果怕掉电丢失内容,需要划一个block作保存数据的中转站。
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |