RTL8019的使用及分析2
来源:互联网 发布:网络食品安全管理办法 编辑:程序博客网 时间:2024/05/17 07:01
4、驱动代码分析
了解网卡的工作流程,分析分析驱动程序是再好不过的方式了。
网上流传的rtl8019as的驱动还是比较多版本的,这里用的是U-boot-1.1.6中的rtl8019as的驱动:
5、驱动流程总结
上面简单的分析了一下在U-boot-1.1.6中的rtl8019as的驱动程序。需要注意的是,这个驱动程序是针对8位DMA的,每次的读写都是一个BYTE.RTL8019AS还支持16位DMA模式,如果使用的是这个模式的话,就需要修改驱动程序了,因为每次DMA的读写单位都是2BYTE.其他还需要注意的是寄存器的地址问题。
下面来稍稍总结一下rtl8019as驱动的工作流程。
eth_init:初始化NIC
A,首先向reset寄存器中写入任意的值,使NIC复位
1,设置CR,设置停机状态位
2,设置DMA模式(8位/16位)
3,传输模式设置为loopback模式
4,配置接收缓冲范围和发送缓冲范围
5,清除中断寄存器位并使能一些中断
6,设置本机的MAC地址
7,设置本机的多播地址
8,配置BOUNDARY寄存器和CURRENT寄存器的初始值(发送缓冲的首地址)
9,置CR为开机模式
10,置传输模式为normal模式
nic_to_pc(读取一帧数据):
将boundary值写入REMOTESTARTADDR
设置REMOTECOUNT为4,然后读取4个字节(rtl8019as的帧头长度)
根据帧头中读到的帧状态,帧长度,下一帧的页地址来读取RAM中的本帧数据
将数据交由上层协议处理
将得到的下一帧的起始页数写入boundary寄存器
eth_rx(读取RAM中接收到的数据):
1,读取中断状态寄存器,并判断其值。
a)当中断状态为RAM溢出位被置位时。
2,此时将NIC设置为停机状态(不接收数据)且设为内部loopback模式。
3,反复调用nic_to_pc一帧一帧的读取数据,直到current和boundary值相等。
4,退出内部loopback模式
b)当中断位表示帧被正确的接收时。
2,反复调用nic_to_pc一帧帧的读取数据,直到current和boundary值相等(此时已无数据所能读)
c)如果没有数据收到
2,退出
eth_send(发送数据):
1,轮询CR寄存器的状态,等待DMA传输的结束
2,在REMOTESTARTADDR中设置传输的起始地址
3,在REMOTEBYTECOUNT中设置传输的长度
4,将CR设置为remote write模式
5,循环将需要发送的数据写入RAM(不够60个字节则用0补全)
6,等待DMA操作完成(轮询中断状态寄存器)
7,清除中断状态寄存器
8,在TRANSMITPAGE中写入初始page
9,在TRANSMITBYTECOUNT中写入传输长度
10,设置CR,启动数据发送
- RTL8019的使用及分析2
- RTL8019的使用及分析1
- RTL8019驱动
- KnockoutJS的使用及分析
- 嵌入式系统中常见的网卡驱动比较(CS8900A,RTL8019,DM9000)
- 嵌入式系统中常见的网卡驱动比较(CS8900A,RTL8019,DM9000)
- valgrind 的使用及错误信息分析
- RT_Thread的测试框架使用及分析
- MySQL性能分析及explain的使用
- ProGuard的作用、使用及bug分析
- ProGuard的作用、使用及bug分析
- openSessionInView的使用原理及性能分析
- ProGuard的作用、使用及bug分析
- ConcurrentHashMap的原理分析及使用场合
- MySQL性能分析及explain的使用
- ProGuard的作用、使用及bug分析
- XListView 的使用及源码分析
- ProGuard的作用、使用及bug分析
- arm
- 刚接触,是用方法二解决的。
- u-boot-2010.03在LT2440上的移植详解 (三)
- u-boot-2010.03在LT2440上的移植详解 (四)
- u-boot-2010.03在LT2440上的移植详解 (五)
- RTL8019的使用及分析2
- 中国古代的奇人异士和现在的黑客
- u-boot-2010.03在LT2440上的移植详解 (六)
- android两种使用照相功能获取图片的方法
- 在PXtec的这些天
- jpa 常用注解说明
- C#.net编程的七个小技巧
- 学习困惑
- u-boot-2010.03在LT2440上的移植详解 (七)