CAN Bus Baudrate Auto Sensing
Task
Currently, our can node software has a fixed CAN bus baudrate. If the CAN bus baudrate is changed on the flight controller side, our CAN node will fail to work. The idea of this project is similar to UART baudrate auto sensing, the CAN node is able to sense the bit rate on the bus and change its bit rate accordingly either by trial and error or something smarter.
Background
The Baud-rate on a CANBUS device refers to the rate (speed) at which data is transmitted on the network. This is typically expressed in kilobits-per-second (kbps).
Selecting the incorrect Baud-rate can cause erratic behavior on the network.
What is Silent Mode?
The Silent mode allows a node to be set to a state, in which it is absolutely passive to the bus, meaning it is "invisible" to the rest of the network and it does not influence the bus in any shape or form. The node does not even provide an ACK frame when a message is placed on the CAN bus correctly. Thus, the Silent mode provides a perfect Listen-Only mode for diagnostic features such as the baudrate detection.
Research
Explains how CAN Bus baud rate detection can be implemented
Analyzing in listen-only mode method
Preqrequisites
The CAN Bus node can only detect the CAN Bus transmission rate when it is connected (and starts up) to a running network.
You need at least two other CAN Bus nodes (i.e. a running network) who communicate with each other before you can connect or test the bus node with automatic baud rate detection.
The CAN bus node responsible for baud rate detection must support Listen Mode (or Silent Mode). Using this mode the specific node behaves like a passive node, it doesn't influence the the communication or bus errors. It is mandatory to not provide any ACK for received messages.
How CAN Bus Automatic Baudrate Detection Works And What To Consider When Connecting To A Network
Potential methods: https://os.mbed.com/questions/79056/CANbus-baud-rate-detection/
Method 1
Configure your CAN controller to *NOT* assert the hardware acknowledge.
Connect at one speed and listen .
If you see CAN errors, switch to the other speed.
If you see no CAN errors, reconfigure to enable hardware acknowledge.
Method 2 → Will be attempting this method
Most CAN transceivers have a pin that can put the chip into a listen only mode.
Wire that pin to a micro pin.
Configure the transceiver for listen only.
Configure CAN for one speed and listen.
If you see CAN errors, switch to the other speed.
If you see no CAN errors, toggle the pin to the CAN transceiver to enable the full mode.
Method 3
If the CAN Rx pin on the micro could be configured to grab a hardware timestamp, measure the time of CAN pulses.
It would need to capture many, to ensure it found the smallest pulse.
Compute the bit-rate and configure the CAN controller.
Questions
What hardware is the CAN bus connected to?
Hardware setup for the STM32
Does method 2 seem feasible?
Baudrate options currently using/will need?
How do you want the program to finish/what does it return?
How do we test? What should we test?
Where do we code this? (file path)