CAN over Serial¶
A text based interface. For example use over serial ports like
/dev/ttyS1
or /dev/ttyUSB0
on Linux machines or COM1
on Windows.
The interface is a simple implementation that has been used for
recording CAN traces.
Note
The properties extended_id, is_remote_frame and is_error_frame from the class can.Message are not in use. These interface will not send or receive flags for this properties.
Bus¶
-
class
can.interfaces.serial.serial_can.
SerialBus
(channel, *args, **kwargs)[source]¶ Bases:
can.bus.BusABC
Enable basic can communication over a serial device.
Parameters: - channel (str) – The serial device to open. For example “/dev/ttyS1” or “/dev/ttyUSB0” on Linux or “COM1” on Windows systems.
- baudrate (int) –
Baud rate of the serial device in bit/s (default 115200).
Note
Some serial port implementations don’t care about the baud rate.
- timeout (float) – Timeout for the serial device in seconds (default 0.1).
-
recv
(timeout=None)[source]¶ Read a message from the serial device.
Parameters: timeout – This parameter will be ignored. The timeout value of the channel is used. Returns: Received message. Note
Flags like extended_id, is_remote_frame and is_error_frame will not be set over this function, the flags in the return message are the default values.
Return type: can.Message
-
send
(msg, timeout=None)[source]¶ Send a message over the serial device.
Parameters: - msg (can.Message) –
Message to send.
Note
Flags like extended_id, is_remote_frame and is_error_frame will be ignored.
Note
If the timestamp a float value it will be convert to an integer.
- timeout – This parameter will be ignored. The timeout value of the channel is used.
- msg (can.Message) –
Internals¶
The frames that will be sent and received over the serial interface consist of six parts. The start and the stop byte for the frame, the timestamp, DLC, arbitration ID and the payload. The payload has a variable length of between 0 and 8 bytes, the other parts are fixed. Both, the timestamp and the arbitration ID will be interpreted as 4 byte unsigned integers. The DLC is also an unsigned integer with a length of 1 byte.
Serial frame format¶
Start of frame | Timestamp | DLC | Arbitration ID | Payload | End of frame | ||
---|---|---|---|---|---|---|---|
Length (Byte) | 1 | 4 | 1 | 4 | 0 - 8 | 1 | |
Data type | Byte | Unsigned 4 byte integer | Unsigned 1 byte integer | Unsigned 4 byte integer | Byte | Byte | |
Byte order | - | Little-Endian | Little-Endian | Little-Endian | - | - | |
Description | Must be 0xAA | Usually s, ms or µs since start of the device | Length in byte of the payload | - | - | Must be 0xBB |
Examples of serial frames¶
CAN message with 8 byte payload
CAN message | |
---|---|
Arbitration ID | Payload |
1 | 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 |
Serial frame | |||||
---|---|---|---|---|---|
Start of frame | Timestamp | DLC | Arbitration ID | Payload | End of frame |
0xAA | 0x66 0x73 0x00 0x00 | 0x08 | 0x01 0x00 0x00 0x00 | 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 | 0xBB |
CAN message with 1 byte payload
CAN message | |
---|---|
Arbitration ID | Payload |
1 | 0x11 |
Serial frame | |||||
---|---|---|---|---|---|
Start of frame | Timestamp | DLC | Arbitration ID | Payload | End of frame |
0xAA | 0x66 0x73 0x00 0x00 | 0x01 | 0x01 0x00 0x00 0x00 | 0x11 | 0xBB |
CAN message with 0 byte payload
CAN message | |
---|---|
Arbitration ID | Payload |
1 | None |
Serial frame | ||||
---|---|---|---|---|
Start of frame | Timestamp | DLC | Arbitration ID | End of frame |
0xAA | 0x66 0x73 0x00 0x00 | 0x00 | 0x01 0x00 0x00 0x00 | 0xBBS |