1# CAN 2 3详细代码及使用可参考[sample/can](https://gitee.com/umspark/can)目录 4 5## 工具简介 6 7canutils 工具包内含 5 个独立的程序:canconfig、candump、canecho、cansend、cansequence。程序的功能简述如下: 8 9| 程序名 | 功能 | 10| ----------- | ----------------------------------------- | 11| canconfig | 用于配置CAN总线接口的参数,主要是波特率和模式 | 12| candump | 从CAN总线接口接收数据并以十六进制形式打印到标准输出,也可以输出到指定文件 | 13| canecho | 把从CAN总线接口接收到的所有数据重新发送到CAN总线接口 | 14| cansend | 往指定的CAN总线接口发送指定的数据 | 15| cansequence | 往指定的CAN总线接口自动重复递增数字,也可以指定接收模式并校验检查接收的递增数字 | 16 17> 工具常见用法: 18> 19> candump canX // 接收can总线发来数据 20> 21> ifconfig canX down // 关闭can设备,以便配置 22> 23> ip link set canX up type can bitrate 250000 // 设置can波特率 (需配合ip工具) 24> 25> conconfig canX bitrate + 波特率 26> 27> canconfig canX start // 启动can设备 28> 29> canconfig canX ctrlmode loopback on // 回环测试 30> 31> canconfig canX restart // 重启can设备 32> 33> canconfig canX stop // 停止can设备 34> 35> canecho canX // 查看can设备总线状态 36> 37> cansend canX --identifier=ID+数据 // 发送数据 38> 39> candump canX --filter=ID:mask // 使用滤波器接收ID匹配的数据 40 41## 接口介绍 (libsocketcan) 42 43``` 44int can_do_restart(const char *name); 45int can_do_stop(const char *name); 46int can_do_start(const char *name); 47 48int can_set_restart_ms(const char *name, __u32 restart_ms); 49int can_set_bittiming(const char *name, struct can_bittiming *bt); 50int can_set_ctrlmode(const char *name, struct can_ctrlmode *cm); 51int can_set_bitrate(const char *name, __u32 bitrate); 52int can_set_bitrate_samplepoint(const char *name, __u32 bitrate, __u32 sample_point); 53 54int can_get_restart_ms(const char *name, __u32 *restart_ms); 55int can_get_bittiming(const char *name, struct can_bittiming *bt); 56int can_get_ctrlmode(const char *name, struct can_ctrlmode *cm); 57int can_get_state(const char *name, int *state); 58int can_get_clock(const char *name, struct can_clock *clock); 59int can_get_bittiming_const(const char *name, struct can_bittiming_const *btc); 60int can_get_berr_counter(const char *name, struct can_berr_counter *bc); 61``` 62