diff --git a/master/fsm_coe.c b/master/fsm_coe.c index 903d457ae83463adc79391fecc5b46361bb7c4e4..e2634e10ea4efeecfc926568bade653d01b1729d 100644 --- a/master/fsm_coe.c +++ b/master/fsm_coe.c @@ -281,6 +281,13 @@ void ec_fsm_coe_dict_start(ec_fsm_coe_t *fsm /**< finite state machine */) return; } + if (slave->sii.has_general && !slave->sii.coe_details.enable_sdo_info) { + EC_ERR("Slave %u does not support Sdo information service!\n", + slave->ring_position); + fsm->state = ec_fsm_coe_error; + return; + } + if (!(data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 8))) { fsm->state = ec_fsm_coe_error; return; diff --git a/master/fsm_master.c b/master/fsm_master.c index 3d4b451528fec4b403e5b19b25f5f9be47faf673..002fc7b5d87cf4dd087841c96781aa2cc2866c2b 100644 --- a/master/fsm_master.c +++ b/master/fsm_master.c @@ -489,8 +489,11 @@ void ec_fsm_master_action_idle( slave < master->slaves + master->slave_count; slave++) { if (!(slave->sii.mailbox_protocols & EC_MBOX_COE) + || (slave->sii.has_general + && !slave->sii.coe_details.enable_sdo_info) || slave->sdo_dictionary_fetched || slave->current_state == EC_SLAVE_STATE_INIT + || slave->current_state == EC_SLAVE_STATE_UNKNOWN || jiffies - slave->jiffies_preop < EC_WAIT_SDO_DICT * HZ ) continue;