10. CAN 通信¶
CAN总线协议(Controller Area Network), 控制器局域网总线,是德国BOSCH(博世)公司研发的一种串行通讯协议总线, 它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一
10.2. CAN硬件连接¶
CAN模块之间接线:CAN_1H接CAN_2H,CAN_1L接CAN2_L
10.3. can通信测试¶
在Android系统中,同样可以使用can-utils工具进行测试。不过想要通过adb shell进行can测试,需要在Android SDK中自行移植can-utils。
通信测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 执行adb
adb shell
超级用户权限
su
更改测试工具权限
chmod 0777 candump
chmod 0777 cansend
查询当前网络设备:
ifconfig -a
CAN启动:
关闭CAN:
ip link set can0 down
ip link set can1 down
设置比特率500KHz:
ip link set can0 type can bitrate 500000
ip link set can1 type can bitrate 500000
打印can0信息:
ip -details link show can0
ip -details link show can1
启动CAN:
ip link set can0 up
ip link set can1 up
CAN接收:
开启打印,等待接收:
candump can0 &
CAN发送:
发送(标准帧,数据帧,ID:123,date:DEADBEEF):
cansend can1 123#DEADBEEF
|
10.4. Android app can通信测试¶
在Android系统中,想要实现Android app去实现can通信,首先我们介绍一下Android jni
10.4.1. Android jni¶
Java Native Interface ,即 Java 本地接口 作用:使得 Java 与本地其他类型语言(如 C、C++ )进行交互。 实际的使用中,Java 需要与本地代码进行交互,因为 Java 项目具备跨平台的特点,所以 Java 与本地代码交互的能力非常弱,采用 JNI 特性,增强 Java 与本地代码交互的能力。
10.4.2. Android app 实现can 通信¶
以 LubanCat-2IO为例,使用的系统为android 11
连线方式如下:
安卓界面整体布局如下:
在点击初始化按钮的时候,会先读取波特率,然后用该波特率去初始化2io的can0 和can1 。同时也会读取文本框的内容来决定canX来进行发送信息。 点击下方的send按钮可以将信息发送出去。同时后台会将can接收到的信息显示到文本框中,运行效果如下