master/slave.c
changeset 132 63a5b40eb7da
parent 127 e67c80a76de4
child 133 b36d187ecc0b
equal deleted inserted replaced
131:7564db092c91 132:63a5b40eb7da
   869                 slave->ring_position);
   869                 slave->ring_position);
   870         return -1;
   870         return -1;
   871     }
   871     }
   872 
   872 
   873     // No CRC faults.
   873     // No CRC faults.
   874     if (!EC_READ_U16(command.data) && !EC_READ_U16(command.data + 2)) return 0;
   874     if (!EC_READ_U32(command.data)) return 0;
   875 
   875 
   876     EC_WARN("CRC faults on slave %i. A: %i, B: %i\n", slave->ring_position,
   876     if (EC_READ_U8(command.data))
   877             EC_READ_U16(command.data), EC_READ_U16(command.data + 2));
   877         EC_WARN("%3i RX-error%s on slave %i, channel A.\n",
       
   878                 EC_READ_U8(command.data),
       
   879                 EC_READ_U8(command.data) == 1 ? "" : "s",
       
   880                 slave->ring_position);
       
   881     if (EC_READ_U8(command.data + 1))
       
   882         EC_WARN("%3i invalid frame%s on slave %i, channel A.\n",
       
   883                 EC_READ_U8(command.data + 1),
       
   884                 EC_READ_U8(command.data + 1) == 1 ? "" : "s",
       
   885                 slave->ring_position);
       
   886     if (EC_READ_U8(command.data + 2))
       
   887         EC_WARN("%3i RX-error%s on slave %i, channel B.\n",
       
   888                 EC_READ_U8(command.data + 2),
       
   889                 EC_READ_U8(command.data + 2) == 1 ? "" : "s",
       
   890                 slave->ring_position);
       
   891     if (EC_READ_U8(command.data + 3))
       
   892         EC_WARN("%3i invalid frame%s on slave %i, channel B.\n",
       
   893                 EC_READ_U8(command.data + 3),
       
   894                 EC_READ_U8(command.data + 3) == 1 ? "" : "s",
       
   895                 slave->ring_position);
   878 
   896 
   879     // Reset CRC counters
   897     // Reset CRC counters
   880     EC_WRITE_U16(data,     0x0000);
   898     EC_WRITE_U32(data, 0x00000000);
   881     EC_WRITE_U16(data + 2, 0x0000);
       
   882     ec_command_init_npwr(&command, slave->station_address, 0x0300, 4, data);
   899     ec_command_init_npwr(&command, slave->station_address, 0x0300, 4, data);
   883     if (unlikely(ec_master_simple_io(slave->master, &command))) {
   900     if (unlikely(ec_master_simple_io(slave->master, &command))) {
   884         EC_WARN("Resetting CRC fault counters failed on slave %i!\n",
   901         EC_WARN("Resetting CRC fault counters failed on slave %i!\n",
   885                 slave->ring_position);
   902                 slave->ring_position);
   886         return -1;
   903         return -1;