因为产品的双网口出现了问题,而且是AM335x 内部驱动,难度比较大,现从PHY 端开始分析相关原理,找到双网口不能使用的原因。



#### 此篇是记录一些有关`LAN8710A` 这个`PHY`的一些特性。

  • 各个功能模块大致图解:



* `MII` 模式下各pin 功能描述:

    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)

        `

LAN8710A/LAN8710Ai datasheet 记录的更多相关文章

  1. OK335xS 网络连接打印信息 hacking

    /*********************************************************************** * OK335xS 网络连接打印信息 hacking ...

  2. STM32开发记录

    一.使用keil时经常遇到的问题 1.没有下载固件包 2.下载器没选择对 3.没安装下载器的驱动 二.关于数据手册和开发手册 1.如何下载这些手册 在官网下载,官网永远是一手资源 意法半导体官网:ww ...

  3. Lattice 的 Framebuffer IP核使用调试笔记之datasheet笔记

    本文由远航路上ing 原创,转载请标明出处. 学习使用以及调试Framebuffer IP 核已经有一段时间了,调试的时候总想记录些东西,可是忙的时候就没有时间来写,只有先找个地方记录下,以后再总结. ...

  4. Smart210学习记录-----SD/MMC/SDIO驱动

    转自:http://jingpin.jikexueyuan.com/article/23369.html http://blog.csdn.net/evilcode/article/details/7 ...

  5. Arduino单片机使用和开发问题记录(转)

    源:Arduino单片机使用和开发问题记录 1.将程序上传到板子时Arduino IDE提示“avrdude: stk500_getsync(): not in sync: resp=0x00” 网上 ...

  6. STM32F103X datasheet学习笔记---RCC(reset and clock control)

    1.前言 本文主要记录stm32 关于reset 和 clock部分 datasheet的内容. 2.reset 有三种类型的reset:system reset, power reset, back ...

  7. am335x Watchdog 生效导致 LAN8710A action 异常

    原因是因为 watchdog 生效的时候,产生的 reset 信号,只有 2.5us 左右,太短了,导致 LAN8710a 未完全重启 在 kernel watchdog 里面增加下面的代码即可 86 ...

  8. MT29F8G08ABACA nandflash 参数记录

    跟踪 MT29F8G08ABACA datasheet ,记录里面有关软件的参数 首先,硬件上的特征,page size , oob , block size [](http://images2017 ...

  9. am335x Linux kernel DTS pinmux 定义记录

    记录am335x TI PDK3.0 Linux Kernel 设备的pinmux 的配置 在TI 的Linux kernel 设备树里面,有很多关于pinctrl-single,pins 的配置, ...

随机推荐

  1. HDUOJ---What Are You Talking About

    What Are You Talking About Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/204800 K ...

  2. 面向对象程序设计(OOP设计模式)-结构型模式之装饰器模式的应用与实现

    课程名称:程序设计方法学 实验4:OOP设计模式-结构型模式的应用与实现 时间:2015年11月18日星期三,第3.4节 地点:理1#208 一.实验目的 加深对结构型设计模式的理解以及在开发中的实际 ...

  3. 何时使用copy,strong,weak,assign关键字 定义属性

    现在我们看看iOS5中新的关键字strong, weak, unsafe_unretained. 可以与以前的关键字对应学习strong与retain类似,weak与unsafe_unretained ...

  4. 解决错误This message can only be sent over HTTPS.

    在做基于Owin oauth客户端申请授权,调用如下代码: this.InitializeWebServerClient(); var userAuthorization = _webServerCl ...

  5. C# 发布REST接口地址API服务

    原文地址:https://blog.csdn.net/chinacsharper/article/details/21256569 今天碰巧,用到了淘宝的在线IP地址查询的Rest API,它提供接口 ...

  6. 【Linux】撷取命令cut

    什么是撷取命令啊?说穿了,就是将一段数据经过分析后,取出我们所想要的.或者是经由分析关键词,取得我们所想要的那一行! 不过,要注意的是,一般来说,撷取信息通常是针对『一行一行』来分析的,并不是整篇信息 ...

  7. python练习笔记——完全数(1000以内的)

    完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数.它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身.如果一个数恰好等于它的因子之和,则称该数为“完 ...

  8. 【转】对 Go 语言的综合评价

    以前写过一些对 Go 语言的负面评价.现在看来,虽然那些评价大部分属实,然而却由于言辞激烈,没有点明具体问题,难以让某些人信服.在经过几个月实际使用 Go 来构造网站之后,我觉得现在是时候对它作一些更 ...

  9. 统一日志监控系统 springboot websocket 简单版 王代军-作品

    http://git.oschina.net/redArmy/springboot-websocket-logs 目的: 统一监控 开发测试环境日志 如果需要可以拓展线上环境的日志(自己视情况而定) ...

  10. django中数据库的相关操作

    一.使用环境 python2.7,django>1.7 二.数据库进行配置 在setting文件中进行修改 1.找到DATABASES DATABASES = { 'default': { 'E ...