前言
@和原子哥一起学习Linux
开发环境:I.MX6Ull开发板
参考书籍:
《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.6.pdf》
《linux设备驱动开发详解-基于最新的linux4.0内核》
个人学习笔记,欢迎讨论
一、有线网络的连接篇
之前接触了博通的芯片,就是内部有MAC,连接外部的PHY。
soc内部的 MAC 外设会通过 MII 或者 RMII 接口来连接外部的 PHY 芯片, MII/RMII 接口用来传输网络数据。
另外主控需要配置或读取 PHY 芯片,也就是读写 PHY 的内部寄存器,所以还需要一个控制接口,叫做 MIDO, MDIO 很类似 IIC,也是两根线,一根数据线叫做 MDIO,一根时钟线叫做 MDC。
1、MII/RMII 接口
1、MII 全称是 Media Independent Interface,直译过来就是介质独立接口
2、RMII 全称是 Reduced Media Independent Interface,翻译过来就是精简的介质独立接口
除了 MII 和 RMII 以外,还有其他接口,比如 GMII、 RGMII、 SMII、 SMII 等,关于其他接口基本都是大同小异的,用于以太网 MAC 连接 PHY 芯片。
2、MDIO 接口
MDIO 全称是 Management Data Input/Output,一个简单的两线串行接口,一根 MDIO 数据线,一根 MDC 时钟线。驱动程序可以通过 MDIO 和MDC 这两根线访问 PHY 芯片的任意一个寄存器。
3、RJ45 接口
网络设备是通过网线连接起来的,插入网线的叫做 RJ45 座,RJ45 座子上一般有两个灯,一个黄色(橙色),一个绿色,绿色亮的话表示网络连接正常,黄色闪烁的话说明当前正在进行网络通信。
4、PHY
调试注意:
1)地址不能出现冲突
2)接口电压要适配
3)节能功能必须按照手册的步骤来
4)光电切换复位生效
5)可以读取自协商出来的速率和模式,光电可能是不一样的寄存器
二、网络驱动
可以从相对简单的uboot学起:
对于 I.MX6ULL 而言网络驱动主要分两部分: I.MX6ULL 网络外设驱动以及 PHY 芯片驱动,网络外设驱动是 NXP 编写的, PHY 芯片有通用驱动文件, 有些 PHY 芯片厂商还会针对自己的芯片编写对应的 PHY 驱动。
在使用时,需要深入进去了解整个流程。之前因为项目学习了bcm的网络驱动,就不在这里展开了。