How to establish communication between two CAN controllers in nvidia jetson agx xavier

We tried the same way what nvidia website suggest for CAN communication.
But we not able to transmit packets . If it need any other commands to make the CAN communication to work as possible.

.
In this above image , we tried to send from CAN0 to CAN1 , but we cant able to receive in the CAN1 . And we transmitting from CAN0 but we have packets in the CAN0 RX and that too is not correct. So we also tried to change the clock parent PLLAON but after changed that too back to OSC. And we made the hardware connections are also right. Please help us to solve the issue and to make a proper communication . Thanks in advance.

Hi swedhar10,

Are you using the devkit or custom board for AGX Xavier?

Is your fourth command used to enable loopback test?

Loopback test for CAN is only available for single bus. It can transmit/receive at either CAN0 or CAN1 w/o any external connection.

If you want to transmit from CAN0 and receive from CAN1, you need 2 CAN transceivers and connect them like the instruction mentioned.

Yes , I am using the devkit .
No, the fourth command is for on the fd mode and off the loopback mode.
Yeah, that only we did for loopback test , that is fine.
But we did the same connections as given in the nvidia website with two transceivers but not able to get, the output what I get that only I shared to you.
And we are using a transceiver , model name: CJMCU-230 (SN65HVD230)

What’s your Jetpack version in use?

Have you used Jetson-IO to configure pinmux for both CAN0 and CAN1?

Could you refer to the steps from developer guide and use the same command to configure CAN bus?

Jetpack 5.1.
Yes, we configured by using Jetson - IO.
Yes, every commands we followed that was given in the developer guide , that only I posted in the Pic.
What is the solution to establish communication from CAN0 to CAN1 and vice-versa?
And one more doubt are you checked in your side, whether the CAN is working in the jetpack version 5.1?
Thank you for your kind response.

Could you help to update to latest JP5.1.1(R35.3.1) to verify?

The command you used are some different from the developer guide (like bitrate, data rate…). Please use the exact same commands as developer guide mentioned to verify first.

Yes, we’ve verified it should work to send data from CAN0 → Can transceiver → Can transceiver → CAN1 as expected.

Thank you Kevin, for your reply.
And one more doubt, we are using a transceiver , model name: CJMCU-230 (SN65HVD230). Is this transceiver is compatible to enable communication?
And we used the commands that was given in the developer guide in the earlier. But we not get any output. So we gone through nvidia forums , they mentioned some changes in the command. So only we tried that.

Will you please share the output and the testing connection picture that you have reference when you get that while using transceivers? And how you connect the CANH and CANL of the transceiver? In breadboard or something else ? Are you used any resistors in between? And what wires you used for connecting to XAVIER?

Yes, it should work, but what we’ve verified is WaveShare SN65HVD230 CAN board.

I just connect them as following and run all the commands exact the same as the developer guide.

Thank you for your response. Currently we don’t have Waveshare , after we get it. We will check on it.

Hi Kevin, I want the excel of our jetson AGX xavier/orin like this one.


Or is this excel is same for all boards?
Please help us to get this.
Thanks in advance

Hi kevin, By default the I2S pins are not enabled, but you can enable them by running the following commands … $ sudo /opt/nvidia/jetson-io/config-by-function.py -o dtb i2s5 $ sudo reboot
Is this any commands like above to enable the CAN pins in ORIN/XAVIER
Thanks in advance

You could get that from Download Center.

If you are using the devkit, you could enable the desired function with Jetson-IO.
If you are using the custom board, you should configure them with pinmux spreadsheet.

Thank you so much Kevin , for your kind response.
And I have one more doubt. Why in fd mode dbitrate limit is 1Mbps . If I set to 2Mbps there is a transmission error.
In the nvidia documentation they mention like this ,
It can deliver higher data bit rates if you configure the TDCR (Transmission Delay Compensation Register) through its user space sysfs node.
How to do this?

Please help me on this. I learned in many websites but not able to get it clearly

Have you tried to configure CAN with the following command for different data rate and bit rate when FD is enabled?
Controller Area Network (CAN) — Jetson Linux Developer Guide documentation (nvidia.com)

If you are using SN65HVD230, the maximum rate is 1M.

2 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.