工具/软件:Code Composer Studio
现在、我将使用28377d 和 ET1100来开发 ECAT 伺服。 我们使用8位 异步 µController 接口在28377和 ET1100之间传输数据。 至于 EMIF、我的配置如下(参考 TI 的演示项目"PDI_hal_test_app"):
EMIF1Regs.ASYNC_CS2_CR.ALL = (EMIF_ASYNC_ASIZE_8 |// 8位存储器
//接口
EMIF_ASYNC_TA_1 |//周转时间
EMIF_ASYNC_RHOLD_4 |//读取保持时间
EMIF_ASYNC_RSTROBE_10 |//读取选通时间
EMIF_ASYNC_RSETUP_6 |//读取设置时间
EMIF_ASYNC_whold_2 |//写入保持时间
EMIF_ASYNC_WSTROBE_8 |//写选通时间
EMIF_ASYNC_WSETUP_4 |//写入设置时间
EMIF_ASYNC_EW_ENABLE |//扩展等待
EMIF_ASYNC_SS_DISABLE //选通选择模式
);
现在的问题是:当以直流模式运行且 TwinCAT 作为 ECAT 主站时、TwinCAT 每20秒发送0x1b 错误。 PDI 错误寄存器0x30d 的值为 alwas 0xff 而不是0。 我已向 ETG 寻求帮助。 将看门狗从读取 ET1100寄存器0x440更改为仅使用28377自己的计时器的软件看门狗后、再也没有0x1b 错误(0x1b 表示同步管理器看门狗错误或超时)。 这意味着 PDI 界面出现错误、导致从 ET1100错误读取0x440。 如果忽略此错误、PDO 和 SDO 等其他东西都正常工作。
实际上、如果我 完全使用以下 TI 演示项目"PDI_hal_test_app" EMIF 配置、当 ECAT 主站将从器件的状态从 PREOP 更改为 OP 时、通常会出现另一个问题、错误提示为"Read status 0x04、status 0x08 Expected "、然后从器件的状态进入 SAFEOP ERR。 两个 EMIF 配置的不同之处在于、我在每个 EMIF 读取级中添加了两个 CLK。 这可能会确保 PDI 的读取操作更加稳定。 但我不确定我猜的是不是对的。 如果我添加4个或更多读取 CLK、ECAT 伺服从器件将始终处于初始化 ERR 状态。 因此、我真的很困惑 EMIF 配置。 可以给我一些建议和帮助吗? 非常感谢。
EMIF1Regs.ASYNC_CS2_CR.ALL = (EMIF_ASYNC_ASIZE_8 |// 8位存储器
EMIF_ASYNC_TA_1 |//周转时间
EMIF_ASYNC_RHOLD_2 |//读取保持时间
EMIF_ASYNC_RSTROBE_8 |//读取选通时间
EMIF_ASYNC_RSETUP_4 |//读取设置时间
EMIF_ASYNC_whold_2 |//写入保持时间
EMIF_ASYNC_WSTROBE_8 |//写选通时间
EMIF_ASYNC_WSETUP_4 |//写入设置时间
EMIF_ASYNC_EW_ENABLE |//扩展等待
EMIF_ASYNC_SS_DISABLE //选通选择模式
);
2.此外、我发现 EMIF 写入操作比 EMIF 读取操作慢得多。 也就是说 、*XMEM_ps++=*pTxData++花费大约21us、而读取操作花费大约300ns/byte。 我不确定这是否与0x1b 错误有关。 谢谢你。