Commit Graph

44 Commits

Author SHA1 Message Date
Andrew Tridgell 6e3369611e HAL_ChibiOS: enable clock management on G4
this allows for a different clock tree in the main fw from the
bootloader
2024-01-25 11:44:52 +11:00
Andrew Tridgell 06a8aef998 HAL_ChibiOS: switched G4 FDCAN clock to 80MHz
this requires main CPU clock at 160 MHz instead of 168 MHz
2024-01-25 11:44:44 +11:00
Andrew Tridgell 2d965684f6 HAL_ChibiOS: fixed CANFD timings
our CANFD timings were resulting in a lot of busoff errors. Here is an
example of master at 1Mbit/5MBit:

Getting @SYS/can0_stats.txt as -
------- Clock Config -------
CAN_CLK_FREQ:   80MHz
Std Timings: bitrate=1000000 presc=7
sjw=0 bs1=7 bs2=0 sample_point=90.00000%
FD Timings:  bitrate=5000000 presc=1
sjw=0 bs1=5 bs2=0 sample_point=90.00000%
------- CAN Interface Stats -------
tx_requests:    2689
tx_rejected:    0
tx_overflow:    443
tx_success:     7
tx_timedout:    2232
tx_abort:       0
rx_received:    18470
rx_overflow:    0
rx_errors:      0
num_busoff_err: 34439
num_events:     18477
ECR:            F8
fdf_rx:         18467
fdf_tx_req:     2182
fdf_tx:         0

here is an example with the new timings:

------- Clock Config -------
CAN_CLK_FREQ:   80MHz
Std Timings: bitrate=1000000 presc=8
sjw=1 bs1=8 bs2=1 sample_point=90.00000%
FD Timings:  bitrate=8000000 presc=2
sjw=3 bs1=8 bs2=3 sample_point=80.00000%
------- CAN Interface Stats -------
tx_requests:    3023
tx_rejected:    0
tx_overflow:    0
tx_success:     3023
tx_timedout:    0
tx_abort:       0
rx_received:    27865
rx_overflow:    0
rx_errors:      0
num_busoff_err: 0
num_events:     30888
ECR:            0
fdf_rx:         27862
fdf_tx_req:     3016
fdf_tx:         3016

I am testing between a CubeOrange and a Pixhawk6X. I tested 1, 2, 4, 5
and 8 MBit (which are the only valid FD bitrates in our parameters)

