Unexpected boot behavior
I'm getting unexpected NMT Boot Slave behavior when using a fiber executor:
fiber_exec.post([&]()
{
//force a fiber driver to initiate NMT Boot Slave process
driver.Boot();
});
The NMT Boot Slave process initializes with the SDO check on device type (0x1000), which for me, fails twice after the NMT Boot-up message for the AsyncMaster is broadcast on the bus. It succeeds on the third SDO for device type check, only for there to be an SDO abort for the Vendor ID Check (0x1018 SUB 0x01), which aborts the entire NMT Boot Slave process and marks the device as unconfigured. When I look at the timing on Wireshark, it appears that the Vendor check is scheduled several microseconds after first successful initiate upload request (on SDO 0x1000 - device type check), but before the Initiate upload response is received for the device type check. I've changed the SDO timeouts a bunch of times, but with no luck. I've pretty much disabled everything on the bus (heartbeats, sync pulses), to ensure the SDOs are the only thing being transmitted. The only luck I've had in passing the NMT Boot Slave process is disabling the checks in the master object dictionary:
master.Reset();
master[0x1f84][0x10].Write<uint32_t>(0);
master[0x1f85][0x10].Write<uint32_t>(0);
master[0x1f86][0x10].Write<uint32_t>(0);
master[0x1f87][0x10].Write<uint32_t>(0);
master[0x1f88][0x10].Write<uint32_t>(0);
loop.run();
I'm using IXXATs USBV2 with their linux socketcan drivers. Any help would be appreciated.