|
本帖最后由 chengying 于 2015-4-28 11:47 编辑
使用MDK裸机测试S3C2410与DM9000网络通讯(硬件为他人设计,我只负责软件部分),目前现象,可以读出DM9000的ID,各个寄存器可读写,连接PC,link指示灯不亮,显示为10M接口。
设置GPIO0为输出,并输出0以激活内部PHY,测试GPIO0为低电平,照理说已激活内部PHY。读出1F寄存器值为0x7C。
设置为内部MAC方式,可收发。
设置内部PHY模式,不能收发。PHY不工作?
程序移植到友善之臂板子上可以正常收发。是不是可以排除软件问题?
请问:
(1)如果硬件问题,我需从哪几个方面做测试?(他人不太愿意测试)
(2)DM9000的PHY激活软件方面是不是还有问题?
(3)希望有做过类似项目的给出相关注意方面。
DM9000初始化如下:
/* DM9000网卡的初始化工作 */
void DM9000_init(void)
{
uint32 i;
uint16 data;
Test_DM9000AE();
// PrintfEEPROM();
IOSetInit();
//初始化设置步骤: 1
dm9000_reg_write(DM9000_GPCR, 0x01); //设置 GPCR(1EH) bit[0]=1,使DM9000的GPIO0为输出。
dm9000_reg_write(DM9000_GPR, 0x00); //GPR bit[0]=0 使DM9000的GPIO0输出为低以激活内部PHY。
udelay(3000); //延时2ms以上等待PHY上电。
//初始化设置步骤: 2
dm9000_reg_write(DM9000_NCR, 0x03); //软件复位 2-1:01内部MAC回环模式 0位:1 软件复位
udelay(200); //延时20us以上等待软件复位完成
dm9000_reg_write(DM9000_NCR, 0x00); //复位完成,设置正常工作模式。
dm9000_reg_write(DM9000_NCR, 0x03); //第二次软件复位,为了确保软件复位完全成功。此步骤是必要的。
udelay(3000);
dm9000_reg_write(DM9000_NCR, 0x00);
//初始化设置步骤: 3
dm9000_reg_write(DM9000_IMR, 0x80); //清中断
////NSR只能写三个位,主要是清除发送完成标志位
dm9000_reg_write(DM9000_NSR, 0x2C); //清除各种状态标志位
/* 对其写1就是是清除 */
dm9000_reg_write(DM9000_ISR, 0xbf); //清除所有中断标志位
//初始化设置步骤: 4
dm9000_reg_write(DM9000_RCR, 0x39); //接收控制
dm9000_reg_write(DM9000_TCR, 0x0); //发送控制
dm9000_reg_write(DM9000_BPTR, 0x3f);
dm9000_reg_write(DM9000_FCTR, 0x3a); //接收FIFO门限3k 8k
dm9000_reg_write(DM9000_FCR, 0xff);
//初始化设置步骤: 5
for(i=0; i<6; i++)
dm9000_reg_write(DM9000_PAR + i, mac_addr);//mac_addr[]自己定义一下吧,6个字节的MAC地址
//初始化设置步骤: 6
dm9000_reg_write(DM9000_NSR, 0x2c); //清除各种状态标志位
dm9000_reg_write(DM9000_ISR, 0x3f); //清除所有中断标志位
//初始化设置步骤: 7 只是打开了一个接受数据包中断,没有将发送数据包中断打开。
dm9000_reg_write(DM9000_IMR, 0x81); //中断使能 80中断禁止
PrintfDM9000Reg();
uart_printf("初始化后EEPROAM\n");
// PrintfEEPROM();
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|