Hello,我们在 i.MX93 使用 IGH Ethercat Master 主站软件,IGH 能识别 RT1180 这个从机设备,和 SDO 配置,但是不能识别 RT1180 的 PDOs 配置,使用 ethercat 命令不能让 RT1180 进入 OP 状态。麻烦帮忙看下如下问题原因:
问题一:使用 SDO 的方式发送命令信息,能控制 RT1180。使用 PDO 的方式不能控制 RT1180,i.MX93 也不能读取 RT1180 的 PDO 配置。
问题二:i.MX93 使用 ethercat states -p 0 OP 命令不能使 RT1180 进入 OP 状态,连接一个伺服驱动器,伺服可以进入 OP 。
root@imx93evk:~# ethercat states -p 0 OP
root@imx93evk:~# [ 688.986599] EtherCAT ERROR 0-0: Failed to set SAFEOP state, slave refused state change (PREOP + ERROR).
[ 688.986851] EtherCAT ERROR 0-0: AL status message 0x001E: "Invalid input configuration".
[ 688.987548] EtherCAT 0-0: Acknowledged state PREOP.
root@imx93evk:~#
i.MX93 软件版本:Real-time Edge Software 2.6
使用 ethercat 命令查看 RT1180 配置 log 如下:
root@imx93evk:~# ethercat slaves
0 0:0 PREOP + 0x00000f53:0x00000001
root@imx93evk:~#
root@imx93evk:~# ethercat xml
<?xml version="1.0" ?>
<EtherCATInfo>
<!-- Slave 0 -->
<Vendor>
<Id>3923</Id>
</Vendor>
<Descriptions>
<Devices>
<Device>
<Type ProductCode="#x00000001" RevisionNo="#x00000011"></Type>
</Device>
</Devices>
</Descriptions>
</EtherCATInfo>
root@imx93evk:~#
root@imx93evk:~# ethercat sdos -p 0
SDO 0x1000, "Device type"
0x1000:00, r-r-r-, uint32, 32 bit, "Device type"
SDO 0x1001, "Error register"
0x1001:00, r-r-r-, uint8, 8 bit, "Error register"
SDO 0x1008, "Device name"
0x1008:00, r-r-r-, string, 80 bit, "Device name"
SDO 0x1009, "Manufacturer Hardware version"
0x1009:00, r-r-r-, string, 32 bit, "Manufacturer Hardware version"
SDO 0x100a, "Manufacturer Software version"
0x100a:00, r-r-r-, string, 32 bit, "Manufacturer Software version"
SDO 0x1018, "Identity Object"
0x1018:00, r-r-r-, uint8, 8 bit, "SubIndex 000"
0x1018:01, r-r-r-, uint32, 32 bit, "Vendor ID"
0x1018:02, r-r-r-, uint32, 32 bit, "Product Code"
0x1018:03, r-r-r-, uint32, 32 bit, "Revision Number"
0x1018:04, r-r-r-, uint32, 32 bit, "Serial Number"
SDO 0x10f1, "Error Settings"
0x10f1:00, r-r-r-, uint8, 8 bit, "SubIndex 000"
0x10f1:01, r-r-r-, uint32, 32 bit, "Local Error Reaction"
0x10f1:02, rwrwrw, uint16, 16 bit, "Sync Error Counter Limit"
SDO 0x10f8, "Timestamp Object"
0x10f8:00, rwrwrw, uint64, 64 bit, "Timestamp Object"
SDO 0x1600, "RxPDO"
0x1600:00, r-r-r-, uint8, 8 bit, "SubIndex 000"
0x1600:01, r-r-r-, uint32, 32 bit, "SubIndex 001"
SDO 0x1a00, "TxPDO"
0x1a00:00, r-r-r-, uint8, 8 bit, "SubIndex 000"
0x1a00:01, r-r-r-, uint32, 32 bit, "SubIndex 001"
SDO 0x1c00, "Sync manager type"
0x1c00:00, r-r-r-, uint8, 8 bit, "SubIndex 000"
0x1c00:01, r-r-r-, uint8, 8 bit, "SubIndex 001"
0x1c00:02, r-r-r-, uint8, 8 bit, "SubIndex 002"
0x1c00:03, r-r-r-, uint8, 8 bit, "SubIndex 003"
0x1c00:04, r-r-r-, uint8, 8 bit, "SubIndex 004"
SDO 0x1c12, "SyncManager 2 assignment"
0x1c12:00, r-r-r-, uint8, 8 bit, "SubIndex 000"
0x1c12:01, r-r-r-, uint16, 16 bit, "SubIndex 001"
SDO 0x1c13, "SyncManager 3 assignment"
0x1c13:00, r-r-r-, uint8, 8 bit, "SubIndex 000"
0x1c13:01, r-r-r-, uint16, 16 bit, "SubIndex 001"
SDO 0x1c32, "SM output parameter"
0x1c32:00, r-r-r-, uint8, 8 bit, "SubIndex 000"
0x1c32:01, rwr-r-, uint16, 16 bit, "Synchronization Type"
0x1c32:02, r-r-r-, uint32, 32 bit, "Cycle Time"
0x1c32:03, ------, type 0000, 32 bit, "SubIndex 003"
0x1c32:04, r-r-r-, uint16, 16 bit, "Synchronization Types supported"
0x1c32:05, r-r-r-, uint32, 32 bit, "Minimum Cycle Time"
0x1c32:06, r-r-r-, uint32, 32 bit, "Calc and Copy Time"
0x1c32:07, ------, type 0000, 32 bit, "SubIndex 007"
0x1c32:08, rwrwrw, uint16, 16 bit, "Get Cycle Time"
0x1c32:09, r-r-r-, uint32, 32 bit, "Delay Time"
0x1c32:0a, rwrwrw, uint32, 32 bit, "Sync0 Cycle Time"
0x1c32:0b, r-r-r-, uint16, 16 bit, "SM-Event Missed"
0x1c32:0c, r-r-r-, uint16, 16 bit, "Cycle Time Too Small"
0x1c32:0d, r-r-r-, uint16, 16 bit, "Shift Time Too Short Counter"
0x1c32:0e, ------, type 0000, 16 bit, "SubIndex 014"
0x1c32:0f, ------, type 0000, 32 bit, "SubIndex 015"
0x1c32:10, ------, type 0000, 32 bit, "SubIndex 016"
0x1c32:11, ------, type 0000, 32 bit, "SubIndex 017"
0x1c32:12, ------, type 0000, 32 bit, "SubIndex 018"
0x1c32:13, ------, type 0000, 0 bit, "SubIndex 019"
0x1c32:14, ------, type 0000, 0 bit, "SubIndex 020"
0x1c32:15, ------, type 0000, 0 bit, "SubIndex 021"
0x1c32:16, ------, type 0000, 0 bit, "SubIndex 022"
0x1c32:17, ------, type 0000, 0 bit, "SubIndex 023"
0x1c32:18, ------, type 0000, 0 bit, "SubIndex 024"
0x1c32:19, ------, type 0000, 0 bit, "SubIndex 025"
0x1c32:1a, ------, type 0000, 0 bit, "SubIndex 026"
0x1c32:1b, ------, type 0000, 0 bit, "SubIndex 027"
0x1c32:1c, ------, type 0000, 0 bit, "SubIndex 028"
0x1c32:1d, ------, type 0000, 0 bit, "SubIndex 029"
0x1c32:1e, ------, type 0000, 0 bit, "SubIndex 030"
0x1c32:1f, ------, type 0000, 0 bit, "SubIndex 031"
0x1c32:20, r-r-r-, bool, 1 bit, "Sync Error"
SDO 0x1c33, "SM input parameter"
0x1c33:00, r-r-r-, uint8, 8 bit, "SubIndex 000"
0x1c33:01, rwr-r-, uint16, 16 bit, "Synchronization Type"
0x1c33:02, r-r-r-, uint32, 32 bit, "Cycle Time"
0x1c33:03, ------, type 0000, 32 bit, "SubIndex 003"
0x1c33:04, r-r-r-, uint16, 16 bit, "Synchronization Types supported"
0x1c33:05, r-r-r-, uint32, 32 bit, "Minimum Cycle Time"
0x1c33:06, r-r-r-, uint32, 32 bit, "Calc and Copy Time"
0x1c33:07, ------, type 0000, 32 bit, "SubIndex 007"
0x1c33:08, rwrwrw, uint16, 16 bit, "Get Cycle Time"
0x1c33:09, r-r-r-, uint32, 32 bit, "Delay Time"
0x1c33:0a, rwrwrw, uint32, 32 bit, "Sync0 Cycle Time"
0x1c33:0b, r-r-r-, uint16, 16 bit, "SM-Event Missed"
0x1c33:0c, r-r-r-, uint16, 16 bit, "Cycle Time Too Small"
0x1c33:0d, r-r-r-, uint16, 16 bit, "Shift Time Too Short Counter"
0x1c33:0e, ------, type 0000, 16 bit, "SubIndex 014"
0x1c33:0f, ------, type 0000, 32 bit, "SubIndex 015"
0x1c33:10, ------, type 0000, 32 bit, "SubIndex 016"
0x1c33:11, ------, type 0000, 32 bit, "SubIndex 017"
0x1c33:12, ------, type 0000, 32 bit, "SubIndex 018"
0x1c33:13, ------, type 0000, 0 bit, "SubIndex 019"
0x1c33:14, ------, type 0000, 0 bit, "SubIndex 020"
0x1c33:15, ------, type 0000, 0 bit, "SubIndex 021"
0x1c33:16, ------, type 0000, 0 bit, "SubIndex 022"
0x1c33:17, ------, type 0000, 0 bit, "SubIndex 023"
0x1c33:18, ------, type 0000, 0 bit, "SubIndex 024"
0x1c33:19, ------, type 0000, 0 bit, "SubIndex 025"
0x1c33:1a, ------, type 0000, 0 bit, "SubIndex 026"
0x1c33:1b, ------, type 0000, 0 bit, "SubIndex 027"
0x1c33:1c, ------, type 0000, 0 bit, "SubIndex 028"
0x1c33:1d, ------, type 0000, 0 bit, "SubIndex 029"
0x1c33:1e, ------, type 0000, 0 bit, "SubIndex 030"
0x1c33:1f, ------, type 0000, 0 bit, "SubIndex 031"
0x1c33:20, r-r-r-, bool, 1 bit, "Sync Error"
SDO 0x6000, "Obj0x6000"
0x6000:00, r-r-r-, uint8, 8 bit, "SubIndex 000"
0x6000:01, r-r-r-, bool, 1 bit, "LED"
SDO 0x7000, "Obj0x7000"
0x7000:00, r-r-r-, uint8, 8 bit, "SubIndex 000"
0x7000:01, rwrwrw, bool, 1 bit, "LED"
SDO 0xf000, "Modular Device Profile"
0xf000:00, r-r-r-, uint8, 8 bit, "SubIndex 000"
0xf000:01, r-r-r-, uint16, 16 bit, "Index distance "
0xf000:02, r-r-r-, uint16, 16 bit, "Maximum number of modules "
root@imx93evk:~#
root@imx93evk:~#
root@imx93evk:~# ethercat pdos -p 0
root@imx93evk:~#
root@imx93evk:~#
此外,编写 linux 应用程序,配置从机 PDOs,每秒读写一次数据,多次后出现 FMMU 的报错,如下所示:
root@imx93evk:/# ./eth_1180.out 1000000
Requesting maste[ 1074.838563] EtherCAT: Requesting master 0...
[ 1074.838580] EtherCAT: Successfully requested master 0.
[ 1074.838683] EtherCAT 0: Domain0: Logical address 0x00000000, 2 byte, expected working counter 3.
r... delay_num = [ 1074.838690] EtherCAT 0: Datagram domain0-0-main: Logical offset 0x00000000, 2 byte, type LRW.
1000000
Configur[ 1074.838738] EtherCAT 0: Master thread exited.
[ 1074.838745] EtherCAT 0: Starting EtherCAT-OP thread.
ing PDOs...
*Success to configuring slave PDOs*
Activating master...
*Master activated*
*It's working now*
1 slave(s).
AL states: 0x02.
Link is up.
slave: State 0x[ 1075.839617] EtherCAT WARNING 0: No app_time received up to now, but master already active.
02.
slave: online.
andrew cyclic_task status =0
andrew cyclic_task status =0
andrew cyclic_task status =0
andrew cyclic_task status =0
andrew cyclic_task status =0
andrew cyclic_task status =0
andrew cyclic_task status =0
slave: State 0x01.
andrew cyclic_task status =0
andrew cyclic_task status =0
andrew cyclic_task status =0
andrew cyclic_task status =0
andrew cyclic_task status =0
andrew cyclic_task status =0
slave: State 0x02[ 1088.842552] EtherCAT WARNING 0-0: PDOs configured for SM2, but slave does not provide the sync manager information!
[ 1088.842568] EtherCAT WARNING 0-0: PDOs configured for SM3, but slave does not provide the sync manager information!
[ 1088.842575] EtherCAT ERROR 0-0: Failed to determine PDO sync manager for FMMU!
源码附件所示!麻烦帮忙分析一下原因,提供一下建议,谢谢!
Hello DRAVE,
RT1180 is not offically released. Thus we don't support it on community.
I would suggest you contacting NXP FAE for it.
Thanks for your understanding.
Best Regards,
Jun Zhang