TMS320F28384S: F28384S CM核以太网RMII模式被驱动库错误修改为RevMII,强制写入无效

Part Number: TMS320F28384S
Other Parts Discussed in Thread: C2000WARE

1. 硬件与软件环境

  • 芯片型号:TMS320F28384S(176引脚)

  • 以太网PHY:LAN8720A,RMII模式,外部50MHz时钟(PHY提供)

  • 开发环境:CCS 20.4.1,C2000Ware v6.00.01.00,FreeRTOS + lwIP

  • 工程:CM核运行 enet_lwip_freertos 例程,C28x核负责GPIO复用和时钟配置

2. 问题现象

  • 网络通信不稳定,ping丢包严重(50%)。

  • 调试发现 EMACSS_CTRLSTS 寄存器(地址 0x400C2004)被错误配置为 0xA307(RevMII模式,外部时钟,密钥0xA3)。

  • 正确配置应为 RMII模式(PHY_INTF_SEL=4),外部时钟(CLK_SRC_SEL=0)。

3. 已定位的根本原因

  • Ethernet_getHandle 函数内部调用了 Ethernet_enableDmaInterrupt

  • 该函数在执行后将 EMACSS_CTRLSTS 从 0x8304(RMII)改为了 0xA307(RevMII)。

  • 进一步分析发现,驱动库中存在多处寄存器偏移宏定义错误

    • ETHERNET_O_MAC_INNER_VLAN_INCL 定义为 0x64(正确),但实际写入时地址计算错误?

    • 但 Ethernet_enableDmaInterrupt 应操作 DMA_CH0_INTERRUPT_ENABLE(偏移 0x1134),却写到了 EMACSS_CTRLSTS(偏移 0x2004)。

    • 怀疑 base 参数被错误传递为 EMAC_SS_BASE0x400C2000)而非 EMAC_BASE0x400C0000),或者 ETHERNET_O_DMA_CH0_INTERRUPT_ENABLE 在某些条件下被重定义为 0x4

4. 已尝试的修复方法(均无效)

  • 直接在 Ethernet_init 末尾强制写 0x304(RMII+外部时钟,密钥0)。

  • 保留高16位(当前密钥)仅修改低16位。

  • 先清零再写正确值。

  • 半字写入、位操作、写入其他测试值。

  • 使用正确密钥 0xA5 写入 0xA50004

  • 所有尝试后寄存器值不变,仍为 0xA307 或 0x9007

5. 疑问与求助

  • 为什么 Ethernet_enableDmaInterrupt 会错误写入 EMACSS_CTRLSTS?是驱动库bug还是我们的工程配置问题?

  • 为何后续任何直接写 EMACSS_CTRLSTS 的操作都无法改变其值?是否该寄存器被锁定或需要特定时序?

  • 请问官方是否有计划修复C2000Ware v6.00.01.00中的这些偏移错误?或者是否有已知的补丁/勘误?

  • 除了修改驱动库源码,是否有其他方法(如通过C28x侧配置)可以强制锁定RMII模式?

6. 附件

  • 关键代码片段:Ethernet_enableDmaInterrupt 调用处、Ethernet_init 中的强制写入。

  • 寄存器截图:0x400C2004 在执行前后的值变化。

  • hw_emac.h 中相关宏定义(确认正确)。

  • 整个工程已经提供。

  • pInitCfg = Ethernet_initInterface(initInterfaceConfig);     //这里能正确配置为RMII模式
    Ethernet_getHandle((Ethernet_Handle)1, pInitCfg, &emac_handle);   //执行到这被改为了RevMII 模式。
     
     
    请尽快提供技术支持!谢谢!
     
    工程附件:enet_lwip_freertos.rar 
     
  • 您好,收到了您的案例,调查需要些时间,感您的耐心等待。

  • 您好!我补充一些信息。

    pInitCfg = Ethernet_initInterface(initInterfaceConfig); 执行后:

    • 硬件复位:清空所有 MAC/DMA/MTL 寄存器。

    • 锁存错误模式:在复位释放时采样 PHY_INTF_SEL,将其锁存为 RevMII(7)。

    • 后果

      1. 后续任何对 EMACSS_CTRLSTS 的写入(即使密钥正确)无法改变实际物理接口模式

      2. RMII PHY 与 RevMII 模式不匹配,导致网络完全不通或严重丢包。

      3. 之前所有的初始化配置(如 MAC 地址、DMA 描述符)全部被复位清除,必须重新配置。