通过 DMA 控制器进行介质访问控制 (MAC)

STM32F4xx系列控制器内部集成了一个以太网外设,它实际上是一个通过DMA控制器进行介质访问控制(MAC),它的功能就是实现MAC 层的任务。

借助以太网外设,STM32F4xx 控制器可以通过ETH 外设按照IEEE 802.3-2002 标准发送和接收MAC 数据包。

ETH 内部自带专用的DMA 控制器用于MAC,ETH 支持两个工业标准接口介质独立接口(MII)和简化介质独立接口(RMII)用于与外部PHY 芯片连接。MII 和RMII 接口用于MAC数据包传输,ETH 还集成了站管理接口(SMI)接口专门用于与外部PHY 通信,用于访问PHY 芯片寄存器。

物理层定义了以太网使用的传输介质、传输速度、数据编码方式和冲突检测机制,PHY 芯片是物理层功能实现的实体,生活中常用水晶头网线+水晶头插座+PHY 组合构成了物理层。

ETH 有专用的DMA 控制器,它通过AHB 主从接口与内核和存储器相连,AHB 主接口用于控制数据传输,而AHB 从接口用于访问“控制与状态寄存器”(CSR)空间。在进行数据发送是,先将数据有存储器以DMA 传输到发送TX FIFO 进行缓冲,然后由MAC 内核发送;接收数据时,RX FIFO 先接收以太网数据帧,再由DMA 传输至存储器。ETH 系
统功能框图如下。


从上图可以看出,STM32F4是必须外接PHY芯片,才可以完成以太网通信的,外部PHY芯片可以通过MII/RMII接口与STM32F4内部MAC连接,并且支持SMI(MDIO&MDC)接口配置外部以太网PHY芯片。

MII 和RMII 接口

介质独立接口(MII)用于连接MAC 控制器和PHY 芯片,提供数据传输路径。RMII 接口是MII 接口的简化版本,MII 需要16 根通信线,RMII 只需7 根通信,在功能上是相同。

  • TX_CLK:数据发送时钟线。标称速率为10Mbit/s 时为2.5MHz;速率为100Mbit/s 时为25MHz。RMII 接口没有该线。
  • RX_CLK:数据接收时钟线。标称速率为10Mbit/s 时为2.5MHz;速率为100Mbit/s 时为25MHz。RMII 接口没有该线。
  • TX_EN:数据发送使能。在整个数据发送过程保存有效电平。
  • TXD[3:0]或TXD[1:0]:数据发送数据线。对于MII 有4 位,RMII 只有2 位。只有在TX_EN 处于有效电平数据线才有效。
  • CRS:载波侦听信号,由PHY 芯片负责驱动,当发送或接收介质处于非空闲状态时使能该信号。在全双工模式该信号线无效。
  • COL:冲突检测信号,由PHY 芯片负责驱动,检测到介质上存在冲突后该线被使能,并且保持至冲突解除。在全双工模式该信号线无效。
  • RXD[3:0]或RXD[1:0]:数据接收数据线,由PHY 芯片负责驱动。对于MII 有4 位,RMII 只有2 位。在MII 模式,当RX_DV 禁止、RX_ER 使能时,特定的RXD[3:0]值用于传输来自PHY 的特定信息。
  • RX_DV:接收数据有效信号,功能类似TX_EN,只不过用于数据接收,由PHY 芯片负责驱动。对于RMII 接口,是把CRS 和RX_DV 整合成CRS_DV 信号线,当介质处于不同状态时会自切换该信号状态。
  • RX_ER:接收错误信号线,由PHY 驱动,向MAC 控制器报告在帧某处检测到错误。
  • REF_CLK:仅用于RMII 接口,由外部时钟源提供50MHz 参考时钟。

因为要达到100Mbit/s 传输速度,MII 和RMII 数据线数量不同,使用MII 和RMII 在时钟线的设计是完全不同的。对于MII 接口,一般是外部为PHY 提供25MHz 时钟源,再由PHY 提供TX_CLK 和RX_CLK 时钟。对于RMII 接口,一般需要外部直接提供50MHz时钟源,同时接入MAC 和PHY。

MAC 数据包发送和接收

ETH 外设负责MAC 数据包的发送和接收。利用DMA从系统寄存器得到数据包数据内容,ETH 外设自动填充完成MAC数据包的封装,然后通过PHY发送出去。在检测到有MAC数据包需要接收时, ETH 外设控制数据接收,并解封MAC数据包得到解封后的数据,通过DMA传输到系统寄存器内。

MAC 802.3 帧格式:

1. MAC 数据包发送

MAC 数据帧发送全部由DMA控制,从系统存储器读取的以太网帧由DMA 推入FIFO,然后将帧弹出并传输到MAC 内核。帧传输结束后,从MAC 内核获取发送状态并传回DMA。在检测到SOF(Start Of Frame)时,MAC 接收数据并开始MII 发送。在EOF(End Of Frame)传输到MAC 内核后,内核将完成正常的发送,然后将发送状态返回给DMA。

2. MAC 数据包接收

