/** * @file can_config.h * @brief CAN bus configuration for automotive applications */ #ifndef CAN_CONFIG_H #define CAN_CONFIG_H #include /* ============================================================================ * CAN Hardware Configuration * ============================================================================ */ /* Number of CAN controllers */ #define CAN_CONTROLLER_COUNT 2 /* CAN controller base addresses */ #define CAN0_BASE_ADDRESS 0x40006400U #define CAN1_BASE_ADDRESS 0x40006800U /* CAN controller interrupts */ #define CAN0_IRQ_NUMBER 19 #define CAN1_IRQ_NUMBER 20 /* CAN controller priorities */ #define CAN0_IRQ_PRIORITY 5 #define CAN1_IRQ_PRIORITY 5 /* ============================================================================ * CAN Baudrate Configuration * ============================================================================ */ /* CAN baudrates */ #define CAN_BAUDRATE_125K 125000 #define CAN_BAUDRATE_250K 250000 #define CAN_BAUDRATE_500K 500000 #define CAN_BAUDRATE_1M 1000000 /* CAN FD baudrates */ #define CAN_FD_BAUDRATE_2M 2000000 #define CAN_FD_BAUDRATE_5M 5000000 #define CAN_FD_BAUDRATE_8M 8000000 /* Default CAN baudrate */ #define CAN_DEFAULT_BAUDRATE CAN_BAUDRATE_500K /* CAN FD data baudrate */ #define CAN_FD_DATA_BAUDRATE CAN_FD_BAUDRATE_2M /* ============================================================================ * CAN Frame Configuration * ============================================================================ */ /* Enable CAN FD */ #define CAN_FD_ENABLED 1 /* Maximum CAN frame length */ #define CAN_MAX_FRAME_LENGTH 64 /* Enable automatic retransmission */ #define CAN_AUTO_RETRANSMIT 1 /* Maximum retransmission attempts */ #define CAN_MAX_RETRANSMIT 3 /* ============================================================================ * CAN Message IDs * ============================================================================ */ /* OBD-II IDs */ #define CAN_ID_OBD_REQUEST 0x7DF #define CAN_ID_OBD_RESPONSE 0x7E8 #define CAN_ID_OBD_RESPONSE_2 0x7E9 /* Diagnostic IDs */ #define CAN_ID_DIAG_REQUEST 0x700 #define CAN_ID_DIAG_RESPONSE 0x708 /* Network management IDs */ #define CAN_ID_NM_BASE 0x400 #define CAN_ID_NM_END 0x4FF /* ============================================================================ * Application Message IDs * ============================================================================ */ /* Engine control messages */ #define CAN_ID_ENGINE_DATA 0x100 #define CAN_ID_ENGINE_CONTROL 0x101 #define CAN_ID_ENGINE_STATUS 0x102 #define CAN_ID_ENGINE_FAULT 0x103 /* Transmission messages */ #define CAN_ID_TRANSMISSION_DATA 0x110 #define CAN_ID_TRANSMISSION_CONTROL 0x111 #define CAN_ID_GEAR_POSITION 0x112 /* Brake control messages */ #define CAN_ID_BRAKE_DATA 0x120 #define CAN_ID_BRAKE_CONTROL 0x121 #define CAN_ID_ABS_DATA 0x122 #define CAN_ID_WHEEL_SPEED 0x123 /* Steering messages */ #define CAN_ID_STEERING_ANGLE 0x130 #define CAN_ID_STEERING_TORQUE 0x131 #define CAN_ID_STEERING_CONTROL 0x132 /* Body control messages */ #define CAN_ID_BODY_CONTROL 0x140 #define CAN_ID_DOOR_STATUS 0x141 #define CAN_ID_LIGHT_STATUS 0x142 #define CAN_ID_WINDOW_CONTROL 0x143 /* Dashboard messages */ #define CAN_ID_SPEED 0x150 #define CAN_ID_RPM 0x151 #define CAN_ID_FUEL_LEVEL 0x152 #define CAN_ID_TEMPERATURE 0x153 /* Safety messages */ #define CAN_ID_AIRBAG_STATUS 0x160 #define CAN_ID_SEATBELT_STATUS 0x161 #define CAN_ID_CRASH_DETECTION 0x162 /* ============================================================================ * CAN Filter Configuration * ============================================================================ */ typedef struct { uint32_t filter_id; uint32_t filter_mask; bool is_extended; uint8_t controller; uint8_t fifo; } CanFilterConfig_t; /* Default CAN filters */ static const CanFilterConfig_t can_filters[] = { /* Engine messages */ {.filter_id = 0x100, .filter_mask = 0x1F0, .is_extended = false, .controller = 0, .fifo = 0}, /* Transmission messages */ {.filter_id = 0x110, .filter_mask = 0x1F0, .is_extended = false, .controller = 0, .fifo = 0}, /* Brake messages */ {.filter_id = 0x120, .filter_mask = 0x1F0, .is_extended = false, .controller = 0, .fifo = 0}, /* Steering messages */ {.filter_id = 0x130, .filter_mask = 0x1F0, .is_extended = false, .controller = 0, .fifo = 0}, /* Body control messages */ {.filter_id = 0x140, .filter_mask = 0x1F0, .is_extended = false, .controller = 0, .fifo = 1}, /* Dashboard messages */ {.filter_id = 0x150, .filter_mask = 0x1F0, .is_extended = false, .controller = 0, .fifo = 1}, /* Safety messages */ {.filter_id = 0x160, .filter_mask = 0x1F0, .is_extended = false, .controller = 0, .fifo = 0}, /* OBD-II messages */ {.filter_id = 0x7DF, .filter_mask = 0x7FF, .is_extended = false, .controller = 1, .fifo = 0}, /* Diagnostic messages */ {.filter_id = 0x700, .filter_mask = 0x7F0, .is_extended = false, .controller = 1, .fifo = 1}, /* Network management */ {.filter_id = 0x400, .filter_mask = 0x700, .is_extended = false, .controller = 0, .fifo = 1} }; #define CAN_FILTER_COUNT (sizeof(can_filters) / sizeof(CanFilterConfig_t)) /* ============================================================================ * CAN TP Configuration * ============================================================================ */ /* CAN TP timeouts */ #define CAN_TP_N_AS_TIMEOUT 1000 /* ms */ #define CAN_TP_N_BS_TIMEOUT 1000 /* ms */ #define CAN_TP_N_CR_TIMEOUT 1000 /* ms */ /* CAN TP parameters */ #define CAN_TP_STMIN_DEFAULT 10 /* ms */ #define CAN_TP_BS_DEFAULT 8 /* frames */ #define CAN_TP_MAX_PAYLOAD 4096 /* bytes */ /* ============================================================================ * CAN NM Configuration * ============================================================================ */ /* CAN NM parameters */ #define CAN_NM_TIMEOUT 2000 /* ms */ #define CAN_NM_REPEAT_TIME 500 /* ms */ #define CAN_NM_WAIT_BUS_SLEEP 2000 /* ms */ /* ============================================================================ * CAN Statistics * ============================================================================ */ /* Enable CAN statistics collection */ #define CAN_STATS_ENABLED 1 /* Statistics buffer size */ #define CAN_STATS_BUFFER_SIZE 100 #endif /* CAN_CONFIG_H */