This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
你好。 我无法在 TMS320F28379D 上正确执行 FOE。 我将使用 SSC v5.11生成代码。 我已经将 F28388在 v5.11中生成的代码与 v5.12中生成的代码进行了比较、现在似乎也存在该问题。
在生成的代码中、ecatfoe.h 中使用了此结构:
/** \brief Complete FoE datagram*/ typedef struct MBX_STRUCT_PACKED_START { TMBXHEADER MbxHeader; /**< \brief Mailbox header*/ TFOEHEADER FoeHeader; /**< \brief FoE header*/ UINT16 Data[((MAX_MBX_DATA_SIZE)-(FOE_HEADER_SIZE)) >> 1]; /**< \brief FoE Data buffer*/ }MBX_STRUCT_PACKED_END TFOEMBX;
/** * \brief Mailbox header */ typedef struct MBX_STRUCT_PACKED_START { UINT16 Length; /**< \brief Length*/ UINT16 Address; /**< \brief Address*/ UINT16 Flags[1]; /**< \brief Flags*/ #define MBX_OFFS_TYPE 0 /**< \brief Protocol type offset*/ #define MBX_MASK_TYPE 0x0F00 /**< \brief Protocol type mask*/ #define MBX_SHIFT_TYPE 8 /**< \brief Protocol type shift*/ #define MBX_OFFS_COUNTER 0 /**< \brief Protocol counter offset*/ #define MBX_MASK_COUNTER 0xF000 /**< \brief Protocol counter mask*/ #define MBX_SHIFT_COUNTER 12 /**< \brief Protocol counter shift*/ } MBX_STRUCT_PACKED_END TMBXHEADER;
/** \brief FoE header*/ typedef struct MBX_STRUCT_PACKED_START { UINT16 OpCode; /**< \brief OpCode * * 1 : RRQ<br> * 2 : WRQ<br> * 3 : DATA<br> * 4 : ACK<br> * 5 : ERR<br> * 6 : BUSY*/ union MBX_STRUCT_PACKED_START { UINT32 Password; /**< \brief Password (used in Read request and Write request). 0 if unknown*/ UINT32 PacketNo; /**< \brief Packet number (used in DATA and ACK datagram)*/ UINT32 ErrorCode; /**< \brief Error code (used in ERR datagram)*/ struct MBX_STRUCT_PACKED_START { UINT16 Done; /**< \brief Done indication (used in BUSY datagram)*/ UINT16 Entire; /**< \brief Entire indication (used in BUSY datagram)*/ }MBX_STRUCT_PACKED_END Busy; /**< \brief Busy variable*/ }MBX_STRUCT_PACKED_END Cmd; /**< \brief Command field*/ }MBX_STRUCT_PACKED_END TFOEHEADER;
此 TMBXHEADER 大小为6个字节(48位)。 此标头填充为32位对齐。 这会将 TFOEHEADER (操作码)的第一个成员推到错误的地址。 从而导致所有成员的偏移不正确。
这是我在调试中看到的:
0x0002是显示在内存浏览器中的正确 FoeHeader.opcode。 但是、结构将其显示为 0x1836。
我缺少什么吗? 我想这是在工作中完成的吗?
您好!
我们为 F2838x 器件提供了 ECAT + foe 软件示例、但不为 F2837x 器件提供该示例。 硬件方面、您是将 ET1100 器件与 f2837x 或其他组件配合使用吗?
此致!
Kevin
尊敬的 Kevin:
感谢您的响应。 是的、让我澄清一下。 我将 F2837x 器件与 ET1100 IC 配合使用。
我跟着指南在 controlSUITE\development_kits\TMDSECATCNTD379D_V1.0\TMDSECATCNCD379D_EtherCAT_EtherCAT Solution_Ref 文件夹以在 SSC v5.11中启用 C28x 项目。 然后、我启用了相关的自举和 FOE 标志。 此代码就是我所执行的代码。 您可以看到、它无法 与 foe 正确对齐。
我提到 F2838x 器件是因为在该平台的示例之后、我在代码上进行了差异。 就 foe 的工作方式而言,这种差异看起来几乎相同。 由于这两个微控制器都属于 C28x 系列、不允许进行字节打包、因此我假设他们会有这个同样的问题。
我的要点是、我无法使 F2837x 正常工作。 我查看 F2838x 后发现、由于它是同一系列的 CPU、因此它应该出现同样的问题。 现在、我在这里对我的无法正常工作的原因以及 F2838x 如何工作感到困惑。
我一直在深入探究这一点以确定如何解决它。 由于对齐、有关 foe 长度的大量比较没有意义、即主器件提供的长度不正确、因为 正在进行的比较包括填充 (FOE_HEADER_SIZE)。 发送方式也是发送带填充的 struct raw。 我假设这会导致偏移。。。
是否有任何方法可以就此问题与他人交谈、以 更好地了解 您打算支持的内容?
我已经能够按照以下配置正确发送 foe 事务:
我将 在 SSC v5.12中使用为 F2838x 生成的代码。 我正在使用 TMDSECATCNCD379D_EtherCAT_HAL 项目中的 Solution_Ref 文件。
虽然我看到一些新的复制函数可能有所帮助、但看起来不会使用这些函数。 我不知道为什么这是工作的,但它是...