Hello, I found my Problem: I requested a master while Ethernet was not connected by using ecrt_request_master(0). I immediately call ecrt_master_deactivate (this didn't helped because the functions exits very early because the master was not activated) and ecrt_release_master.
The Function ec_master_enter_operation_phase sets "allow_scan" to 0. As I said, the master gets never activated, it just leaves its state by using ec_master_leave_operation_phase. But allow_scan don't get resetted then, the master never ever rescans the bus...! I solved the problem by adding two lines (master->allow_scan = 1/master->allow_config = 1) to the function ec_master_clear_config, which gets always called: void ec_master_clear_config( ec_master_t *master /**< EtherCAT master. */ ) { down(&master->master_sem); ec_master_clear_domains(master); ec_master_clear_slave_configs(master); master->allow_scan = 1; master->allow_config = 1; up(&master->master_sem); } Maybe somebody should review this before adding to the repository... It solved my problem. Bye Stefan ----- Original Message ---- From: Stefan Agner <stefan.ag...@yahoo.com> To: etherlab-users@etherlab.org Sent: Tue, May 10, 2011 1:48:43 PM Subject: [etherlab-users] Lost slaves after device restart Hi, I use 1.5 trunk version of the Etherlab EtherCAT master on a Debian Lenny Linux 5.0. I use the generic network driver (using default a device driven by a default e1000e driver) and PREEMPT_RT. Normally all works fine: I start Linux, Etherlab EtherCAT Master, and check the list of slaves: # ethercat slaves 0 0:0 OP + EK1101 EtherCAT-Koppler (2A E-Bus, ID-Switch) 1 0:1 OP + EL6692 EtherCAT Bridge-Klemme (Primär) I now start my application, which requests the master. The application runs fine. When I shut down the EtherCAT device, slaves disappears as expcted: # ifconfigeth0 down # ethercat slaves # Next I activate the device again, but slaves don't show up... # ifconfigeth0 up # ethercat slaves # When I stop my application (release the master) the slaves still don't appear. Even rescan doesn't help, it looks like user space missed this new state (device up)... In dmesg everything looks ok: Disabling: [16091.763659] EtherCAT WARNING 0: 3 datagrams TIMED OUT! [16091.783764] EtherCAT 0: Link state changed to DOWN. [16091.787793] EtherCAT 0: 0 slave(s) responding. Enabling: [16105.749575] e1000e 0000:02:00.0: irq 28 for MSI/MSI-X [16105.805136] e1000e 0000:02:00.0: irq 28 for MSI/MSI-X [16105.806045] ADDRCONF(NETDEV_UP): ethercat0: link is not ready [16107.390075] e1000e: ethercat0 NIC Link is Up 100 Mbps Full Duplex, Flow Control: None [16107.390082] 0000:02:00.0: ethercat0: 10/100 speed: disabling TSO [16107.390521] ADDRCONF(NETDEV_CHANGE): ethercat0: link becomes ready [16107.390966] EtherCAT 0: Link state changed to UP. [16107.395015] EtherCAT 0: 2 slave(s) responding. [16107.395022] EtherCAT 0: Slave states: PREOP. How can I make sure state and the slaves are tracked correctly in user space? Thanks for any hints Stefan _______________________________________________ etherlab-users mailing list etherlab-users@etherlab.org http://lists.etherlab.org/mailman/listinfo/etherlab-users _______________________________________________ etherlab-users mailing list etherlab-users@etherlab.org http://lists.etherlab.org/mailman/listinfo/etherlab-users