|||
================================================================================
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;