CAN学习笔记(一)CAN入门

CAN学习笔记(一)CAN入门

参考链接:https://blog.csdn.net/2301_77952570/article/details/131114941

CAN收发器的作用

  • 发:将TTL电平转换为CAN专用电压的差分信号
  • 收:将CAN的差分信号转换为TTL电平

高低电平的定义

  • CAN_High - CAN_Low < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1",即高电平。
  • CAN_High - CAN_Low > 0.9V 时候为显性的,逻辑信号表现为"逻辑0",即低电平。

​ 显隐之间存在优先级的关系,显性的优先级高于隐性(常用于仲裁机制)

通信过程概述

CAN中并无地址的概念。少了像IIC中的SCL地址线、SPI中的片选信号线,简洁的物理层决定了 CAN 必然要配上一套更复杂的协议。

空闲状态

在CAN协议中,当总线上的上出现连续的11位隐性电平(两根线电压差小于0.5V),表示总线就处于空闲状态。

开始数据传输

报文:报文 = 帧 = 帧起始(开始位 + 地址 + 控制) + 原始数据 + 帧结束(CRC + 结束位)

每次发送数据前,节点都会监听总线的状态,如果总线状态为空闲时,它就会立即向总线上发送自己的帧。

帧分为5种

  1. 数据帧:用于节点向外传送数据
  2. 遥控帧:用于向远端节点请求数据
  3. 错误帧:用于向远端节点通知校验错误,请求重新发送上一个数据
  4. 过载帧:用于通知远端节点;本节点尚未做好接受准备
  5. 帧间隔:用于将数据帧及遥控帧与前面的帧分离开来

下面是CAN数据帧的标准格式

域段 域段名 位宽:bit 描述
帧起始 SOF(Start Of Frame) 1 数据帧起始标志,固定为1bit显性('b0)
仲裁段 Identify(ID) 11 本数据帧的 ID 信息, ID 信息的作用:
① 如果同时有多个节点发送数据时,作为优先级依据(仲裁机制);
② 目标节点通过 ID 信息来接受数据(验收滤波技术)
RTR Remote Transmission Request BIT 1 RTR标识是否是远程帧(0,数据帧;1,远程帧),在数据帧里这一位为显性('b0)
IDE Identifier Extension Bit 1 IDE用于区分标准格式与扩展格式,在标准格式中 IDE 位为显性(‘b0),在扩展格式里 IDE 位为隐性(’b1)
R0 保留位 1 1bit保留位,固定为1'b0
DLC data length 4 由 4 位组成,MSB 先行(高位先行),它的二进制编码用于表示本报文中的数据段含有多少个字节,
DLC 段表示的数字为0到8,若接收方接收到 9~15 的时候并不认为是错误
数据段 data 0~64 据帧的核心内容,它由 0~8 个字节(0 ~ 64位)组成,MSB 先行
CRC段 CRC 15 段用于检查帧传输错误,发送方以一定的方法计算包括:帧起始、仲裁段、控制段、数据段;
接收方以同样的算法计算 CRC 值并进行比较,如果不同则会向发送端反馈出错信息,重新发送;
计算和出错处理一般由 CAN 控制器硬件完成或由软件控制最大重发数。
CRC界定符 1 CRC 界定符(用于分隔的位),为隐性位(1'b1),主要作用是把CRC 校验码与后面的 ACK 段间隔起来
ACK 槽 ACK slot 1 在 ACK 槽位中,发送端发送的为隐性位,而接收端则在这一位中发送显性位以示应答;
发送 ACK/返回 ACK这个过程使用到回读机制,即发送方先在 ACK 槽发送隐性位后,回读到的总线上的电平为显性0,
发送方才知道它发送成功了,不用重发
ACK界定符 1 在 ACK 槽和帧结束之间由 ACK 界定符间隔开,为隐性位
帧结束 EOF 7 由发送端发送 7 个隐性位表示结束
仲裁机制

用到了线与机制和回读机制(显性位的优先级高于隐性位)

位时序

每一位数据分为四段,最小的时间单位是Tq,一个位由8~25个Tq组成。

段名称 用途 时间范围
同步段( SS ) 用于同步边沿,如果跳变边沿不在同步段,则需要通过PBS补偿 1Tq
传播时间段( PTS ) 用于补偿网络的物理延时时间 1~8Tq
相位缓冲段1( PBS1 ) 补偿边沿阶段的误差,在重新同步的时候可以加长 1~8Tq
相位缓冲段2( PBS2 ) 补偿边沿阶段的误差,在重新同步的时候可以缩短 2~8Tq
posted @   小兜兜me  阅读(283)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示