基于NVIDIA Jetson AGX Xavier的Socket Can开发
(CSDN太恶心,已迁移到博客园)
1.焊接外接的收发器
参考博客:
配置can接口寄存器以及CAN收发器的焊接
配置can接口寄存器以及CAN收发器的焊接与测试代码以及gitlab示例代码参考(CSDN)
用的收发器是TJA1042
大佬帮我焊的,最终的成品如下
2.测试Xavier两路CAN
在Xavier的ubuntu上安装can-utills测试两路CAN的收发是否正常,如果焊好了的话正常是两路can都可以收发的(建议多买几个收发器TJA1042,毕竟大佬给我焊的时候也是不小心焊烧了一路can)
3.部分工程代码
开发过程中参考了以下内容:socket can官方文档的中文翻译
vehicle_socket
注:我是把/etc/rc.local脚本中部分bash移植到了代码中,以便于从代码中设置波特率
废话不多说,整代码
#include<socket_can.h>
#include <pthread.h>
#include <stdint.h>
#include <net/if.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <string>
#include <linux/can.h>
#include <linux/can/raw.h>
#include <linux/can/error.h>
#include <linux/net_tstamp.h>
#define SET_CAN0_BAUDRATE "sudo ip link set can0 type can bitrate "
#define SET_CAN1_BAUDRATE "sudo ip link set can1 type can bitrate "
#define CAN_FD_ON " dbitrate 2000000 berr-reporting on fd on"
#define CAN0_OPEN "sudo ip link set up can0"
#define CAN1_OPEN "sudo ip link set up can1"
/* set transmit queue length: small value for slower device with a high latency, hight value is recommended for server connected with high-speed internet connections the perform large data transfers */
#define CAN0_LENGTH "sudo ip link set can0 txqueuelen 1000"
#define CAN1_LENGTH "sudo ip link set can1 txqueuelen 1000"