Начал я для себя реализацию CANOpen под STM32 микроконтроллеры. Пытаюсь портировать CANOpenNode и попутно разобраться как же работает CANOpen. Приобрел интерфейсную плату (PISO-CAN200D, PCI to CAN, 2 channel) от ICP-DAS. Они также поставляют библиотеку CANOpen Master Library для винды. И даже шаровый OPC сервер (вдруг кому интересно). Так вот к библиотеке идут примеры. Запускаю я один из них и при инициализации он у меня спрашивает NMT состояние моего слейва ответ проходит успешно потом через SDO сервис как я понимаю он у меня запрашивает отдать ему COB ID SYNC я посылаю ответ а он мне говорит мол таймаут. Что в моем ответе не правильно?
Запрос с PC
STD ID = 0x606
RTR = NO
Length = 4
Data[0] = 0x40
Data[1] = 0x05
Data[2] = 0x10
Data[3] = 0x00
Ответ от MCU
STD ID = 0x606
RTR = NO
Length = 8
Data[0] = 0x40
Data[1] = 0x05
Data[2] = 0x10
Data[3] = 0x00
Data[4] = 0x80
Data[5] = 0x00
Data[6] = 0x00
Data[7] = 0x00
Кстати не взирая на то что утилита говорит тайм-аут ответ от меня все равно приходит(проверял в CAN Utility от ICP-DAS) просто у нее наверно тайм-аут означает как то что истекло время ожидания так и неправильный ответ.