引言
Aurix1G/2G芯片支持以太网功能, ETH与外部的MAC或者PHY之间的接口一般有如下几种, MII, RMII,RGMII, MDC/MDIO, 前几种用于数据传输, 而MDC/MDIO主要用于对PHY的管理, 通过该接口可以实现对PHY内部寄存器的读写和控制, 如下图所示 (图1)
图1 MDC/MDIO接口
1. MDC/MDIO信号线介绍
MDC是时钟信号, MDIO是双向的数据信号, 有点类似我们的IIC协议. MDC的时钟最大可设置为2.5MHz. 可通过MAC_MDIO_ADDRESS寄存器来设置.
2. Clause 22 和Clause 45
Clause 22 和Clause 45是两种不同形式的MDC/MDIO数据协议. 我们一开始在IEEE 802.3里面定义Clause 22. 之后为了10G以太网的需求扩展, 推出了Clause 45, Clause 45在802.3ae的规范标准里面定义.
1) Clause 22
下图(图2)是Clause22的数据帧格式:
图2 Clause22的数据帧格式
-
ST: Start Frame, 启动帧. 固定为01B
-
OP: Opcodes, 操作码. Clause22支持两种操作, Read是10B, Write是01B
-
PHYADR: Physical Address, PHY芯片的物理地址. 5个bit, 可以最多挂32个从设备. 很多PHY芯片物理地址的选择都是通过外部硬件的硬件上下拉设定的, 在芯片上电的时候其引脚的电平会被读取到芯片内部进行锁存.
-
REGADR: Register Address, PHY的寄存器地址. 也是5个bit, 可以支持32个寄存器. 实际上802.3里面对前16个寄存器的内容做了严格规定, 后16个寄存器的内容是芯片厂商自定义的.
-
TA: Turnaround, 转换位.对于写操作是10B, 对于读操作是Z0B. 这个Z0的含义是, 当信号在Z bit之前, 时钟是上升沿采集, 等到最后一个上升沿采集完数据之后, 在该波形的下降沿采集Z bit. 电平由高变低. 之后的一个下降沿设置0 bit, 之后所有的波形下降沿采集, 最后一个波形的下降沿不使用.
-
DATA: 数据位, 16bit的数据读写
实际在芯片操作当中, 其实还有前导码的概念, Aurix的1G和2G有32个bit全为1的前导码, 这个不需要我们软件设置, 芯片自己就会产生. 如图3所示
图3 Aurix完整的MDC/MDIO数据帧格式
写操作的数据帧格式如下:
读操作的数据帧格式如下
2) Clause 45
下图(图4)是Clause45的数据帧格式
图4 Clause45的数据帧格式
-
ST, Start Frame, 起始帧. 固定为00B
-
OP, Opcode, 操作码, Clause45的操作有四种, 分别是地址帧, 写操作, 读操作, 以及增量读操作
-
PHYADR, 从机的物理地址
-
DEVTYPE, 子模块类型
-
TA, 同Clause
-
ADDRESS/DATA, 表示不同模式下地址或者读写的数据
PS: 需要注意的是, TC2xx的MCU只支持Clause22的数据帧格式, TC3xx支持Clause22和Clause45.
3. 软件实现
有两个比较关键的寄存器, 一个是MAC_MDIO_ADDRESS寄存器, 一个是MAC_MDIO_DATA寄存器.
1) MAC_MDIO_ADDRESS
该寄存器用于配置MDC的时钟, 采用的Clause种类, 整个数据帧TA bit之前的部分,
MDC时钟的配置
通过C45E bit来选择Clause的种类
Opcode的配置, 通过其中的GOC_0和GOC_1来实现
PHYADD通过PA bit来实现
REGADD或者DEVTYPE通过RDA bits来实现
GB bit用于表征接口的状态. 当进行写操作的时候, 先见数据写入MAC_MDIO_DATA寄存器, 然后再写ADDRESS寄存器, 并将该位置1. 当进行读操作的时候, 先写ADDRESS寄存器, 该bit同时也置1, 当读到该bit为0的时候, 表示读数据完成.
另外一个寄存器就是MAC_MDIO_DATA寄存器,里面的低16位是读写寄存器的数据, 高16bit只适用于Clause45, 为Clause数据帧格式下TA后面的ADDRESS.
英飞凌的illd库中包含了软件接口的功能实现, 其代码如下:
Clause22的写操作
Clause22的读操作
Clause45的写操作
Clause45的读操作
此外, 英飞凌提供的MCAL也提供了相应的AutoSAR标准接口供客户使用
TC2xx的读写接口分别是:
-
Eth_17_EthMac_WriteMii
-
Eth_17_EthMac_ReadMii
TC3xx的读写接口分别是:
-
Eth_17_GEthMac_WriteMii
-
Eth_17_GEthMac_ReadMii
PS: 这里也有一个需要注意的是, TC3xx的MCAL的读写接口不支持Clause45, 因为这部分并没有在Auotsar的标准里面做要求.
注册有任何问题请添加 微信:MVIP619 拉你进入群
打开微信扫一扫
添加客服
进入交流群
发表评论