Skip to content
binho.io (opens in a new tab)Contact Us

CAN-FD Bridge Mode

Mode 4 · Pulsar only · Introduced in firmware v4.4.0

CAN-FD Bridge Mode turns the Pulsar’s virtual COM port into an SLCAN interface: ASCII commands, one per line, terminated with \r. It handles both classic CAN and CAN-FD, standard (11-bit) and extended (29-bit) IDs, with per-frame bit-rate switching.

It is interoperable with python-can’s slcan interface and with CANable-style terminal tools.

{% stepper %} {% step %}

python device_settings_cli.py --device pulsar set --cdc-mode canfd

The tool resets the device to apply the change. {% endstep %}

{% step %}

import can
bus = can.Bus(interface="slcan", channel="COM7", bitrate=500000)
msg = can.Message(arbitration_id=0x123, data=[0xDE, 0xAD], is_extended_id=False)
bus.send(msg)
print(bus.recv(timeout=1.0))

The bitrate argument sets the nominal (arbitration) rate. The FD data phase defaults to 5 Mbps; call bus.set_bitrate(nominal, data) to choose another. {% endstep %} {% endstepper %}

CommandMeaning
S0–S8Select the nominal (arbitration) bitrate
Y1 / Y2 / Y5Select the CAN-FD data-phase bitrate
OOpen the channel
LOpen the channel listen-only (bus monitor; transmit disabled)
CClose the channel
t / TTransmit a classic frame, standard / extended ID
d / DTransmit a CAN-FD frame without bit-rate switching
b / BTransmit a CAN-FD frame with bit-rate switching
V / N / FVersion, serial number, status flags

Lowercase means a standard ID, uppercase an extended ID. Any unrecognized command returns \a.

<cmd><ID><DLC><data...>

The ID is 3 hex digits for standard, 8 for extended. The DLC is one hex digit, followed by that many bytes as hex pairs. Received frames come back in the same shape, with the leading letter indicating what arrived.

For classic CAN, DLC 0–8 is the byte count. CAN-FD extends it:

DLCBytesDLCBytes
912D32
A16E48
B20F64
C24

Nominal rates: S0 10 kbps, S1 20 kbps, S2 50 kbps, S3 100 kbps, S4 125 kbps, S5 250 kbps, S6 500 kbps, S7 800 kbps, S8 1 Mbps.

Data-phase rates: Y1 1 Mbps, Y2 2 Mbps, Y5 5 Mbps. Only these three are offered, because they are the rates that are exact at the CAN core clock; other digits return \a.

Without S or Y, the channel opens at 500 kbps nominal and 5 Mbps data.

  • No remote (RTR) frames: neither transmit nor receive.
  • No receive timestamps.
  • No error-frame or bus-state reporting to the host.
  • No host-side acceptance filtering: every incoming ID is accepted, standard and extended alike. Filter in the application.
  • V, N and F return fixed constants, not live device values.
  • s (custom nominal bit timing) is accepted but does nothing. Use S.
python device_settings_cli.py --device pulsar set --cdc-mode uart_passthrough