Получение статуса шины (COMMAND_BUS_ERROR 0x48)¶
Данная команда от устройства возвращает статус шины в случае возникновения ошибки. Если в последствии ошибка на шине уходит, то приходит команда со статусом ошибки 0.
Команда со статусом шины может принимать следующие значения:
// Для прошивок 2.2.х.х
#define ERROR_LIN_PARITY 0x00000001U
#define ERROR_LIN_FRAME 0x00000002U
#define ERROR_CAN_STUFF 0x00000001U
#define ERROR_CAN_FORMAT 0x00000002U
#define ERROR_CAN_ACK 0x00000004U
#define ERROR_CAN_CRC 0x00000008U
#define ERROR_CAN_TRANSMIT1 0x00000010U
#define ERROR_CAN_TRANSMIT0 0x00000020U
#define ERROR_BUS_OFF 0x00000040U
#define ERROR_PASSIVE 0x00000080U
#define ERROR_WARNING 0x00000100U
#define ERROR_OVERFLOW 0x00000200U
#define ERROR_DATA_STUFF 0x00010000U
#define ERROR_DATA_FORMAT 0x00020000U
#define ERROR_DATA_ACK 0x00040000U
#define ERROR_DATA_CRC 0x00080000U
#define ERROR_DATA_TRANSMIT1 0x00100000U
#define ERROR_DATA_TRANSMIT0 0x00200000U
// Для прошивок 2.3.х.х и новее
#define ERROR_LIN_PARITY 0x00000001U
#define ERROR_LIN_FRAME 0x00000002U
#define ERROR_CAN_STUFF 0x00000001U
#define ERROR_CAN_FORMAT 0x00000002U
#define ERROR_CAN_ACK 0x00000003U
#define ERROR_CAN_CRC 0x00000004U
#define ERROR_CAN_TRANSMIT1 0x00000005U
#define ERROR_CAN_TRANSMIT0 0x00000006U
#define ERROR_BUS_OFF 0x00000040U
#define ERROR_PASSIVE 0x00000080U
#define ERROR_WARNING 0x00000100U
#define ERROR_OVERFLOW 0x00000200U
#define ERROR_DATA_STUFF 0x00010000U
#define ERROR_DATA_FORMAT 0x00020000U
#define ERROR_DATA_ACK 0x00030000U
#define ERROR_DATA_CRC 0x00040000U
#define ERROR_DATA_TRANSMIT1 0x00050000U
#define ERROR_DATA_TRANSMIT0 0x00060000U
typedef struct {
CommandHeader header;
uint32_t error;
} __attribute__((packed)) BusError;
В поле header.flags будет указан номер канала, для которого пришло данное сообщение.