【沁恒 CH32V208 开发板免费试用】4.EtherCat主站移植前准备(三) - RISC-V MCU技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

江强 关注 私信
[活动]

【沁恒 CH32V208 开发板免费试用】4.EtherCat主站移植前准备(三)

三、EtherCAT 主站 SOEM 源码解析----IOmap
SOEM 通过函数 ec_config_map(&IOmap)完成逻辑地址和物理地址的映射,应用程序需要定义一个数组 IOmap,例如:
char IOmap[4096];
完成映射后,应用程序就可以通过读写数组 IOmap[]来完成与从站的数据交换。
1、映射关系
SOEM 首先将所有从站的输出映射到 IOmap[]的开始位置,然后是输入,如下图所示:
image.png
2、具体实现
函数 ec_config_map(&IOmap)最终会调/soem/EthercatConfig.c 中的以下函数完成映射。
int ecx_config_map_group(ecx_contextt *context, void *pIOmap, uint8group)
该函数完成主要的功能为:

  1. 读取从站 EEPROM 中的 PDO 信息,统计需要映射的输入输出长度;

  2. 根据步骤 1 的结果配置从站 SM 寄存器;

  3. 将从站的输出映射到 IOmap[],并配置从站 FMMU 寄存器;

  4. 将从站的输入映射到 Iomap[],并配置从站 FMMU 寄存器;

  5. 为应用程序提供读写 IOmap[]的接口。
    具体代码如下:
    image.png
    image.png

    3、映射实例
    在 SOEM 说明文档中有 1 个 IOmap 的例子,如下图所示:
    image.png

    Slave2 EL4001 的 1*16bit 输出被映射到逻辑地址的最开始处。
    Slave6、7、8、9 每个站只有 2bit,被映射到一个逻辑地址中。

更多回帖

×
发帖