24#define CAN_BTR_33 (CAN_BTR_SJW(0) | CAN_BTR_BRP(139)| CAN_BTR_TS1(6) | CAN_BTR_TS2(0))
26#define CAN_BTR_50 (CAN_BTR_SJW(0) | CAN_BTR_BRP(59) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
27#define CAN_BTR_83 (CAN_BTR_SJW(0) | CAN_BTR_BRP(35) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
28#define CAN_BTR_100 (CAN_BTR_SJW(0) | CAN_BTR_BRP(29) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
29#define CAN_BTR_125 (CAN_BTR_SJW(0) | CAN_BTR_BRP(23) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
30#define CAN_BTR_250 (CAN_BTR_SJW(0) | CAN_BTR_BRP(11) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
31#define CAN_BTR_500 (CAN_BTR_SJW(0) | CAN_BTR_BRP(5) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
32#define CAN_BTR_1k0 (CAN_BTR_SJW(0) | CAN_BTR_BRP(2) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
33#elif defined(STM32F7XX)
34#define CAN_BTR_33 (CAN_BTR_SJW(0) | CAN_BTR_BRP(179)| CAN_BTR_TS1(6) | CAN_BTR_TS2(0))
36#define CAN_BTR_50 (CAN_BTR_SJW(0) | CAN_BTR_BRP(59) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
37#define CAN_BTR_83 (CAN_BTR_SJW(0) | CAN_BTR_BRP(35) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
38#define CAN_BTR_100 (CAN_BTR_SJW(0) | CAN_BTR_BRP(29) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
39#define CAN_BTR_125 (CAN_BTR_SJW(0) | CAN_BTR_BRP(23) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
40#define CAN_BTR_250 (CAN_BTR_SJW(0) | CAN_BTR_BRP(11) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
41#define CAN_BTR_500 (CAN_BTR_SJW(0) | CAN_BTR_BRP(5) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
42#define CAN_BTR_1k0 (CAN_BTR_SJW(0) | CAN_BTR_BRP(2) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
43#elif defined(STM32H7XX)
47static_assert(STM32_FDCANCLK == 80'000'000,
"CANFD baudrates calculated for 80MHz clock!");
50#define CAN_NBTP_33 0x06950c01
51#define CAN_DBTP_33 0x00950D03
54#define CAN_NBTP_50 0x061F1F10
55#define CAN_DBTP_50 0x001F2003
58#define CAN_NBTP_83 0x061F1803
59#define CAN_DBTP_83 0x001F1833
62#define CAN_NBTP_100 0x061F1402
63#define CAN_DBTP_100 0x001F1423
66#define CAN_NBTP_125 0x061F0F02
67#define CAN_DBTP_125 0x001F0F23
70#define CAN_NBTP_250 0x06130C01
71#define CAN_DBTP_250 0x00130C13
73#define CAN_NBTP_500 0x06090C01
74#define CAN_DBTP_500 0x00090C13
76#define CAN_NBTP_1k0 0x06040C01
77#define CAN_DBTP_1k0 0x00040C13
79#error Please define CAN BTR settings for your MCU!
91#if defined(STM32F4XX) || defined(STM32F7XX)
93#define STM32FxMCR (CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP)
135#elif defined(STM32H7XX)
137 .op_mode = OPMODE_CAN,
147 .op_mode = OPMODE_CAN,
157 .op_mode = OPMODE_CAN,
167 .op_mode = OPMODE_CAN,
168 .NBTP = CAN_NBTP_100,
169 .DBTP = CAN_DBTP_100,
177 .op_mode = OPMODE_CAN,
178 .NBTP = CAN_NBTP_125,
179 .DBTP = CAN_DBTP_125,
187 .op_mode = OPMODE_CAN,
188 .NBTP = CAN_NBTP_250,
189 .DBTP = CAN_DBTP_250,
197 .op_mode = OPMODE_CAN,
198 .NBTP = CAN_NBTP_500,
199 .DBTP = CAN_DBTP_500,
207 .op_mode = OPMODE_CAN,
208 .NBTP = CAN_NBTP_1k0,
209 .DBTP = CAN_DBTP_1k0,
233#if STM32_CAN_USE_CAN3
242#elif STM32_CAN_USE_FDCAN3
276#if STM32_CAN_USE_CAN1 || STM32_CAN_USE_FDCAN1
280#if STM32_CAN_USE_CAN2 || STM32_CAN_USE_FDCAN2
284#if STM32_CAN_USE_CAN3 || STM32_CAN_USE_FDCAN3
318 if (cand->state != CAN_READY) {
319 efiPrintf(
"Interface is not ready");
323#if STM32_CAN_USE_CAN1 || STM32_CAN_USE_CAN2
324 if (cand->can == NULL) {
325 efiPrintf(
"No device assigned!");
328 uint32_t
esr = cand->can->ESR;
329 efiPrintf(
"Receive error counter %ld", (
esr >> 24) & 0xff);
330 efiPrintf(
"Transmit error counter %ld", (
esr >> 16) & 0xff);
331 efiPrintf(
"Last error %ld", (
esr >> 4) & 0x7);
332 efiPrintf(
"Flags: %s %s %s",
333 (
esr & 0x4) ?
"BOFF" :
"",
334 (
esr & 0x2) ?
"EPVF" :
"",
335 (
esr & 0x1) ?
"EWGF" :
"");
typedef __attribute__
Ignition Mode.
const char * hwPortname(brain_pin_e brainPin)
esr("WBO: ESR", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 1948, 1.0, 0.0, 10000.0, "ohm")
static bool isValidCan2RxPin(brain_pin_e pin)
CANDriver * detectCanDevice(brain_pin_e pinRx, brain_pin_e pinTx)
static const CANConfig canConfig500
bool isValidCanRxPin(brain_pin_e pin)
static const CANConfig canConfig125
static const CANConfig canConfig1000
static const CANConfig canConfig83
static const CANConfig canConfig50
static const CANConfig canConfig250
static bool isValidCan3RxPin(brain_pin_e pin)
static const CANConfig canConfig100
static bool isValidCan1RxPin(brain_pin_e pin)
bool isValidCanTxPin(brain_pin_e pin)
static bool isValidCan2TxPin(brain_pin_e pin)
const CANConfig * findCanConfig(can_baudrate_e rate)
static bool isValidCan3TxPin(brain_pin_e pin)
static const CANConfig canConfig33
void canHwInfo(CANDriver *cand)
static bool isValidCan1TxPin(brain_pin_e pin)