Many thanks to Kai from Salient Motion for finding this issue and
providing the corrected timing table
2024-01-25 11:44:32 +11:00
Andrew Tridgell c0d0aeee86 HAL_ChibiOS: reimplement CAN with BinarySemaphore 2024-01-03 07:37:05 +11:00
Thomas Watson 87fef1ae5d AP_HAL_ChibiOS: use get_HAL_mutable() to install new CAN interfaces
Avoids dubious extern redefinition.
2023-11-28 08:24:25 +11:00
Andrew Tridgell d5fbce0547 AP_HAL_ChibiOS: added last_transmit_us to CAN stats 2023-09-05 06:56:51 +10:00
Andrew Tridgell aa0b119806 HAL_ChibiOS: disable CANFD bits if CANFD not enabled
cannot support CANFD receive on G4
2023-07-12 18:54:45 +10:00
Andrew Tridgell 0cfd9c2ed5 HAL_ChibiOS: don't consider a MAVCAN send failure as a send failure
this prevents duplicate sends if MAVCAN buffer is full
2023-06-08 10:15:50 +10:00
bugobliterator 6a0c46d241 AP_HAL_Periph: assert clock is FDCANCLK is 80MHz for H7 boards 2022-03-11 18:13:54 +11:00
bugobliterator 633eb0db8b AP_HAL_ChibiOS: move to using data_32 for copying into CANFD buffer 2022-03-11 18:13:54 +11:00
bugobliterator faf0c0d7c3 AP_HAL_ChibiOS: set canfd bitrates using CANFD_SUPPORTED opt 2022-03-11 18:13:54 +11:00
bugobliterator 4bdbd37731 AP_HAL_ChibiOS: use datalength when copying payload into CAN Frames 2022-03-11 18:13:54 +11:00
bugobliterator 47dd964e63 AP_HAL_ChibiOS: add init method to take in separate canfd bitrate 2022-03-11 18:13:54 +11:00
Siddharth Purohit 8aa047d876 AP_HAL_ChibiOS: add support for CANFD for H7 and G4 2022-03-11 18:13:54 +11:00
Andrew Tridgell 638e20a0b9 HAL_ChibiOS: bring in hal.h where it is needed 2022-02-22 12:13:19 +11:00
Andrew Tridgell fd8d28e23c HAL_ChibiOS: reduced time in critical sections for CAN processing 2022-02-19 18:24:56 +11:00
Andrew Tridgell 33ebc83a68 AP_HAL_ChibiOS: disable CAN filtering except on AP_Periph
this saves flash space and makes CAN forwarding for any bus without
reconfigure/reboot easy. CAN filtering is not useful in the main
flight controller firmware as we want to see nearly all packets
2022-02-12 16:36:05 +11:00
Andrew Tridgell 124c9d5d9b HAL_ChibiOS: support mavcan message forwarding 2022-02-12 16:36:05 +11:00
bugobliterator a8ab20abd9 AP_HAL_ChibiOS: allow sending stats via mavftp on AP_Periph 2021-08-19 14:20:58 +10:00
bugobliterator 81c5a99527 AP_HAL_ChibiOS: fix invalid use of FDCAN2_IT0_IRQn enum for ifdef 2021-08-10 07:25:05 +10:00
Andrew Tridgell bab0c1dfc7 HAL_ChibiOS: fixed build for single FDCAN G4 boards 2021-08-03 10:54:03 +10:00
Siddharth Purohit 882b01bae3 AP_HAL_ChibiOS: Use HAL_CANMANAGER_ENABLED instead of HAL_ENABLE_LIBUAVCAN_DRIVERS 2021-06-24 09:02:42 +10:00
Tom Pittenger 7a004656a2 AP_HAL_ChibiOS: use HAL_ENABLE_LIBUAVCAN_DRIVERS instead of HAL_MAX_CAN_PROTOCOL_DRIVERS 2021-06-09 18:36:18 +10:00
Tom Pittenger f764bd6547 AP_HAL_ChibiOS: disable EventSource only when CH_CFG_USE_EVENTS is false
(cherry picked from commit 6e7542a70ca2343ab8d18470deaf5fc2d27390af) from bugobliterator
2021-06-09 18:36:18 +10:00
Siddharth Purohit ad9a8c8bd9 AP_HAL_ChibiOS: record error states in CANFDIface and CANIface 2021-05-26 18:25:01 +10:00
Andrew Tridgell c3d16cf2e2 HAL_ChibiOS: use defines for G4 messageram
review fix
2021-03-23 12:01:20 +11:00
Andrew Tridgell 353eca79b6 HAL_ChibiOS: fixed 32/64 micros bug in CAN select() 2021-03-23 12:01:20 +11:00
Andrew Tridgell 4f10565f82 HAL_ChibiOS: fixed CANFD build on H7 2021-03-23 12:01:20 +11:00
Andrew Tridgell f57b1b9c4b HAL_ChibiOS: support logical/physical CAN bus mapping
allow for first CAN interface to be CAN2 or CAN3
2021-03-23 12:01:20 +11:00
Andrew Tridgell 439a944801 HAL_ChibiOS: added support for STM32G474 MCU 2021-03-23 12:01:20 +11:00
Andrew Tridgell 5b59445471 AP_HAL_ChibiOS: fixes for build with 20.3.x ChibiOS 2021-03-23 12:01:20 +11:00
Andrew Tridgell 42bc9adfb7 HAL_ChibiOS: use ExpandingString for @SYS buffers 2021-01-05 10:52:00 +11:00
bugobliterator e16cab0437 AP_HAL_ChibiOS: ensure we timeout while checking FDCAN register sets 2020-10-08 09:31:35 +11:00
bugobliterator ca957519dc AP_HAL_ChibiOS: redo filter configuration to make it work with STM32H7 2020-10-08 09:31:35 +11:00
bugobliterator 0a4ea250ad AP_HAL_ChibiOS: disable CANFilter on H7 boards temporarily 2020-10-01 07:19:19 +10:00
Siddharth Purohit 36ffcdae30 HAL_ChibiOS: modify hal can drivers for use by AP_Periph 2020-09-24 12:32:19 +10:00
Siddharth Purohit cdf8e369f1 AP_HAL_ChibiOS: create UAVCAN agnostic CANIface driver
HAL_ChibiOS
2020-08-19 17:31:09 +10:00
bugobliterator 7b9f0f3fd7 HAL_ChibiOS: use FIFO mode instead of Queue mode in FDCAN driver 2020-05-21 15:32:53 +10:00
Andrew Tridgell 2c68ce1986 HAL_ChibiOS: fixed clock source for FDCAN
use selected source and add 80MHz limit, as per manual and latest STM32CubeMX tool
2020-04-24 16:55:03 +10:00
Siddharth Purohit 8c413d3c09 HAL_ChibiOS: fix writing into a NULL pointer CANFD interrupt 2019-10-30 22:15:04 +11:00
Andrew Tridgell 15e4641e51 AP_HAL_ChibiOS: cleanup ifdefs for SLCAN enable 2019-10-08 10:02:14 +11:00
Andrew Tridgell 555f56a8af HAL_ChibiOS: removed wait on CAN peripheral in H7
these wait busy loops can take a very long time, and end up causing
interrupts to be lost elsewhere in the system, causing lost bytes on
UARTs

We should not have while loops waiting on peripharals like this. If we
do need to wait for a flag to clear then it needs to be done in a low
priority thread, or we need to check for completion in a timer

CAN still seems to work with this change, but needs flight testing
2019-10-03 15:26:47 +10:00
Siddharth Purohit 2f153a3577 HAL_ChibiOS: remove singleton interface from slcan_router 2019-07-08 12:18:29 +10:00
Siddharth Purohit 67c925865c HAL_ChibiOS: add support for CAN on STM32H7 boards 2019-07-08 12:18:29 +10:00