嵌入式驱动开发之phy---fine Mac与Phy组成原理的简单分析
关键字rj45、pci-e
- 1. general
下图是网口结构简图。网口由CPU、MAC和PHY三部分组成。DMA控制器通常属于CPU的一部分,用虚线放在这里是为了表示DMA控制器可能会参与到网口数据传输中。
对于上述的三部分,并不一定都是独立的芯片,根据组合形式,可分为下列几种类型:
方案一:CPU集成MAC与PHY;
方案二:CPU集成MAC,PHY采用独立芯片;
方案三:CPU不集成MAC与PHY,MAC与PHY采用集成芯片;
本例中选用方案二做进一步说明,因为CPU总线接口很常见,通常都会做成可以像访问内存一样去访问,没必要拿出来说,而Mac与PHY之间的MII接口则需要多做些说明。
下图是采用方案二的网口结构图。虚框表示CPU,MAC集成在CPU中。PHY芯片通过MII接口与CPU上的Mac连接。
在软件上对网口的操作通常分为下面几步:
1) 1) 为数据收发分配内存;
2) 2) 初始化MAC寄存器;
3) 3) 初始化PHY寄存器(通过MIIM);
4) 启动收发;
- 2. 2. MII
MII接口是MAC与PHY连接的标准接口。因为各厂家采用了同样的接口,用户可以根据所需的性能、价格,采用不同型号,甚至不同公司的phy芯片。
需要发送的数据通过MII接口中的收发两组总线实现。而对PHY芯片寄存器的配置信息,则通过MII总的一组串口总线实现,即MIIM(MII Management)。
下表列出了MII总线中主要的一些引脚
|
PIN Name |
Direction |
Description |
|
TXD[0:3] |
Mac to Phy |
Transmit Data |
|
TXEN |
Mac to Phy |
Transmit Enable |
|
TXCLK |
Mac to Phy |
Transmit Clock |
|
RXD[0:3] |
Phy to Mac |
Receive Data |
|
RXEN |
Phy to Mac |
Receive Enable |
|
RXCLK |
Phy to Mac |
Receive Clock |
|
MDC |
Mac to Phy |
Management Data Clock |
|
MDIO |
Bidirection |
Management Data I/O |
MIIM只有两个线,时钟信号MDC与数据线MDIO。读写命令均由Mac发起,PHY不能通过MIIM主动向Mac发送信息。由于MIIM只能有Mac发起,我们可以操作的也就只有MAC上的寄存器。
- 3. DMA
收发数据总是间费时费力的事,尤其对于网络设备来说更是如此。CPU做这些事情显然不合适。既然是数据搬移,最简单的办法当然是让DMA来做。毕竟专业的才是最好的。
这样CPU要做的事情就简单了。只需要告诉DMA起始地址与长度,剩下的事情就会自动完成。
通常在MAC中会有一组寄存器专门用户记录数据地址,tbase与rbase,cpu按MAC要的格式把数据放好后,启动MAC的数据发送就可以了。启动过程常会用到寄存器tstate。
- 4. 4. MAC
CPU上有两组寄存器用与MAC。一组用户数据的收发,对应上面的DMA;一组用户MIIM,用户对PHY进行配置。
两组寄存器由于都在CPU上,配置方式与其他CPU上寄存器一样,直接读写即可。
数据的转发通过DMA完成。
- 5. 5. PHY
该芯片是一个10M/100M Ethernet网口芯片
PHY芯片有一组寄存器用户保存配置,并更新状态。CPU不能直接访问这组寄存器,只能通过MAC上的MIIM寄存器组实现间接访问。
同时PHY芯片负责完成MII总线的数据与Media Interface上数据的转发。该转发根据寄存器配置自动完成,不需要外接干预。
http://www.cnblogs.com/cute/archive/2011/04/08/2009572.html
http://blog.csdn.net/shuyong1999/article/details/7453784
http://www.cnblogs.com/jason-lu/articles/3195473.html 最详细
嵌入式驱动开发之phy---fine Mac与Phy组成原理的简单分析的更多相关文章
- 嵌入式驱动开发之uboot---uboot 中的常见命令参数参数
Uboot相关命令介绍 bootm bootp cmp cp crc32 echo erase flinfo go minfo loadb loads mw 14mw 用指定的数据填充内存 15md ...
- 嵌入式驱动开发之dsp fpga通信接口---spi串行外围接口、emif sram接口
-----------------------------------------author:pkf ------------------------------------------------ ...
- 嵌入式驱动开发之sensor---"VIP0 PortA", "VIP0 PortB", "VIP1 PortA", "VIP1 PortB",dvo0(vout1) dvo1(vout0)
(1)vip 简介 (2)vip 电路图 (3)vip 更换采集相机输入 (4)vip 驱动 ---------------------author:pkf --------------------- ...
- 嵌入式驱动开发之usb 无线网卡驱动---RT2870STA dm368
RT2870STA 368的无线网卡驱动! http://www.linuxidc.com/Linux/2014-02/96979.htm
- 嵌入式驱动开发之spi---spi串口通信调试
一. 概念 SPI是 Serial Peripheral Interface(串型外部接口)的缩写.SPI接口有4根PIN脚,分别是: * SPICLK : 用于传输数据的同 ...
- 嵌入式驱动开发之dsp 算法优化vlib emcv---算法优化
http://www.opencv.org.cn/forum.php?mod=forumdisplay&fid=9
- 嵌入式驱动开发之sensor---sensor 图形传感器调试
图像传感器(image sensor)复位顺序 1. 硬件复位寄存器:2. 软件复位寄存器:3. 设置时钟寄存器:4. 设置PLL倍频:5. 设置分辨率:6. 设置窗口控制:7. 设置输出顺序:8. ...
- 嵌入式驱动开发之2440/2410---uboot 移植
http://blog.chinaunix.net/uid-20620288-id-3058904.html
- Linux内核驱动开发之KGDB原理介绍及kgdboe方式配置
接博文<Linux内核驱动开发之KGDB单步调试内核(kgdboc方式)>.上篇博文中,仅简单介绍使用串口的Kgbd的流程(kgdboc方式),本文将重点介绍KGDB调试Linux内核的原 ...
随机推荐
- UVA 10441 - Catenyms(欧拉道路)
UVA 10441 - Catenyms 题目链接 题意:给定一些单词,求拼接起来,字典序最小的,注意这里的字典序为一个个单词比过去,并非一个个字母 思路:欧拉回路.利用并查集判联通,然后欧拉道路判定 ...
- okhttp-OkGo的文件下载模块
OkDownload主要功能 结合OkGo的request进行网络请求,支持与OkGo保持相同的配置方法和传参方式 支持断点下载,支持突然断网,强杀进程后,继续断点下载 每个下载任务具有无状态.下载. ...
- 算法笔记_082:蓝桥杯练习 12-1三角形(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体.分别设计独立的函数计算三角形的周长.面积.中心和重心.输入三个点,输出这 ...
- Android Training - Volley(Lesson 0 - 序言)
写在http://hukai.me/blog/android-training-volley-index/
- Mybatis 插入后返回数据库自动增长ID
MySQL和MSSQL返回主键方法 在personMap.xml中 <insert id="addPerson" parameterType="orm.Person ...
- 阿里云 oss python3 样例
阿里云的oss SDK又是不支持python3,头疼头疼. 本想改一改它的SDK,让它支持python2+python3,无奈里面大量的代码使用不带括号的print.工作量恐怖. 幸好oss的使用很e ...
- IT精英们不断上演的十大傻事(组图)
http://fellow.51cto.com/art/200807/80475.htm
- std::vector<char> 转 const char
std::stringstream oss; for(unsigned int i=0;i < buffer->size();i++){ oss<<(*buffer)[i]; ...
- JavaScript点击按钮显示 确认对话框
//JavaScript点击按钮显示确认对话框 <html xmlns="http://www.w3.org/1999/xhtml"> <head> < ...
- LNMP架构二
Nginx默认虚拟主机 1.首先修改nginx.conf文件,删除server及下面的,在http最后添加include vhost/*.conf; (指定虚拟主机目录,并读取以.conf结尾的文件) ...