CAN Bus Woes on S1

I cant seem to get any CAN communications out of the S1 Module. Im not quite sure what I am missing…it might be the ground star , but not sure if I need it. Current setup is as follows

Power Brick to Jetson Orin.
Jetson Orin
ODRIVE USB can module via USB cable.
CAN/USB resistor switched to on. (Tried off too…)
JST cable (from odrive usb can module) to JST connector on the ODRIVE S1
S1 Power by wall brick, with power and ground going into terminals.

I can configure and run the S1 via web interface via USB on a separate laptop.
When monitoring the CAN messages on the web interface inspector tab, there is no activity.
I can see the hal tick increment so I know the web interface is working.

Drivers for the CAN interface loaded properly on the Jetson ORIN, but I can not see any messages via candump or cansniffer.

Is there a CAN bus on button or something I am missing?

Hi! Can you post a picture or sketch of your wiring? Do you have the CAN-USB GND connected (either directly or through the S1’s CAN daisy-chain header) to DC- at a single star point? What commands on the Orin have you used to set up the USB-CAN adapter?

This is my current wiring setup. No usb from ODRIVE to Jetson. It is configured via web gui from a different computer (CAN enabled). I am not sending any startup scripts to the ODRIVE…I assumed can bus would just load automatically on bootup and I could use can to communicate with it ?

Additionally, the wall wart I am using is only 2 prong now that I think about it. The laptop supply is 3 prong to the wall

Hi! Looks like there’s no ground tie between the USB-CAN GND and the S1 DC-. You can run a single wire from the GND screw terminal on the USB-CAN adapter to the S1 DC-, or you can run a wire from CAN_GND on the S1’s second JST-GH CAN connector to S1 DC-. This is only required at a single point per system – you just need a shared ground connection from CAN_GND to DC- to act as the CAN ground reference, it’s only if you have multiple that will cause a ground loop.

With proper wiring (and assuming you’ve set the node ID on the S1, enabled periodic messages, and set up the USB-CAN adapter via ip commands on the Jetson), it should work fine :slight_smile:

I added the ground using the 4th pin on the JST cable and connected it to DC- on the terminal. The JST cable I connected to the extra JST port on the S1. Issues still persist.

The odrive now appears to be able to powered through the can bus connector without a DC power supply connected. Is that suppose to happen? I thought these would be isolated from each other… To be clear it is Jetson to USB can to JST-4 pin to S1. S1 ground from extra JST port to DC- on terminal.

I think the problem is related to jetson orin, jetpack 6.0 and 6.1 I found one thread with the exact same problem

and

They may have removed the usbcan drivers in the newer jetpacks (6.0 and 6.1) and thus can0 is the internal can system, not the usbcan system. Still debugging…

Additionally, it looks like the gs_usb drivers were removed which effects other devices too… hmmmm.

Oh interesting! Yeah, sounds like the gs_usb drivers are definitely needed. Could you maybe compile them from source as a kernel module? An alternative would be to reflash the USB-CAN adapter with firmware that runs slcan, which is a CAN-over-USB-serial protocol and allows using slcand to create a Linux (e.g. can0/can1/etc) interface. Shoot me an email at solomon.greenberg@odriverobotics.com if that’s something you’d like to try, but it may take a bit of command line work.

The odrive now appears to be able to powered through the can bus connector without a DC power supply connected. Is that suppose to happen? I thought these would be isolated from each other

This is fine :slight_smile: it’ll provide logic power to the ODrive, but it won’t let you run a motor off it. Careful about the current draw of any encoders/accessories on the ODrive though (powered from the ODrive’s 5V rails) – you need to respect the USB-CAN adapter power limit. You can just snip the red wire on the JST-GH if you want to be extra paranoid.

I havent recompiled the kernel yet, but Im getting CAN bus messages using a different board and OS (raspberry pi), so at least I can start developing. One thing I have noticed, the CAN bus will not work unless dc +/- is plugged in as well as the usb. Does the USB power supply alone not power the can transceivers, or perhaps there is some software configurations causing this behavior?

Hmm, on the S1 there shouldn’t be a requirement for DC+ power – it should function fine off of 5V USB power. I’d guess that this is a CAN grounding issue – maybe disconnecting DC+/- from the S1 is also disconnecting the CAN GND link? Feel free to post some pictures of your wiring!

I ended up having to recompile the gs_usb kernel module and got it installed, communication is working. P. in. the. A. Thank you Nvidia. :-1:

The module will power on when I plug in the usb (blue light comes on), but no CAN bus messages until I power up the board with DC power. Is this a software setting or standard behavior?

This is my setup. DC power is currently not plugged into the wall.