《asm9260中uboot以太网驱动》
关键词:asm9260,紫芯,以太网驱动,mac驱动,网卡驱动
本文为编写紫芯asm9260以太网驱动前对uboot中实现进行解析。
依照之前经验,网卡驱动应该包含以下部分:
大致知道了驱动框架,开始进入asm9260以太网驱动。
mac9260_eth_initialize函数里设置mac地址,填充了.init,.transmit,.receive函数,注册网络设备。
整体结构差不多。
.init里面并没有操作,初始化放在了mac_init函数中去做。
为发送/接收描述符分配内存空间,为发送/接收缓冲区分配内存空间
使能MAC时钟
管脚复用
设置MII / RMII
MAC模块复位
之前为硬件复位,设置软件复位,复位所有MAC,DMA相关寄存器
设置MDC时钟频率
PHY管脚复用
设置mac工作模式(100M,全双工)
设置phy工作模式(100M,全双工)
使能中断(做了很多配置,不仅仅使能中断)
设置MAC地址(开始那步设置mac地址就看看?传参都没传...)
停止所有MMC寄存器操作
TX / RX描述符与相应缓冲区对接,并对描述符初始化并放入队列寄存器
清RX描述符的OWNER位?
使能MAC , DMA
.transmit函数其中内容基本不变:
1.将要发送的消息放置BD对应的缓冲区内,
2.填充描述符内容,
3.开始发送,
4.指向下一个BD描述符。
.receive函数
1.接收到BD后对其设置OWN,
2.错误处理
3.通知CPU接收
4.指向下一个BD描述符
总结:整体框架不变,uboot中虽然开启了RX中断,但是并没有中断函数处理。PHY初始化应该放在了其他地方。还可以加一个检测线程检查网口是否连接并设置相应的模式。