嵌入式——CAN(1)

目录

一、初识CAN

1. 介绍

2. CAN总线特点

(1)多主控制

(2)消息的发送

(3)系统的柔软性

(4)通信速度

(5)错误检测&错误通知&错误恢复功能

(6)故障封闭

(7)连接节点多

二、CAN物理层

补:显性电平和隐性电平。

1. 低速CAN

2. 高速CAN

三、CAN协议层

1. 数据帧

2. 位时序

3. 数据同步过程

(1)硬件同步

(2)再同步

补:硬件同步和再同步规则

4. CAN总线仲裁

(1)数据帧和遥控帧的优先级

(2)标准格式和扩展格式的优先级


一、初识CAN

1. 介绍

        CAN( Controller Area Network ),是ISO国际标准化的串行通信协议。现在,CAN 的高性能和可靠性己被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。CAN 等通信协议的开发,使多种 LAN 通过网关进行数据交换得以实现。

2. CAN总线特点

(1)多主控制

    ① 在总线空闲时,所有的 单元都可开始发送消息(多主控制)。

    ② 多个 单元同时开始 发送时,发送高优先级ID 消息的单元可获得发送权

(2)消息的发送

    ① 在 CAN 协议中,所有的 消息都以 固定的 格式发送。

    ② 总线 空闲时,所有与 总线相连的 单元都可以 开始发送 新消息。

    ③ 两个以上的 单元 同时开始 发送消息时,根据标识符( Identifier,ID )决定优先级( ID并不是表示发送的 目的地址,而是表示 访问总线的 消息的优先级 )

    ④ 两个以上的 单元同时 开始发送 消息时,对各消息 ID 的每个位进行 逐个仲裁比较。 仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利 的单元则 立刻停止发送 而进行 接收工作

(3)系统的柔软性

        与总线相连的 单元没有 类似于 “ 地址 ” 的信息。因此 在总线上 增加单元时,连接 在总线上的 其它 单元的 软硬件 及 应用层都不需要改变。

(4)通信速度

    ① 根据 整个网络的规模,可 设定适合的 通信速度

    ② 在同一网络中,所有单元 必须设定成 统一的 通信速度。即使 有一个单元的 通信速度与其它的不一样,此单元也会输出 错误信号,妨碍 整个网络的通信。

    ③ 不同网络间 可以有 不同的通信速度。

(5)错误检测&错误通知&错误恢复功能

    ① 所有的单元都 可以 检测错误(错误检测功能)。

    ② 检测出错误的单元 会立即 同时通 知其他所有 单元(错误通知功能)。

    ③ 正在 发送消息的单元一旦 检测出错误,会强制 结束当前的发送。

    ④ 强制结束发送的单元 会不断反复地 重新发送此消息 直到成功发送为止(错误恢复功能)

(6)故障封闭

        CAN 可以判断出错误的类型 是总线上暂时的 数据错误(如外部噪声等)还是持续的 数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上 发生持续数据错误时,可将 引起此 故障的单元从 总线上 隔离出去。

(7)连接节点多

    ① CAN 总线是 可同时连接多个单元 的总线。可连接的单元总数 理论上是 没有限制的。但实际上可连接的单元数 受 总线上的 时间延迟及电气负载的限制。

    ② 降低 通信速度,可连接的单元数 增加;提高通信速度,则 可连接的单元数 减少。

二、CAN物理层

        CAN 控制器根据 两根线上的电位差 来判断总线电平。总线电平分为 显性电平和隐性电平,二者必居其一。显性电平具有优先权。发送方通过使总线电平发生变化,将消息发送给接收方

