Chinaunix首页 | 论坛 | 博客
  • 博客访问: 215748
  • 博文数量: 37
  • 博客积分: 3082
  • 博客等级: 中校
  • 技术积分: 387
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-14 13:59
文章分类
文章存档

2013年(1)

2012年(1)

2011年(2)

2010年(7)

2009年(1)

2008年(13)

2007年(12)

我的朋友

分类: LINUX

2007-03-29 17:06:30

说明在初始化以太网接口控制器时出错,没有找到你的CS8900A,应该是硬件还有问题,或是地址不对.你可以先尝试去读cs8900a的ID,正确的应该是630e.如果有仿真器直接在仿真器下读看结果,没有就在系统中添加打印信息,将读取的ID打印出来。


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。

阅读(2637) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

zhuczloveai2013-11-19 23:01:08

你好,我在S3C44BOX上用你这个程序#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 &