smartsheep的笔记 https://bbs.21ic.com/?79109 [收藏] [复制] [RSS] 本人专业从事嵌入式系统设计,欢迎志同道合者共同探讨!

日志

存储器总线的软件测试方法

已有 982 次阅读2009-7-17 08:36 |个人分类:软件|系统分类:嵌入式系统| 存储器, 总线, 测试

================================================================================
1.  测试地址总线方法
分两步走,分别为走0,和走1
比如8位地址总线,


1.1. 走1 对所有地址线按从低到高依次置信号1
先对所有地址写0
然后依次对下面地址 写入地址值本身,然后读地址 0000 0000
如果读出的值不为0,那么相应被置1的位表明该位地址线被拉低了
0000 0000
0000 0001
0000 0010
0000 0100
...
...
...
0100 0000
1000 0000


example:
unsigned char err_bit = 0;
for(i=1;i<0xFF;i<<=1)
{
  *(volatile char *)0x00 = 0x00;
  *(volatile char *)(i) = i;
  if(*(volatile char *)0x00 != 0)
    err_bit |= i;
}
return err_bit;



1.2. 走1 对所有地址线从低到高依次置信号0
依次对下面地址写入地址值本身,然后读地址 0xFF(1111 1111),如果读出的值不等于0xFF
表明被置0的位对应的地址线被拉高了。
1111 1111
1111 1110
1111 1101
...
...
...
1011 1111
0111 1111


example:
unsigned char err_bit = 0;
for(i=1;i<0xFF;i<<=1)
{
  *(volatile char *)0xFF = 0xFF;
  *(volatile char *)(~i) = i;
  if(*(volatile char *)0xFF != 0xFF)
    err_bit |= i;
}
return err_bit;



================================================================================
2. 测试数据总线方法
2.1 对数据总线走1,(地址固定)
选定一位于存储器空间内的地址ptr
往地址ptr写入
0000 0001
然后读地址ptr,如果读取的数据最低位不等于 1,则表明数据总线D0被拉低了
依次操作各总线位,


example:
unsigned char err_bit = 0;
for(i=0,i<0xFF,i<<=1)
{
  volatile *ptr = i;
  if(i != ((volatile *ptr)&i)
    err_bit |= i;
}
return err_bit;


2.2 对数据总线走0, (地址固定)
选定一位于存储器空间内的地址ptr
往地址ptr写入
1111 1110
然后读地址ptr,如果读取的数据最低位不等于 0,则表明数据总线D0被拉高了
依次操作各总线位,


example:
unsigned char err_bit = 0;
for(i=0;i<0xFF;i<<=1)
{
  volatile *ptr = ~i;
  if(~i != (volatile *ptr)|(~i);
    err_bit |= i;
}
return err_bit;


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)