MAC 接收到的数据包填充RX FIFO,达到FIFO 设定阈值后请求DMA 传输。在默认直通模式下,当FIFO 接收到64 个字节(使用ETH_DMAOMR 寄存器中的RTC 位配置)或完整的数据包时,数据将弹出,其可用性将通知给DMA。DMA 向AHB 接口发起传输后,数据传输将从FIFO 持续进行,直到传输完整个数据包。完成EOF 帧的传输后,状态字将弹出并发送到DMA 控制器。在Rx FIFO 存储转发模式(通过ETH_DMAOMR 寄存器中的RSF 位配置)下,仅在帧完全写入Rx FIFO 后才可读出帧。

STM32以太网通信-STM32以太网外设(ETH)相关推荐

  1. STM32F4+DP83848以太网通信指南系列(一):知识储备

    丁丁的博客:https://www.hexcode.cn/article/show/stm32-ethernet1 2017-12-09 17:32:19 以太网通信 stm32 STM32F4+DP ...

  2. 基于Xilinx artix 7的FPGA高级应用(二):千兆以太网通信(原理篇)

    本项目是基于Xilinx Artix7 XC7A35T芯片 以太网芯片选用的是RTL8211EG PHY芯片 MAC 和PHY接口标准是GMII 开发工具是vivado 2018.3 FPGA高级应用 ...

  3. 【STM32】HAL库-以太网外设-LAN8720A-LWIP-无操作系统

    开发环境 KEIL:MDK_ARM_5.27 MCU:STM32F429IGT6 PHY_IC:LAN8720A LWIP:LWIP2.1.2 STM32CUBEMX:6.6.1 HAL:V1.27. ...

  4. STM32开发笔记47:STM32F4+DP83848以太网通信指南系列(一):知识储备

    单片机型号:STM32F407VGT 本章为系列指南第一章,主要是介绍一下项目思路,并且尽可能列出从零开始着手开发这个项目过程中,所需要理解的各类知识点,关于这些知识点,如果需要更详细的介绍,请列为看 ...

  5. ETH—Lwip以太网通信

    第39章     ETH-Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  6. 第39章 ETH—Lwip以太网通信—零死角玩转STM32-F429系列

    第39章     ETH-Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  7. 第39章 ETH—Lwip以太网通信—零死角玩转STM32-F429系列

    第39章     ETH-Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  8. STM32串口通信详解(嵌入式学习)

    STM32串口通信 1.通信基础知识 1.1 时钟信号区分 同步通信 异步通信 波特率 总线协议(电气协议) 1.2 通信方式划分 串行通信 并行通信 1.3 通信方向划分 单工通信 半双工通信 全双 ...

  9. STM32F4+DP83848以太网通信指南系列知识储备

    本章为系列指南第一章,主要是介绍一下项目思路,并且尽可能列出从零开始着手开发这个项目过程中,所需要理解的各类知识点,关于这些知识点,如果需要更详细的介绍,请列为看官自行百度谷歌. STM32F407简 ...

最新文章

  1. 倒计时1天 | 2019 中国大数据技术大会(BDTC)报名通道即将关闭(附参会提醒)...
  2. SQL备份与恢复之备份类型和选项
  3. 勒索软件出新招,小心你的隐私和財产安全!
  4. TCP负载均衡地址转换(锐捷设备)
  5. HDOJ2013_蟠桃记
  6. wdatepicker不展示秒_华为电源键只能开关机?其实还隐藏了这5个作用,一般人不知道...
  7. 苹果回应大数据杀熟:罪在开发者,和苹果没关系!
  8. jQuery ajax get与post后台交互中的奥秘
  9. 树莓派与阿里云服务器进行socket通信
  10. pyspark 解决数据倾斜demo(两端聚合)(全网之最)
  11. 计算机视觉c刊论文,摄影外文文献 摄影核心期刊参考文献哪里找
  12. IMPLEMENT_DYNAMIC
  13. Android 4.1.2微信版本,ttkefu在线客服系统
  14. 用python计算方差,标准差和百分位数
  15. 如何使用大华SDK工具查询和播放设备录像?
  16. mvn Mac Linux 版本,Mac 下 Maven 的命令行安装
  17. 『教程分享』不节食减肥教程,职场教学,U盘制作,吉他教程,文字语音生成,和平精英打野小思路教学
  18. CMake 编译项目时提示找不到依赖项
  19. 用matlab打造的摩斯电码加解码器音频版,支持包括中文在内的任意字符
  20. 从键盘录入一个字符串,统计该串中有大写字母、小写字母、数字各有多少个。比如:Hello12345World大写:2个 小写:8个数字:5个。

热门文章

  1. C++ Primer Plus(第六版)--学习杂记(第四章)
  2. 补习系列(6)-SpringBoot 整合Shiro 一指禅
  3. eletree append方法添加子节点
  4. 【云计算与大数据计算】大数据物理、集成、安全架构及阿里云飞天系统架构讲解(超详细)
  5. 财经知识 | 金融小白学习之旅
  6. 射频功放学习之ADS设计单频点功率放大器
  7. Python实现傅里叶变换:图像频域分析和处理
  8. php写接口curd,8.2 php接口类 实现数据库CURD小案例
  9. c语言char和float相互转换
  10. C#+AE缓冲区分析