补:显性电平和隐性电平

        总线上执行 逻辑上的线 “ 与 ” 时,显性电平 的逻辑值为 “ 0 ” ,隐性电平为 “ 1 ” 。

        “ 显性 ” 具有 “ 优先 ” 的意味,只要有 一个单元输出 显性电平,总线上即为 显性电平。

        “ 隐性 ” 具有 “ 包容 ” 的意味,只有 所有的单元都输出 隐性电平,总线上才为 隐性电平。( 显性电平比隐性电平更强

        CAN总线由两根线(CANL和CANH)组成,允许挂载多个设备节点(低速CAN:20 高速CAN:30)。

1. 低速CAN

2. 高速CAN

三、CAN协议层

        CAN总线以 “ 帧 ” 形式进行通信。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧。其中数据帧最为常用。

1. 数据帧

        数据帧由7段组成,其又分为 标准帧 ( CAN 2.0A ) 和 扩展帧 ( CAN 2.0B ),主要体现在 仲裁段 和 控制段。

(1)帧起始:表示数据帧开始的段,显性信号。

(2)仲裁段:表示该帧优先级的段,优先级。

(3)控制段:表示数据的字节数及保留位的段。

(4)数据段:数据的内容,一帧可发送0~8字节数据。

(5)CRC段:检查帧的传输错误的段。

(6)ACK段:表示确认正常接收的段。

(7)帧结束:表示数据帧结束的段,7个隐性信号。

    补:遥控帧的 RTR 位为 隐性位,没有数据段。没有数据段的 数据帧 和 遥控帧可通过 RTR位 区别开来。

2. 位时序

        CAN总线以 “ 位同步 ” 机制,实现对电平的正确采样。位数据都由四段组成:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)

        1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以 任意设定位时序。通过设定位时序,多个单元可 同时采样,也可 任意设定 采样点。根据位时序,就可以计算 CAN通信的 波特率

采样点:指读 取总线电平,并 将读到的 电平作为 位值的点。

    注:节点监测到 总线上信号的 跳变在 SS段 范围内,表示 节点与总线的时序 是同步,此时采样点的 电平即 该位的 电平。

3. 数据同步过程

        CAN为了实现对总线电平信号的正确采样,数据同步分为硬件同步和再同步

(1)硬件同步

        节点通过 CAN总线 发送数据,一开始发送帧起始信号。总线上其他节点会 检测帧起始信号在不在位数据的 SS段内,判断内部时序与总线 是否同步。

        假如不在 SS段 内,这种情况下,采样点获得的电平状态是不正确的。所以,节点会 使用硬件同步方式 调整把自己的 SS段 平移到检测到边沿的地方,获得同步,同步情况下,采样点获得的电平状态才是正确的。

(2)再同步

        利用普通数据位的边沿信号( 帧起始信号是特殊的边沿信号 )进行同步。再同步的方式分为两种情况:超前和滞后,即边沿信号与 SS段 的相对位置。

        再同步时,PSB1 和 PSB2 中增加 或者 减少的时间 被称为 “ 再同步补偿宽度( SJW ) ”,其范围:1~4Tq。

        每当 检测出边沿时,根据 SJW值 通过加长 PBS1 段,或缩短 PBS2段,以 调整同步。但如果发生了 超出 SJW值 的误差时,最大调整量 不能超过  SJW值。

        限定 SJW值 后,再同步时,不能 增加限定长度 的 SJW值 。SJW值 较大时,吸收误差能力更强,但是 通讯速度会下降。 

补:硬件同步和再同步规则

    ① 1个位 中只 进行一次 同步调整

    ② 只有当 上次采样点的总线值 和 边沿后的总线值 不同时,该边沿才能用于 调整同步。

    ③ 在 总线空闲 且存在 隐性电平到显性电平的边沿 时,则一定要进行 硬件同步

    ④ 在 总线非空闲时 检测到的 隐性电平 到显性电平 的边沿 如果满足条件 ① 和 ② ,将进行再同步。但还要满足 ⑤、⑥。

    ⑤ 发送单元观测到 自身输出的显性电平 有延迟时不进行 再同步。

    ⑥ 发送单元 在帧起始到 仲裁段 有多个单元 同时发送的情况下,对 延迟边沿不进行 再同步。

4. CAN总线仲裁

        CAN总线处于空闲状态最先开始发送消息的单元获得发送权

        多个单元同时开始发送时,从仲裁段(报文ID)的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送,即首先出现隐性电平的单元失去对总线的占有权变为接收。

        竞争失败单元,会 自动检测总线空闲,在 第一时间再次尝试发送。

(1)数据帧和遥控帧的优先级

        具有相同 ID 的数据帧 和 遥控帧 在总线上竞争时,仲裁段的最后一位(RTR) 为显性位的数据帧具有优先权,可继续发送。

