2. RA MCU以太网外设与底层驱动

RA系列MCU的以太网通信能力并不是单一外设完成的,而是由ETHERC(Ethernet Controller)、EDMAC(Ethernet DMA Controller)、DMAC(通用DMA控制器)以及中断系统协同工作。理解这几个模块的分工与数据通路,是后续在FSP中正确配置以太网驱动、调试PHY链路和完成ping验证的基础。

一、ETHERC、EDMAC与DMAC的职责划分

ETHERC是MAC层控制器,负责以太网帧的成帧/解帧、CRC校验、地址过滤、全双工/半双工协商以及MII/RMII接口时序。它直接与外部PHY芯片(如KSZ8081)通过RMII连接,收发的是符合IEEE 802.3的帧数据。

EDMAC是ETHERC专用的以太网DMA引擎,它不经过CPU搬运每个字节,而是通过描述符(Descriptor)链自动完成发送与接收。每个描述符指向一块缓冲区,并携带状态位(如是否发送完成、是否接收有效、是否发生错误)。EDMAC在收到一帧后,把数据写入描述符指定的缓冲区,更新状态位,然后触发接收中断;发送时则按描述符链依次取数据发出。

DMAC是RA的通用DMA控制器,在以太网场景中通常用于辅助搬运非帧数据,例如把应用层准备好的数据块搬到发送缓冲区,或把接收缓冲区中的数据搬到协议栈处理区。它和EDMAC不是同一层级:EDMAC服务于以太网帧的实时收发,DMAC服务于系统内的一般数据搬运。

RA MCU以太网数据通路与描述符机制 PHY KSZ8081 RMII / MDIO ETHERC MAC成帧/CRC 地址过滤 EDMAC 描述符链驱动 帧级DMA DMAC 通用数据搬运 CPU / 协议栈 中断服务 / 应用 描述符环 状态位 / 缓冲区指针 发送链 / 接收链 RMII 帧数据 辅助搬运 中断通知 描述符读写

二、中断与描述符机制

EDMAC的收发都依赖描述符环。以接收为例,初始化时把若干接收描述符串成环,每个描述符的缓冲区指针指向一块接收缓冲。当PHY收到帧并交给ETHERC后,EDMAC把帧写入当前描述符的缓冲区,置位“接收完成”状态,然后产生接收中断。中断服务程序遍历描述符,找到有效帧交给协议栈,再把描述符重新挂回环尾,形成循环。

发送方向相反:应用把数据放入发送缓冲区,填写发送描述符,置位“发送请求”,EDMAC按链取出并发送,完成后置位“发送完成”并触发发送中断。若发送过程中发生冲突或错误,描述符中会记录错误状态,驱动据此重传或上报。

RA的中断控制器(ICU)为ETHERC/EDMAC分配了多个中断源,常见包括:接收完成、发送完成、接收错误、发送错误、PHY链路状态变化。FSP的以太网驱动会把这些中断注册到对应的回调,用户只需在回调中处理帧或链路事件,不必直接操作寄存器。

三、FSP中以太网驱动配置要点

在e² studio中新建RA项目后,通过FSP配置器添加Ethernet (r_ether)模块。关键配置项包括:

  • 通道选择:选择ETHERC0或ETHERC1,对应芯片实际引脚。
  • PHY地址:KSZ8081的MDIO地址由PHYAD[0]引脚决定,常见为0x00或0x01,需与硬件一致。
  • 接口模式:RMII或MII,RA多数评估板使用RMII,需确认REFCLK为50MHz。
  • 描述符数量:发送/接收描述符个数,通常各4~8个,数量影响吞吐与内存占用。
  • 中断优先级:接收中断优先级应高于发送,避免丢帧。
  • 回调函数:注册用户回调,用于处理接收帧、发送完成和链路状态变化。

配置完成后生成代码,FSP会创建g_ether0控制结构,并提供R_ETHER_Open()、R_ETHER_Write()、R_ETHER_Read()等API。用户应用通过回调获取帧,而不是轮询寄存器。

四、KSZ8081初始化与链路管理

KSZ8081是常用的10/100Mbps PHY,通过MDIO接口访问其寄存器。上电后,驱动需要完成以下动作:

  1. 复位PHY:写BMCR(寄存器0)的bit15,等待复位完成。
  2. 配置自动协商:设置BMCR的bit12使能Auto-Negotiation,并设置ADVERTISE寄存器通告10/100M全双工能力。
  3. 等待链路建立:轮询BMSR(寄存器1)的bit2(Link Status),或使用链路状态变化中断。
  4. 读取协商结果:从BMSR和PHYSTS读取当前速率与双工模式,配置ETHERC的MAC层匹配。

FSP的r_ether驱动内部已封装了PHY初始化流程,但用户仍需在配置中正确填写PHY地址和接口类型。若链路无法建立,应先用示波器检查REFCLK、TXD/RXD和MDC/MDIO信号,再确认PHY地址是否匹配。

五、回环测试与ping验证

回环测试是验证MAC与PHY通路是否正常的最直接手段。RA的ETHERC支持内部回环模式,可在不接外部网络的情况下让发送帧直接回到接收路径。操作方式:在FSP配置中使能回环,或通过寄存器设置RTLR(回环控制)。发送一帧后,若接收中断能收到相同内容,说明ETHERC、EDMAC和描述符链工作正常。

外部回环则把PHY的TX与RX通过网线或回环插头短接,验证PHY和RMII接口。若内部回环通过而外部回环失败,问题通常在PHY配置或RMII时序。

ping验证需要MCU运行TCP/IP协议栈(如FreeRTOS+TCP或NetX Duo)。配置MCU的IP地址与PC同网段,例如MCU为192.168.1.100,PC为192.168.1.10。在PC上执行:

ping 192.168.1.100 -t

若收到回复,说明从PHY、ETHERC、EDMAC到协议栈的整条链路已打通。若超时,可按以下顺序排查:链路指示灯是否亮、PHY地址是否正确、描述符是否耗尽、中断是否使能、IP地址是否冲突。典型现象是“能收不能发”或“能发不能收”,前者多与发送描述符未及时回收有关,后者多与接收描述符未重新挂载有关。

在调试初期,建议先用内部回环确认MAC层,再用外部回环确认PHY,最后接入协议栈做ping。每一步都通过中断回调中的计数器观察收发帧数,比单纯看ping结果更容易定位问题。

掌握ETHERC、EDMAC、DMAC的分工,理解描述符环与中断的配合方式,再结合FSP配置和PHY初始化流程,就能为后续工业以太网协议(如EtherCAT、PROFINET、Modbus TCP)的移植打下稳定的底层基础。