因为产品的双网口出现了问题,而且是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. Android开发之动态检索(Filter)联系人

    1. 将所有联系人都转换为数字串,存到列表中. 将联系人姓名转换为数字串.例如,张丽思创->zlsc->9572. 过程解析: 张 – zhang – z – 9 丽 – li – l – ...

  2. zabbix对数据盘磁盘容量进行监控

    示例将数据盘挂载到 /mnt目录 , 对 /mnt目录进程容量监控 item 添加对 /mnt 目录的监控项 tragger 添加触发项 这样完成对一个数据盘磁盘容量的监控

  3. HDUOJ---1867 A + B for you again

    A + B for you again Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  4. C#取得页面URL信息

    我們在開發網頁應用程式,時常需要去解析網址(Request.Url)的每個片段,進行一些判斷.例如說 "http://localhost:1897/News/Press/Content.as ...

  5. Python 列表 index() 方法

    描述 Python 列表 index() 方法用于从列表中找出某个对象第一个匹配项的索引位置,如果这个对象不在列表中会报一个异常. 语法 index() 方法语法: L.index(obj[,star ...

  6. 导入sklearn 报错,找不到相关模块

    1.问题原因::安装包的来源问题,也可以理解为包版本兼容问题,有的包使用官方出版,有的包使用whl文件安装解决方案:将所有包都统一来源,要么全部使用官方出版的包,要么全部使用whl里面的包,问题就解决 ...

  7. ICDAR2017 Competition on Reading Chinese Text in the Wild(RCTW-17) 介绍

    阅读文章:<ICDAR2017 Competition on Reading Chinese Text in the Wild(RCTW-17)> 这篇文章是对一项中文检测和识别比赛项目( ...

  8. appium操作微信公众号H5 web页面

    安卓微信公众号的H5页面是webview,一般操作需要切换context. 在执行如下步骤,就能直接像识别native样识别webview 1.代码追加: ChromeOptions options ...

  9. sublim3常用插件安装

    1首先需要安装插件管理器Package Control,点击View > Show Console菜单,输入以下代码,按回车运行即可.说明:以下只对st3有效 import urllib.req ...

  10. MySQL "replace into" 的坑以及insert相关操作

    下面我们主要说一下在插入时候的几种情况: 1:insert ignore 2:replace into 3:ON DUPLICATE KEY UPDATE 关于insert ignore: 关于rep ...