Skip to content

Unable to send CAN FD frame using python-can (PCAN-USB Pro FD) #1943

Open
@samuraii95

Description

@samuraii95

Hi everyone,
I’m currently working on a test bench that communicates over CAN and CAN FD using a PCAN-USB Pro FD interface.

Sending standard CAN messages like 0x214 works perfectly from both Python and PCAN-View 👍

But I can't seem to send a CAN FD frame properly through Python. My goal is to send a frame with ID 0x1E38400C, data length = 2, and data = [0xEB, 0x10], using CAN FD (with is_fd=True, bitrate_switch=True, is_extended_id=True) 👎

I can send this same frame via PCAN-View successfully when enabling FD mode. So I know the hardware and channel config are okay.
I’ve tried a few code samples including the official ones from the python-can documentation, but I either get:

  • No error, but the frame is sent as standard CAN (not FD), or

  • can.CanError: A parameter contains an invalid value

Configuration:

  • Interface: pcan
  • Channel: PCAN_USBBUS2
  • Bitrate: 500000
  • Data bitrate: 2000000 (Can FD = 2Mb/s) ?

My setup:

OS and version: window11
PCAN-USB Pro FD
Python version: 3.12.9
python-can version: 4.50.0
VScode : 1.100.2
notepad++: 8.8.1

my functions
def periodic_message_can2(can_id=0x1E38400C, interface='pcan', channel='PCAN_USBBUS2'):
 
    try:
        bus = can.interface.Bus(interface=interface, channel=channel, fd=True, bitrate=500000, data_bitrate=2000000)
        can_data_on = [0xEB, 0x10]
 
        msg = can.Message(
            arbitration_id=can_id,
            data=can_data_on,
            is_extended_id=True,
            is_fd=True,
            bitrate_switch=True,  
            dlc=2
        )
        bus.send_periodic(msg, 1.0)
        print(" Message FD envoyé en périodique.")
 
    except can.CanError as e:
        print(f" Erreur CAN : {e}")
 
    except Exception as e:
        print(f" Erreur générale : {e}")
#OUTPUT for this one : can.CanError: A parameter contains an invalid value
############################################################
#Second function
def periodic_message_can(can_id=0x1E38400C, interface='pcan', channel='PCAN_USBBUS2'):
 
    try:
 
        bus = can.interface.Bus(interface=interface, channel=channel, fd=True)
 
        can_data_on = [0xEB, 0x10]
 
 
        msg = can.Message(arbitration_id=can_id, data=can_data_on, is_extended_id=True, is_fd=True, dlc=2, is_rx=False)
 
        bus.send_periodic(msg, 1)
 
    except can.CanError as e:
 
        print(f"Erreur CAN : {e}")
 
    except Exception as e:
 
        print(f"Erreur générale : {e}")

#The function executes without any errors, but it looks like my frame is not sent as CAN FD...

When I check this frame in PCAN-View, the “Type” field is empty, which usually indicates it's a standard CAN frame and not an FD one. So even though I set is_fd=True in the code, it seems like it's not actually taking effect.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions