19.1 CS8900A调试步骤
1.检查网络的物理连接。
用交叉网线将目标板于PC机相联,此时目标板和PC机的以太网连接指示灯(LINKLED)将常亮,活动指示灯将闪烁,PC机(windows系统)将出现网络已连接信息。
如果不正常,可能是接收或发送链路还有问题,或芯片的该相关部分有问题,特别注意芯片第93脚(RES)连接的电阻阻值。
2.读取芯片ID判断芯片及ISA总线是否正常。
可在kernel/drivers/net/cs8900a.c的初始化部分增加读取芯片ID号及打印的代码。正常的ChipID:630e,通常不正确时读出来ChipID:dc90。此时可能是I/O和内存空间读写部分的逻辑转换电路,或地址数据线等不正常等。
也可直接在ADS或其它环境下写一小段不用在linux下运行的代码:
#define CS8900_BASE (*(volatile unsigned short*)0x19000000)
#define EthIOAddr (*(volatile unsigned short*)0x19000300)
#define EthPPP (*(volatile unsigned short*)0x1900030a)
#define EthPPD0 (*(volatile unsigned short*)0x1900030c)
void Test_CS8900(void){
rBWSCON = rBWSCON & ~(0xf << 12) | (0xd << 12); //nGCS3=nUB/nLB(sSBHE),nWAIT,16-bit
rBANKCON3 = (0 << 13) | (3 << 11) | (7 << 8) | (1 << 6) | (0 << 4) | (3 << 2) | 0;
EthPPP = 0;
Uart_Printf("CS8900A ChipID1 is %x\n", EthPPD0);//打印ID
EthPPP = 2;
Uart_Printf("CS8900A ChipID2 is %x\n", EthPPD0);
}
以上两部完成后在启动内核的初始化以太网时将打印下述信息:
Eth0:cs8900 rev K(3.3 Volts) found at 0xd0000300
Cs89x0 media RJ-45, IRQ 37
然后启动系统后就可以用ifconfig eth0进行设置,ping通了。
19.2 出现过的问题
1.用交叉网线连接到PC机时网络指示灯不亮,PC机没有任何反应。
原因:CS8900A第93脚连接的RES阻值不正确
2.PC机显示网络已连接(只说明物理层正常),但读取CS8900A的ID不正确。
原因:总线没有配置好,如:rBWSCON = rBWSCON & ~(0xf << 12) | (0xd << 12); //nGCS3=nUB/nLB(sSBHE),nWAIT,16-bit
rBANKCON3 = (0 << 13) | (3 << 11) | (7 << 8) | (1 << 6) | (0 << 4) | (3 << 2) | 0;
或缓冲芯片(74LVCH162245)等不正常或虚焊
3.在以太网接口芯片CS8900A和PCMCIA接口PD6700电路中为何都要用到ADDR24及一些组合逻辑电路?
原因:CS8900A和PD6700都为ISA总线接口,而在ISA总线接口中,I/O空间和内存空间是独立寻址的,因此它们有各自不同的读写信号。但ARM体系中,I/O空间和内存空间是统一寻址,因此电路设计的时候用高位地址线(ADDR24)经过组合逻辑的译码来区分I/O空间和内存空间的读写。如使用nGCS3的CS8900A,它的内存空间地址为0x19000000(ADDR24 = 1),则I/O空间地址为0x18000000。又如使用nGCS2的PD6700,它的内存空间地址为0x11000000,则I/O空间地址为0x10000000。简而言之,就是要使nIOR_P和 nIOW_P工作,其分别与nIOR和nIOW相连。故A24位应置1,则0x19000000 = 0x18000000(NGCS3) + 0x1000000;