瑞萨RZ/T2L与裕泰微YT8512H PHY的EtherCAT例程移植
瑞萨 RZ/T2L 是一款高性能 MPU,可通过 EtherCAT 实现高速、高精度的实时控制。RZ/T2L 搭载最大频率为 800MHz 的 Arm® Cortex®-R52 内核以及与 CPU 紧密耦合的大容量内存 (576KB),可以降低使用高速缓存存储器时出现的执行时间波动,并提供确定性与高速响应处理。RZ/T2L 在 CPU 内核、外设功能和 LLPP (低延时外设端口) 总线等方面具备与 RZ/T2M 无缝连接的硬件架构,可用于 AC servo 等更高性能的控制系统。此外,RZ/T2L 提供了与瑞萨 MPU 和 MCU 可兼容、可扩展的软件平台。它使客户可以利用自己的软件资产进行新机型的开发。
EtherCAT 作为一种高速、实时工业以太网协议,是实现高效通信的重要手段。接下来将介绍如何基于 CN032 硬件平台,将裕泰微 YT8512H PHY 移植到瑞萨 RZ/T2L 中实现 EtherCAT 通信功能。
硬件平台:CN032-ACSERVO RZ/T2L 电机解决方案套件
本文适用于采用跟 CN032 开发板相同管脚定义的硬件,涉及 MII 接口、ESC、MDIO 等接口,CN032 的 PHY 原理图如下图 (图2) 所示:
需要注意的是:同一个 MCU 或 MAC 管理多个 YT8512H 时,不要使用 0 地址。由于 0 地址是广播地址,对地址为 0 的 phy 操作时,所有的 phy 都会响应。CN032 使用地址 1 和 2,如下图 (图3) 所示:
裕泰微支持的 EtherCAT 的 PHY 包括 YT8512H 和 YT8522,请注意由于 YT8512H 的高低温性能不是很好,目前裕泰微官方推荐 YT8522,两者除了有一个管脚的差异,其余管脚 pin to pin且软件兼容,如下图 (图4) 所示:
软件移植流程
资料获取
可在瑞萨官网通过【文档】>> 搜索“EtherCAT”即可查找到例程包 — 瑞萨 RZ/T2L 资源页面,具体路径如下图 (图5):
官网是最新的版本,已将 IO_CiA402_FoE 合并到一起。本文使用官网历史版本单独 CiA402 的 IAR 例程,点击下方即可下载已移植好的例程包:
RZT2L_EtherCAT_YT8512H_Cia402_ok.rar
代码移植
1. 移植过程
瑞萨提供 FSP 通过 Smart Configure 支持如下图 (图6) 中型号 PHY 的驱动,采用这些型号,使用官方的例程包软件上不需要做任何改动,适配 YT8512H/YT8522 需要在代码中做些修改。
下面介绍移植过程,主要思路为基于 VSC8541-02 的驱动例程修改 PHY 的寄存器,因为使用标准 MDIO 接口协议,以及 MII 或 RGMII 接口,读写时序都一样,可以使用同样的软件架构以及寄存器读写命令。具体移植过程如下:
主要在 r_ether_phy.c 中的函数 void ether_phy_targets_initialize_vsc8541 (ether_phy_instance_ctrl_t * p_instance_ctrl)。请注意这里没有更改函数名,实际函数名设为诸如 ether_phy_targets_initialize_yt8512h 等等,需要逐层更改调用关系以及声明,具体即注释掉 VSC8541 相关的配置寄存器的内容,添加如下图 (图7) 代码:
关键代码
#define ETHER_PHY_REG_PHY_RST_AN_OFFSET (0x9)
#define ETHER_PHY_REG_SPEED_SELECT1_OFFSET (0x6)
#define ETHER_PHY_REG_SPEED_SELECT0_OFFSET (0xD)
#define ETHER_PHY_REG_BASIC_CONTROL (0x00)
#define ETHER_PHY_REG_BASIC_STATUS (0x01)
#define ETHER_PHY_REG_EXTEND_STATUS_OFFSET (0x8)
#define ETHER_PHY_REG_DEBUG_REGISTER_ADDRESS_OFFSET 0x1E
#define ETHER_PHY_REG_DEBUG_REGISTER_DATA 0x1F
//代码段1
ether_phy_write(p_instance_ctrl,ETHER_PHY_REG_DEBUG_REGISTER_ ADDRESS_OFFSET, Θx4ΘCΘ);
ether_phy_write(p_instance_ctrl,ETHER_PHY_REG_DEBUG_REGISTER_ DATA, 0x030);
ether_phy_write(p_instance_ctrl,ETHER_PHY_REG_DEBUG_REGISTER_ ADDRESS_OFFSET, 0x40C3);
ether_phy_write(p_instance_ctrl,ETHER_PHY_REG_DEBUG_REGISTER_ DATA, 0x0320);
//代码段2
reg = ether_phy_read(p_instance_ctrl, ETHER_PHY_REG_BASIC_STATUS);
if(reg & 1<< ETHER_PHY_REG_EXTEND_STATUS_OFFSET) {
reg = ether_phy_read(p_instance_ctrl, ETHER_PHY_REG_BASIC_CON TROL);//read 0x00
reg &= ~(1<< ETHER_PHY_REG_SPEED_SELECT1_OFFSET | 1<< ETHER_P HY_REG_SPEED_SELECT0_OFFSET);
reg |= 1 << ETHER_PHY_REG_SPEED_SELECT0_OFFSET;
ether_phy_write(p_instance_ctrl, ETHER_PHY_REG_BASIC_CONTROL, reg);
reg = ether_phy_read(p_instance_ctrl, ETHER_PHY_REG_BASIC_CONTROL);
reg |= 1 << ETHER_PHY_REG_PHY_RST_AN_OFFSET;
ether_phy_write(p_instance_ctrl, ETHER_PHY_REG_BASIC_CONTROL,reg); }
解释说明
#define ETHER_PHY_REG_DEBUG_REGISTER_ADDRESS_OFFSET 0x1E
#define ETHER_PHY_REG_DEBUG_REGISTER_DATA 0x1F
这两个宏为 MDIO 寄存器扩展寄存器地址,对应 YT8512H 寄存器 1EH 和 1FH,如下图 (图8) 所示:
移植关键代码段1 释义:
ether_phy_write(p_instance_ctrl,ETHER_PHY_REG_DEBUG_REGISTER_ADDR ESS_OFFSET, Θx40C0);
ether_phy_write(p_instance_ctrl,ETHER_PHY_REG_DEBUG_REGISTER_DAT A, Θx030);
ether_phy_write(p_instance_ctrl,ETHER_PHY_REG_DEBUG_REGISTER_ADDR ESS_OFFSET, Θx40C3);
ether_phy_write(p_instance_ctrl,ETHER_PHY_REG_DEBUG_REGISTER_DAT A, Θx0320);
结合规格书,可以看到,0x1F 是要写入由寄存器 0x1E 中的地址偏移量指示的 EXT 的数据,上面代码段前两句分别在 0x40C0 写入 0x1E,0x030 写入 0x1F,同理,接下来两行分别在 0x40C3 写入 0x1E,0x0320 写入0x1F,从规格书看到 0x40C0,0x40C3 为扩展寄存器,所以上面代码段分别是给 0x40C0 写入 0x030,0x40C3 写入 0x320。
移植关键代码段2 释义:
ether_phy_write(p_instance_ctrl, ETHER_PHY_REG_BASIC_CONTROL, reg);//
地址 0 寄存器的 bit13 设置1,bit6 设置为 0,从规格书看到设置为 100Mb/s 速度
/*
Bit6 Bit13
1 1 Reserved
1 0 1000Mb/s
0 1 100Mb/s
0 0 10Mb/s
*/
ether_phy_write(p_instance_ctrl, ETHER_PHY_REG_BASIC_CONTROL, re g);//
地址 0 寄存器的 bit9 设置 1,自协商
/*
Auto-Negotiation automatically restarts after
hardware or software reset regardelss of bit[9] RESTART.
=1: Restart Auto-Negotiation Process
=0: Normal operation
*/
下图 (图10) 为相关 00H 寄存器部分截图:
2. 调试
在调的时,需要将 YT8512H 的寄存器打印出来,以下介绍一种调试方法,可在初始化函数中添加代码记录 PHY 寄存器状态,使用 IAR Live Watch 工具查看寄存器值。
EtherCAT 一般会挂两片 PHY 芯片,所以程序上 ether_phy_targets_initialize_vsc8541 会调用两次,分别配置 eth0 和 eth1。故在函数中声明一些静态变量数组,保存寄存器信息,在仿真时通过 IAR 的 live watch 的功能查看,代码如下:
static u int32_t phy_data[2][32];
static u int32_t j = 0;
for (i = 0;i<32;i++)
{
phy_data[j][i] = ether_phy_read(p_instance_ctrl, i);
}
j++;
仿真调试结果如下图 (图11) 所示:
3. 实验结果
经过上述步骤配置后,最终结果在 Twincat 上实现 ETH0 和 ETH1 的 OP 操作,如下图 (图12):
总结
本文通过硬件和软件的多方面调整,将 YT8512H PHY 移植到瑞萨 RZ/T2L 上,实现 EtherCAT 通信。此方法同样适用于类似的 PHY 芯片 (如 YT8522)。对于高精度实时控制应用,该方案提供了稳定、高效的通信支持。欲了解更多瑞萨相关方案或技术信息,可点击下方「联系我们」,提交您的需求,澳门人巴黎人1797公司愿意为您提供更详细的技术解答。