linux网络设备应用与驱动编程学习3——lpc3250以太网控制器
一、以太网模块内部结构
特性:10M或100MbpsPHY器件,完全遵循802.3;独立的发送和接收缓冲区存储器,映射到共用的IRAM或EMC存储器;与外部PHY芯片通过MII或RMII接口连接。
二、操作相关
n 描述符数组
DMA管理器利用存放在存储器中的帧描述符数组和状态数组来工作。描述符充当以太网硬件和设备驱动软件之间的接口。每个帧描述符包含两个32位区域:第一个区域是一个指针,指向包含一帧或一个片段的数据缓冲区,另一个区域是与帧或片段相关的控制字。
软件驱动程序必须将描述符数组或状态数组的基址写入TxDescriptor/RxDexcriptor和TxStatus/RxStatus寄存器中。
n 描述符所有权
软件能过将TxProduceIndex/RxConsumeIndex寄存器加1,能够将描述符所有权和状态所有权状态移交给硬件。硬件则通过更新TxConsumeIndex/RxProduceIndex寄存器将描述符和状态移交给软件。(一个封包对就一个描述符数组,一个描述符数组内可有多个帧)
n 连续的顺序和封包设计
顺序连续表明当以太网模块已完成对描述符/状态的读/写操作时,它下一个将会读/写的描述符/状态是在下一个更高的相邻的存储器地址中的描述符/状态。封包表明当以太网模块对数组中的最后一个描述符/状态完成读/写操作之后,它下一个读/写的描述符/状态将是位于数组基址的第一个描述符/状态。
n 描述符的空/满状态
当所有的描述符被生产者拥有时,描述符数组为空;如果都被消耗者拥有时,描述符数组为满;如果各拥有一部分,则为‘部分满’。消耗索引等于生产索引,则描述符数组为空。如果消耗索引等于生产索引加1,则数组为满。
三、发送过程
1. 建立描述符和数据
即直译描述符的数据指针区和控制字区。
2. TxDMA管理器读取Tx描述符数组
使能TxEnable位,TxDMA读取TxConsumeIndex确定的描述符。请求数目由TxProduceIndex-TxConsumeIndex来决定。
3. 发送数据
读取描述符后,TxDMA将数据提交给MAC发送,完成之后,TxDMA将状态信息写回状态区域StatusInfo和StatusHashCRC中。
在加载描述符时,TxDMA会查询描述符控制区域的Last位。如果last=0, TxDMA将主机存储器中所有片断集中起来,访问一串帧描述符并将它们发送出去作为以太网线路上的一个以太网帧。last=1,表示它是该帧的最后一个片段,这样,我们就找到了帧结尾。
4. 更新ConsumeIndex
每次当TxDMA向存储器提交状态字时,表明它完成了描述符的发送过程,并让TxConsumeIndex加1。
5. 更新帧发送状态
MII总线上发送了帧信息之后,帧描述符的状态信息字由DMA管理器更新。
6. 发送错误和中断
如果发送过程中出现错误,则TxDMA管理器写相应状态字和中断状态寄存器来报告错误。
四、接收
1. 建立描述符和数据
即直译描述符的数据指针区和控制字区。
2. RxDMA管理器读取Rx描述符数组
使能RxEnable位,RxDMA读取RxProduceIndex确定的描述符。请求数目由RxConsumeIndex-RxProduceIndex-1来决定。
3.接收数据
在rxDMA管理器使能之后,读取描述符,接收DMA等待MAC从MII接口,通过接收滤波器返回接收数据。在接收了一个片段之后,开始写片段缓冲区中的帧。RxDMA管理器将状态作息写回statusinfo和statushashcrc中。
4.更新produceindex
当rxDMA提交一个数据片段和相关的状态字给存储器时,RxProduceIndex加1.
5.写接收帧状态
MII总线上接收了帧信息之后,帧描述符的状态信息字由DMA管理器更新。
6.发送错误和中断
如果发送过程中出现错误,则TxDMA管理器写相应状态字和中断状态寄存器来报告错误。
五、其它
lpc3250以太网控制器还有流控制、状态hashCRC计算、接收滤波、功率管理、发送填充等特性。
linux网络设备应用与驱动编程学习3——lpc3250以太网控制器相关推荐
- Linux与C++11多线程编程(学习笔记)
多线程编程与资源同步 在Windows下,主线程退出后,子线程也会被关闭; 在Linux下,主线程退出后,系统不会关闭子线程,这样就产生了僵尸进程 3.2.1创建线程 Linux 线程的创建 #inc ...
- halcon linux qt,Halcon C++混合编程学习之Qt 实现检测焊接点
Halcon C++混合编程学习之Qt 实现检测焊接点 # include "HalconCpp.h" # include "HDevThread.h" # i ...
- Windows内核安全与驱动编程学习笔记----1.WDK安装
WDK安装安装 1.WDK下载 VS2019设置 EWDK使用 注意事项 错误解决方法 系统错误1275 系统错误557 1.WDK下载 微软已经不再使用connect.microsoft.com,新 ...
- Linux she 39 ll,linux_shell 编程学习-初识she'll
一.she'll编程规范 1.she'll脚本命名一般为英文的大小写; 2.不能用特殊符号.空格来命名; 3.she'll脚本后缀以.sh结尾; 4.不建议she'll命名为纯数字,一般以脚本功能命名 ...
- 【Linux内核分析与驱动编程】添加内核补丁
什么是补丁 补丁就是存放着不同版本之间差异的文件.通过打补丁的方法升级源代码,可以不用下载整个源代码,在本地的源代码基础上获得代码更新. 详细的打补丁的方法可以查看内核/Document/applyi ...
- u盘安装linux找不到驱动,利用U盘加载控制器驱动来安装Linux系统的方法
一般我们在安装服务器过程中需要加载一些scsi卡或raid卡驱动,以便操作系统可以检测到硬盘. 常规的安装方式是要用到软驱,其实我们也是可以通过U盘来进行加载的. 装Linux控制器驱动往往都是*.d ...
- 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
- Linux字符驱动开发学习总结
linux驱动编写(虚拟字符设备编写) 昨天我们说了一些简单模块编写方法,但是终归没有涉及到设备的编写内容,今天我们就可以了解一下相关方面的内容,并且用一个实例来说明在linux上面设备是如何编写的. ...
- linux内核_Linux驱动编程的本质就是Linux内核编程
由于Linux驱动编程的本质属于Linux内核编程,因此我们非常有必要熟悉Linux内核以及Linux内核的特点. 这篇文章将会帮助读者打下Linux驱动编程的基础知识. 本篇文章分为如下三个小节进行 ...
最新文章
- 合理的布局,绚丽的样式,谈谈Winform程序的界面设计
- ffmpeg打开音频设备
- 【算法学习】【图像增强】【Retinex】White Patch Retinex 程序解读
- Julia: 关于... (三个圆点)
- 使用dsoframer演示ppt
- 微信翻译小程序在哪里,如何使用
- 《微软System Center 2012 R2私有云部署实战》——1.4 微软私有云
- Python使用Requests库爬取网页数据
- 运维审计系统是堡垒机么?跟堡垒机有啥区别?
- DatawhaleLeeML-Task05-网络设计的技巧第二部分
- 正则表达式验证生日手机号信息
- 如何实现汇川PLC和工业机器人的协议解析与数据采集?
- swift 自定义画渐变色折线图
- 原生JS编写简单的编辑器
- widerperson数据集转voc
- Oracle的基本练习:登陆、查看连接、管理登陆用户、修改进程数
- 大一C语言图形界面点餐系统
- 华为云-容器引擎CCE-基本概念
- 电信黑莓行货手机断网问题
- 读书笔记-别说你懂写网文
热门文章
- x86服务器排名第二之后,三年后的新华三将站在哪里?
- python求共轭复数_python中复数的共轭复数知识点总结
- commit XXX is a merge but no -m option
- 山东科技大学计算机专硕复试录取比,山东科技大学图书情报(专硕)专业考研录取分数线-研究生分数线-历年分数线...
- IPM逆透视变换问题(2):Image --> Ground
- halcon获取图像中心点_Halcon学习之一:查询和获取图像
- win8计算机快捷没有,控制面板快捷键,教您Win8控制面板快捷键是什么
- vue之计数器实现原理
- OGame的建筑说明
- php网页游戏学习之xnova(ogame)源码解读,PHP网页游戏学习之Xnova(ogame)源码解读(十六)...