| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32以太网之站管理接口 -> 正文阅读 |
|
[嵌入式]STM32以太网之站管理接口 |
????????STM32芯片自带以太网模块,该模块包括带专用 DMA 控制器的 MAC 802.3(介质访问控制)。它支持介质独立接口(MII) 和简化介质独立接口 (RMII),并通过一个选择位在两个接口间进行切换(请参见SYSCFG_PMC 寄存器)。自带了一个用于外部 PHY 通信的 SMI 接口,通过一组配置寄存器,用户可以为 MAC 控制器和 DMA 控制器选择所需模式和功能。 DMA 控制器通过 AHB 主从接口与内核和存储器相连。AHB 主接口用于控制数据传输,而AHB 从接口则用于访问“控制和状态寄存器”(CSR) 的空间。 在进行数据发送时,首先将数据由系统存储器以 DMA 的方式送至发送 FIFO (Tx FIFO) 进行缓冲,再通过 MAC 内核发送。同样,接收 FIFO (Rx FIFO) 则存储通过线路接收的以太网帧,直到这些帧通过 DMA 传送到系统存储器,了解收据收发方式,下面看一下STM32以太网功能框图。 ????????从上图可以看出,STM32是必须外接 PHY 芯片,才可以完成以太网通信的,外部 PHY芯片可以通过 MII/RMII 接口与 STM32F4 内部 MAC 连接,并且支持 SMI(MDIO&MDC)接口配置外部以太网 PHY 芯片。 ????????注: 当使用以太网时,AHB 时钟频率必须至少为 25 MHz。 站管理接口:SMI ????????站管理接口 (SMI) 允许应用程序通过 2 线时钟和数据线访问任意 PHY 寄存器。该接口支持访问多达 32 个 PHY。应用程序可以从 32 个 PHY 中选择一个 PHY,然后从任意 PHY 包含的 32 个寄存器中选择一个寄存器,发送控制数据或接收状态信息。任意给定时间内只能对一个 PHY 中的一个寄存器进行寻址。 ????????MDC 时钟线和 MDIO 数据线在微控制器中均用作复用功能 I/O: ????????MDC:周期性时钟,提供以最大频率 2.5 MHz 传输数据时的参考时序。MDC 的最短高电平时间和最短低电平时间必须均为 160 ns。MDC 的最小周期必须为 400 ns。在空闲状态下,SMI 管理接口将 MDC 时钟信号驱动为低电平。 ????????MDIO:数据输入/输出比特流,用于通过 MDC 时钟信号向/从 PHY 设备同步传输状态信息。 SMI 帧格式 ????????表中给出了与读操作或写操作有关的帧结构,位传输顺序必须从左到右。 管理帧包括八个字段: ????????报头:每个事务(读取或写入)均可通过报头字段启动,报头字段对应于 MDIO 线上 32个连续的逻辑“1”位以及 MDC 上的 32 个周期。该字段用于与 PHY 设备建立同步。 ????????起始:帧起始由 <01> 模式定义,用于验证线路从默认逻辑“1”状态变为逻辑“0”状态,然后再从逻辑“0”状态变为逻辑“1”状态。 ????????操作:定义正在发生的事务(读取或写入)的类型。 ????????PADDR:PHY 地址有 5 位,可构成 32 个唯一 PHY 地址。最先发送和接收地址的MSB 位。 ????????RADDR:寄存器地址有 5 位,从而可在所选 PHY 设备中对 32 个不同的寄存器进行寻址。最先发送和接收地址的 MSB 位。 ????????TA:周转字段在 RADDR 和 DATA 字段间定义了一个 2 位模式,以避免在读取事务期间出现竞争现象。读取事务时,MAC 控制器将 TA 的 2 个位驱动为 MDIO 线上的高阻态。PHY 设备必须将 TA 的第一位驱动为高阻态,将 TA 的第二位驱动为“0”。写入事务时,MAC 控制器针对 TA 字段驱动 <10> 模式。PHY 设备必须将 TA 的 2 个位驱动为高阻态。 ????????数据:数据字段为 16 位。最先发送和接收的位必须为 ETH_MIID 寄存器的位 15。 ????????空闲:MDIO 线驱动为高阻态。三态驱动器必须禁止,PHY 的上拉电阻使线路保持逻辑“1”状态。 ????????根绝上面的图片及说明,我们了解了mac与phy的通讯数据帧格式,接下来我们看一下STM32是怎么定义通讯寄存器及通讯实现方式。 以太网 MAC MII 地址寄存器 (ETH_MACMIIAR) MII 地址寄存器通过管理接口控制外部 PHY 的管理周期。 ????????位 31:16 保留,必须保持复位值。 ?????????位 15:11 PA:PHY 地址 (PHY address)该字段指示正在访问 32 个可能的 PHY 器件中的哪一个。 ????????位 10:6 MR:MII 寄存器 (MII register)这些位在所选 PHY 器件中选择需要的 MII 寄存器。 位 5 保留,必须保持复位值。 ????????位 4:2 CR:时钟范围 (Clock range)CR 时钟范围选项可确定 HCLK 频率并用于决定 MDC 时钟频率: 选项 HCLK MDC 时钟 ????????000 60-100 MHz HCLK/42 ????????001 100-150 MHzHCLK/62 ????????010 20-35 MHz HCLK/16 ????????011 35-60 MHz HCLK/26 ???????100 150-168 MHz HCLK/102 ???????101、110、111 保留 - ????????位 1 MW:MII 写 (MII write),此位置 1 是在告知 PHY,将要启动一个使用 MII 数据寄存器的写操作。如果此位未置 1,则表示会启动一个读操作,将数据放入 MII 数据寄存器。 ????????位 0 MB:MII 忙碌 (MII busy),向 ETH_MACMIIAR 和 ETH_MACMIIDR 写入前,此位应读取逻辑 0。向 ETH_MACMIIAR写入过程中,此位也必须复位为 0。在 PHY 寄存器访问过程中,此位由应用程序设为 0b1,指示读或写访问正在进行中。在对 PHY 进行写操作过程中,ETH_MACMIIDR(MII 数据)应始终保持有效,直到 MAC 将此位清零。在对 PHY 进行读操作过程中,ETH_MACMIIDR始终无效,直到 MAC 将此位清零。在此位清零后,才可以向 ETH_MACMIIAR(MII 地址)写入。 以太网 MAC MII 数据寄存器 (ETH_MACMIIDR) ????????MAC MII 数据寄存器存储要写入 PHY 寄存器的数据,该寄存器地址在 ETH_MACMIIAR 中指定。ETH_MACMIIDR 也将存储从 PHY 寄存器读取的数据,该寄存器地址由 ETH_MACMIIAR指定。 ????????位 31:16 保留,必须保持复位值。 ????????位 15:0 MD:MII 数据 (MII data) ????????其中包含在某次管理读操作之后从 PHY 中读取的 16 位数据值,或在某次管理写操作之前要写入 PHY 的 16 位数据值。 SMI 时钟选择 ????????MAC 启动管理写/读操作。SMI 时钟是一个分频时钟,其时钟源为应用时钟(AHB 时钟)。分频系数取决于 MII 地址寄存器中设置的时钟范围。 SMI 写操作 ????????当应用程序将 MII 写入位和繁忙位(在以太网 MAC MII 地址寄存器 (ETH_MACMIIAR) 中)置 1 时,SMI 将通过传输 PHY 地址、PHY 中的寄存器地址以及写入数据(在以太网 MACMII 数据寄存器 (ETH_MACMIIDR) 中)来触发对 PHY 寄存器进行写操作。事务进行期间,应用程序不应更改 MII 地址寄存器的内容或 MII 数据寄存器。在此期间对 MII 地址寄存器或MII 数据寄存器执行的写操作将会忽略(繁忙位处于高电平状态),事务将无错完成。写操作完成后,SMI 将通过复位繁忙位进行指示。 ?????????综合上面,我们大概了解mac与phy通讯时序流程及数据帧格式,我们看看是怎么实现写PHY寄存器操作的通讯接口。
? ? ? ? 有时我们想知道以太网链路状态是怎么样的,是有网线插入还是没有网线插入,我们就需要用读phy寄存器的操作,我们看看怎么实现phy寄存器值的读取 SMI 读操作 ????????当用户将以太网 MAC MII 地址寄存器 (ETH_MACMIIAR) 中的 MII 繁忙位置 1、MII 写入位清零时,SMI 将通过传输 PHY 地址和 PHY 中的寄存器地址在 PHY 寄存器中触发读操作。事务进行期间,应用程序不应更改 MII 地址寄存器的内容或 MII 数据寄存器。在此期间对MII 地址寄存器或 MII 数据寄存器执行的写操作将会忽略(繁忙位处于高电平状态),事务将无错完成。读操作完成后,SMI 将复位繁忙位,然后用从 PHY 中读取的数据更新 MII 数据寄存器。
|
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:49:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |