因为产品的双网口出现了问题,而且是AM335x 内部驱动,难度比较大,现从PHY
端开始分析相关原理,找到双网口不能使用的原因。
#### 此篇是记录一些有关`LAN8710A` 这个`PHY`的一些特性。
-
各个功能模块大致图解:
The MII includes 16 interface signals:
transmit data - TXD[3:0] // 数据发送
transmit strobe - TXEN // 发送的数据有效
transmit clock - TXCLK // 数据发送时钟
transmit error - TXER/TXD4 // 发送错误被检测
receive data - RXD[3:0] // 数据接收
receive strobe - RXDV // 接收脉冲
receive clock - RXCLK // 数据接收时钟
receive error - RXER/RXD4/PHYAD0 // 接收错误
collision indication - COL // 冲突声明
carrier sense - CRS // 载波监听,接收数据有效
在MII模式下,分为两种情况。
在发送通道,收发器 驱动传输时钟 `TXCLK` 到控制器,MAC控制器在`TXCLK` 为上升沿的时候同步数据。
控制器驱动 `TXEN` 为高表明传输的数据有效,当检测到传输错误的时候 `MAC` 控制器 驱动`TXER` 为高。
在接收通道,收发器 同时驱动接收数据 RXD[3:0], 和接收时钟信号,控制器时钟在 `RXCLK` 为上升沿的时候接收数据 当 RXDV 为高的时候
当检查到接收错误的时候 接收器驱动 RXER 为高
* 功能描述
* Transceiver --------> 作为一个收发器,这是一个最基本的功能。
* Auto-negotiation -------> 自动裁定功能
* The purpose of the auto-negotiation function is to automatically configure the transceiver to the optimum link parameters based on the capabilities of its link partner. Auto-negotiation is a mechanism for exchanging configuration information between two link-partners and automatically selecting the highest performance mode of operation supported by both sides. Auto-negotiation is fully defined in clause 28 of the IEEE 802.3 specification.
* 自动协商的目的功能是自动配置的收发器最佳链接参数基于其链接伙伴的能力。自动协商机制两个链接对象之间交换配置信息,自动选择双方支持的最高性能的操作模式。自动协商完全定义 28 IEEE 802.3规范的条款。
* 当一次自动协商完成,有关已经通过的连接信息将会记录在 SMI 串行管理接口上面,这个协商处理的结果将会记录在 `PHY Special Control/Status Register` 的 `Speed Indication` 位, 而且在 `Auto Negotiation Link Partner Ability Register`, 这个协商协议只是 `physical layer` 活动而无关 `MAC` 控制器。
* 这个收发器广播的能力是存储在 `Auto Negotiation Advertisement Register` 这个寄存器上,默认的广播模式取决于用户自定义芯片上的信号选择。
* 如果下面的事件发生,那么都会开始 `auto-negotiation`
* 硬件reset
* 软件重启
* 电源重启
* 连接关闭状态
* 设置了 `Basic Control Register` 的 `Restart Auto-Negotiate` 位
* 当上述其中一个事件发生,那么收发器将开始自动裁定 通过不断的发送 `Fast Link Pulses(FLP)` 快速连接脉冲,通过10M 的收发器发送连续的连接脉冲
* 还可以通过 `Parallel Detection` 功能连接一个没有自动裁定的 另外一个连接器。
* 还可以通过 设置寄存器 使`Disabling Auto-negotiation`
* MAC 的接口一共有两种支持,一种是MII 另外一种是RMII, MII 在上面有描述,RMII 这里不作介绍。
* `CRS_DV - Carrier Sense/Receive Data Valid` 载波检测/ 接收数据有效
* `CRS_DV` 在接收媒介不空闲的时候被声明。
* Serial Management Interface (SMI) (串行管理接口)
* 串行管理接口是用来控制设备以及获取他的状态。
* 在这个系统里面,SMI 提供了两个信号线。MDIO 以及MDC。
* MDC 信号是一个非周期性时钟通过 `station management controller(SMC)`
* MDIO 信号线是一个双向数据 SMI 输出输入信号,通过控制SMC 接受数据(commands),发送数据 (status)到SMC
* MDC 沿与沿之间的最小间隔是160ns, 沿与沿之间没有最大时间间隔。
* MDC 一个最小的循环是400 ns,
* MDIO 的读写的数据结构组成如下:
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317133204120-261132952.png)
* Interrupt Management
* 这个设备管理接口支持一个中断能力 不是包含在IEEE 802.3 规范内的。这个中断能力生成一个低异步中断信号在 `nINT` 输出当某一个事件被检测到当这个事件被设置在 `Interrupt Mask Register`
* 这个设备的中断系统提供两种模式,一种初级中断一种另类的中断,两者都是将 `nINT` 引脚设为低当相对应的掩码位被设置, 这两个中断不同的地方只有他们如何 取消断言 `nINT` 中断的输出。
* 1.`Primary Interrupt System` 是默认的中断模式 `(ALTINT bit of the Mode Control/Status Register is “0”)` , 这种初级中断模式总是在上电或者是硬件重启的时候被选择
* 在这个模式去设置一个中断,设置对应的掩码位在 `Interrupt Mask Register`, 然后当事件断言 `nINT` 为真, `nINT` 输出将断言。当对应的事件解除认定 `nINT` 为真,然后 `nINT` 将解除断言。
* Interrupt Management Table :
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317140101245-1190897768.png)
* 2.`Alternate Interrupt System`
* 这种模式是设定的 `ALTINT` 位在 `Mode Control/Status Register` 为1, 在这种模式下去设置中断是设置对应的位在 掩码寄存器30,为了清除一个中断是清除对应的位在`Interrupt Mask Register` 去清除 `nINT` 中断输出。 或者是清除对应的中断源,写`1` 到对应的中断的源标志, 写 `1`到对应的标志源会造成 状态器会去检查这个中断源去决定如果中断源标志要清除或者是继续保持在`1`, 如果条件去解除断言为真,那么中断源标志将被清除 同时 `nINT` 也会被解除断言, 如果解除断言的条件为假,那么中断源标志继续设置,`nINT` 继续被断言。
* Alternative Interrupt System Management Table:
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317141926104-911486229.png)
* 寄存器描述
* 所有的寄存器操作都是通过 `Serial Management Interface (SMI) protocol` (SMI协议)进行寻址操作。
* 寄存器属性描述术语:
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317151342385-1538457149.png)
* `Control and Status Registers` 控制和状态寄存器, 下图提供一个表关于支持的寄存器,寄存器细节,包含的位定义:
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317151657698-1794340789.png)
* 挑几个比较重要的寄存器介绍一下
* `Basic Control Register`: 这是控制基本的控制寄存器,比如说控制 软件reset,回环,速度选择,自动协商允许,关闭电源,孤立模式,重启自动协商,双工模式,冲突测试
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317151958651-1095720565.png)
* `Basic Status Register`: 基本的状态寄存器
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317152603995-2015910964.png)
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317152645776-1670959601.png)
* `Auto Negotiation Link Partner Ability Register`: 这里面主要存放连接的那个伙伴的一个能力的存储寄存器:
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317153300120-993556022.png)
* `Mode Control/Status Register`: 模式控制/状态寄存器
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317153539948-307600604.png)
* `Symbol Error Counter Register`: 错误累计寄存器
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317153903260-2100278705.png)
* `Interrupt Source Flag Register` 中断源标志寄存器
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317154101401-1048936203.png)
* `Interrupt Mask Register` 中断掩码寄存器
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317154141870-1123621216.png)
* `PHY Special Control/Status Register` 物理层专用控制/状态寄存器
![](http://images2015.cnblogs.com/blog/991711/201703/991711-20170317154251276-1645210058.png)
`