(2)标准格式和扩展格式的优先级

        标准格式 ID与具有相同 ID的遥控帧 或者扩展格式的数据帧 在总线上竞争时,标准格式的 RTR 位为显性位的具有优先权,可继续发送。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/456876.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法——二分查找算法

1. 二分算法是什么? 简单来说,"二分"指的是将查找的区间一分为二,通过比较目标值与中间元素的大小关系,确定目标值可能在哪一半区间内,从而缩小查找范围。这个过程不断重复,每次都将当前区间二分…

如何使用Docker部署DashDot服务器仪表盘并结合cpolar实现公网访问

📑前言 本文主要是使用Docker部署DashDot服务器仪表盘并结合cpolar实现公网访问的文章,如果有什么需要改进的地方还请大佬指出⛺️** 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风…

ES6扩展运算符——三个点(...)用法详解

目录 1 含义 2 替代数组的 apply 方法 3 扩展运算符的应用 ( 1 )合并数组 ( 2 )与解构赋值结合 ( 3 )函数的返回值 ( 4 )字符串 ( 5 )实现了 Iter…

OCR文本纠错思路

文字错误类别:多字 少字 形近字 当前方案 文本纠错思路 简单: 一、构建自定义词典,提高分词正确率。不在词典中,也不是停用词,分成单字的数据极有可能是错字(少部分可能是新词)。错字与前后的…

【leetcode】深搜、暴搜、回溯、剪枝(C++)1

深搜、暴搜、回溯、剪枝(C)1 一、全排列1、题目描述2、代码3、解析 二、子集1、题目描述2、代码3、解析 三、找出所有子集的异或总和再求和1、题目描述2、代码3、解析 四、全排列II1、题目解析2、代码3、解析 五、电话号码的字母组合1、题目描述2、代码3…

获取响应请求头里的信息

如图所示这是一个导出excel的接口,后端响应头部,要获取Content-Disposition里的值, 由于命名问题,没有办法用res.Content-Disposition的方式获取它的值 按理来说使用res[Content-Disposition]就可以获取到,但是咩有&…

「HarmonyOS」CustomDialogController自定义弹窗使用方法

需求背景: 在开发的过程中,总会遇到一些功能需要使用到弹窗进行信息的输入和修改,如用户个人信息的修改;在UI设计上每个App通常都会有各自的样式,而不是使用系统的标准样式,所以通常我们需要进行自定义弹窗…

云开发超多功能工具箱组合微信小程序源码/附带流量主

这是一款云开发超多功能工具箱组合微信小程序源码附带流量主功能,小程序内包含了40余个功能,堪称全能工具箱了,大致功能如下: 证件照制作 | 垃圾分类查询 | 个性签名制作 二维码生成丨文字九宫格 | 手持弹幕丨照片压缩 | 照片编…

【C#】MVVM架构

示例结果展示 前提了解 MVVM是Model-View-ViewModel的缩写形式,它通常被用于WPF或Silverlight开发。 Model——可以理解为带有字段,属性的类。例如学校类,教师类,学生类等 View——可以理解为我们所看到的UI。前端界面。 View Model在View和Model之间,起到连接的作用,…

echarts图表插件

图表组件 ECharts,全称为Enterprise Charts,是一个使用JavaScript实现的开源可视化库。它主要用于数据可视化领域,能够方便地创建出直观、交互性强的图表。ECharts由百度团队开发,目前是Apache的顶级项目之一。ECharts支持的图表…

12. UE5 RPG使用GameplayEffect修改角色属性(三)

书接 11. UE5 RPG使用GameplayEffect修改角色属性(二) 前面,介绍了GameplayEffect的Instant和Duration的使用,这一篇主要介绍一下无限制时间类型的infinite的使用方式。 无限时间限制模式下,如果你的周期时间&#xff…

程序员知识点:Java和JavaScript有哪些区别与联系?

Java 和 JavaScript 是两种不同的编程语言,它们有以下区别和联系: 区别: 设计目的不同:Java 是一种面向对象的编程语言,主要用于企业级应用程序开发、移动应用程序开发等领域。而 JavaScript 是一种脚本语言&#xff…