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; |