Rockchip系列之深度分析CAN接口系列(1)_一歲抬頭的博客-CSDN博客
Rockchip系列之CAN 新增framework系统jni接口访问(2)-CSDN博客
Rockchip系列之CAN 新增framework封装service+manager访问(3)-CSDN博客
Rockchip系列之CAN APP测试应用实现(4)_一歲抬頭的博客-CSDN博客
Rockchip CAN 部分波特率收发不正常解决思路_一歲抬頭的博客-CSDN博客
Android JNI与CAN通信遇到的问题总结_android can通信-CSDN博客
Android 内核关闭CAN 串口设备回显功能_一歲抬頭的博客-CSDN博客
CAN通信参数的计算和选择
CAN(控制器局域网)是一种广泛应用于工业和汽车领域的串行总线通信协议。CAN通信的可靠性和稳定性取决于多个因素,包括硬件设备、网络配置、终端电阻、电缆质量等。其中,一个重要的因素是CAN通信参数的设置,包括时间量化器(tq)、传播段时间(prop-seg)、相位段1时间(phase-seg1)、相位段2时间(phase-seg2)和同步跳转宽度(sjw)等。
本文将介绍CAN通信参数的含义、计算方法和选择原则,以及如何根据具体的硬件设备和网络配置进行参数调整。本文的内容基于以下的情况:
- 测试CAN通信时使用了不同的波特率(666、500、40、20、10、5k),但只能发送而无法接收数据。
- 通过设置ip link set can0 type can tq 133 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1,可以解决时钟同步问题,实现正常的数据收发。
本文我是请教了专业做can设备的 , 部分内容是参考别人的 希望能帮助到有需要的人。
CAN通信参数的含义
CAN通信参数用于配置CAN总线接口的通信参数。这些参数影响了CAN总线上数据的传输速率、传播延迟、采样点位置、位同步等。下面是各个参数的详细解释:
- tq: 时间量化器(Time Quantum),表示一个时间量化器的时钟周期数。它定义了CAN总线的时间分辨率。较小的tq值表示更高的时间分辨率。
- prop-seg: 传播段时间(Propagation Segment),表示数据从发送器到接收器的传播延迟时间。这个参数通常与CAN总线长度和传输速率有关。较大的prop-seg值允许更长的总线长度。
- phase-seg1: 相位段1时间(Phase Segment 1),表示在采样点之前的时间段。在这个时间段内,总线上的信号被采样以进行数据接收。
- phase-seg2: 相位段2时间(Phase Segment 2),表示在采样点之后的时间段。在这个时间段内,总线上的信号被保持稳定以供其他节点采样。
- sjw: 同步跳转宽度(Synchronization Jump Width),用于定义同步跳转的时间段。它用于处理发送器和接收器之间的位同步。
CAN通信参数的计算方法
CAN通信参数的计算涉及多个因素,包括传输速率、总线长度、物理层特性和硬件设备的要求。以下是关于各个参数的计算和选择的一般指导原则:
- tq: 时间量化器定义了CAN总线的时间分辨率,也称为时间切片。计算tq值通常涉及考虑总线速率和硬件设备的要求。
- prop-seg: 传播段时间定义了从发送器到接收器的信号传播延迟时间。它取决于总线的物理长度和传播速度。计算prop-seg值通常是根据总线长度和传输速率,结合物理层传播速度的特性进行估算。
- phase-seg1: 相位段1时间定义了在采样点之前的时间段。相位段1时间的计算涉及平衡传输延迟和采样点的位置,以确保正确的数据接收。
- phase-seg2: 相位段2时间定义了在采样点之后的时间段。相位段2时间的选择通常取决于传输速率和硬件设备的要求。
- sjw: 同步跳转宽度定义了同步跳转的时间段。同步跳转宽度的计算通常与相位段时间和总线速率相结合,以确保正确的位同步。
具体的参数计算和选择通常涉及CAN硬件设备的文档和规范。厂商通常提供参数计算公式、建议范围和最佳实践。建议查阅相关文档以获取准确的计算方法和建议值,以适应特定的硬件设备和网络配置。
CAN通信参数的调整示例
测试CAN通信时使用了不同的波特率(666、500、40、20、10、5k),但只能发送而无法接收数据。这可能是因为使用了不正确的通信参数,导致发送和接收的时钟同步问题。
通过设置ip link set can0 type can tq 133 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1,可以使用特定的通信参数来解决时钟同步问题。这些参数设置可能适用于本文的CAN硬件设备和网络配置,确保发送和接收的数据能够正确同步和解析。
下面是对这些参数设置的解释:
- tq: 时间量化器的值为133。这意味着一个时间量化器包含133个时钟周期。较小的tq值提供更高的时间分辨率,可以用于处理更高的数据速率。
- prop-seg: 传播段时间和相位段1时间的值都为6。这表示在传播段时间和相位段1时间都有6个时间量化器的时钟周期。这样设置可以适应中等长度的CAN总线。
- phase-seg2: 相位段2时间的值为2。这表示在相位段2时间有2个时间量化器的时钟周期。较小的相位段2时间可以提供更高的数据采样精度。
- sjw: 同步跳转宽度的值为1。这表示同步跳转宽度为1个时间量化器的时钟周期。适当的同步跳转宽度可以确保数据的位同步。
CAN上层解决增加的代码
private void openCan() { if (isCanOpen) { showToast("CAN 总线已经打开"); return; } try { systemCan = new SystemCan(selectedCan, selectedBaudrate); int fd = systemCan.dev_openCan(selectedCan); if (fd != -1) { systemCan.fd = fd; showToast("打开 CAN 总线成功"); openCanButton.setEnabled(false); isCanOpen = true; } else { showToast("打开 CAN 总线失败"); } } catch (Exception e) { showToast("打开 CAN 总线出现异常"); Log.e(TAG, "Error opening CAN: " + e.getMessage()); } // 添加了额外的参数tq(时间量化器),propSeg(传播段时间),phaseSeg1(相位段1时间),phaseSeg2(相位段2时间)和sjw(同步跳转宽度) runOnUiThread(new Runnable() { @Override public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } ShellUtils.CommandResult commandResult = ShellUtils.execCommand("ip link set " + selectedCan + " down && ip link set " + selectedCan + " type can tq 133 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1 && ip link set " + selectedCan + " up", true); //Log.d("SystemCan-test", + commandResult.result + "," + commandResult.successMsg + "," + commandResult.errorMsg); } }); }
我是在Android设备验证ok的 , 如果是adb测试的话 更简单 , android,linux通用哈。
请按照这个步骤执行3条命令就可以了 1. 设置波特率 ip link set can0 down && ip link set can0 type can bitrate 500000 && ip link set can0 up 2. 设置参数 ip link set can0 down && ip link set can0 type can tq 133 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1 && ip link set can0 up 3. 读数据 candump can0 & 单独执行每条命令 , 如果你那边是can1 则改成can1。 然后通过上位机发送数据看看adb 这边能不能打印数据
注意 这些参数设置并不是唯一可行或最优的选择。不同的CAN网络可能需要不同的参数设置,以适应不同的硬件设备和网络特性。建议参考硬件设备的文档和规范,了解其建议的参数设置和要求,以确保正确的数据通信。
总结
本文介绍了CAN通信参数的计算和选择,以及如何根据具体情况进行参数调整。CAN通信参数包括时间量化器(tq)、传播段时间(prop-seg)、相位段1时间(phase-seg1)、相位段2时间(phase-seg2)和同步跳转宽度(sjw)等,它们影响了CAN总线上数据的传输速率、传播延迟、采样点位置、位同步等。CAN通信参数需要根据硬件设备、网络配置、传输速率等因素进行合理地计算和选择,以确保CAN通信。如果有什么问题 欢迎留言评论 栓QQQQ。