关键源码如下:
static void eth_reset (void)
{
unsigned char ucTemp;
/* reset NIC */
ucTemp = get_reg (RTL8019_RESET);
put_reg (RTL8019_RESET, ucTemp);
put_reg (RTL8019_INTERRUPTSTATUS, 0xff);
udelay (2000); /* wait for 2ms */
}
int eth_init (bd_t * bd)
{
unsigned char id0, id1;
/* read id */
eth_reset ();
id0 = get_reg(RTL8019_REMOTEBYTECOUNT0);
id1 = get_reg(RTL8019_REMOTEBYTECOUNT1);
if(id0 != 0x50 || id1 != 0x70)
{
printf("error: RTL8019AS chip not found { 0x%x(0x50), 0x%x(0x70)}!\n", id0, id1);
return -1;
}
printf("RTL8019AS Founded!\n");
printf("MAC : 0x%x-0x%x-0x%x-0x%x-0x%x-0x%x\n", bd->bi_enetaddr[0], bd->bi_enetaddr[1], bd->bi_enetaddr[2], bd->bi_enetaddr[3], bd->bi_enetaddr[4], bd->bi_enetaddr[5]);
烧写到flash运行结果出现
error: RTL8019AS chip not found { 0x50(0x50), 0x3d(0x70)}!
楼主根据打印信息:error: RTL8019AS chip not found { 0x50(0x50), 0x3d(0x70)}!
这个是由于id1 = get_reg(RTL8019_REMOTEBYTECOUNT1); 获得的是3d,
首先楼主好好分析下为什么会获得3d,而不是70,仔细看看RTL8019_REMOTEBYTECOUNT1。
我也核实了,datasheet都说是:0x0570。而你从寄存器里搞到的是0x503d,这个问题,建议楼主找下RTL8019的厂家,问下他们的FE.
另外你也可以暂时认同0x053d,修改下程序,让其继续执行其他操作,看后面的操作是否还能正常?
经过尝试,发现还是不行。但是我发现了一个问题,我自己编译的u-boot和厂家配置的每次烧进去出现的ID号是不一样的,我觉得应该还是驱动程序问题,肯定那儿出现了bug!我先找找看!
高手我找到bug的原因了!
原因:RTL8019AS网卡是8bit操作的而1.1.6里面的网卡驱动默认位宽是16位的!将Bank3的位宽改成DW8就可以了