• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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