当前位置: 首页 > news >正文

CAN协议

概述

CAN总线是异步,半双工,信号差分(非单端)

CAN总线硬件电路

每个设备通过 CAN 收发器 (如 TJA1050 挂载在 CAN 总线网络上, CAN 控制器(即芯片里的 CAN 控制器)引出的 TX RX CAN 收发器 相连, CAN 收发器引出的 CAN_H CAN_L 分别 总线的 CAN_H CAN_L 相连。
高速 CAN 使用闭环网络, CAN_HCAN_L的两端添加120 Ω的终端电阻(终端电阻可以①抑制信号反射,使信号平稳;②在空闲时收紧信号,使得高低两条线的电压一致,即为 逻辑 1 ”)

 CAN通信-物理实现

CAN_H/CAN_L TX/RX 与逻辑的对应关系如左图,右图为不同标准对 CAN_H CAN_L 电压差的规定:
当某个ECU想发出逻辑0时,TX引脚向CAN收发器发出低电平,CAN收发器会将CAN_H拉高,将CAN_L 拉低。总线上的其他 CAN 收发器就可以通过将 CAN_H CAN_L 做差判断出当前为逻辑 0 ,然后通过 RX 引脚向 ECU 发送低电平。
同理,逻辑 1CAN总线上表现为CAN_H等于CAN_L
CAN 通讯的速度(通讯速度由通讯各方约定):

     高速CANISO11898125k-1Mbps<40m (常用)

     低速CANISO1151910k-125kbps,<1km

CAN 总线 - 双绞线
为什么采用双绞线?
为什么采用差分形式 : 抗干扰能力强。当外界有强电场或电磁干扰时,由于两根信号线受到的影响基本相同,因此它们之间的电压差(即差分信号)受到的影响较小。这样,即使在恶劣环境下, CAN 总线也能保持较高的通信可靠性。
在差分传输应用中,双绞线不仅可以降低自身对外界的干扰,同时可以消除与外界干扰源的电容耦合和感应耦合。

CAN总线帧格式

 接下来我们主要讲述数据帧,即各ECU广播式地向总线上发送自己的信息,这也是为什么我们能周期性地获得比如五门一盖、座椅占位状态、整车电源模式等报文(Message)。

SOF Start of Frame ):帧起始,表示后面一段波形为传输的数据位。
ID Identify ):标识符,区分功能,同时决定优先级(根据仲裁规则, ID 小的优先发送)。
RTR Remote Transmission Request ):远程请求位,区分数据帧和遥控帧( 0 表示数据帧, 1 表示遥控帧)。
IDE Identifier Extension ):扩展标志位,区分标准格式和扩展格式( 0 表示标准格式, 1 表示拓展格式)。
r0/r1 Reserve ):保留位,为后续协议升级留下空间,比如 r1 被用作 IDE 位。
DLC Data Length Code ):数据长度,指示数据段有几个字节。


http://www.mrgr.cn/news/64197.html

相关文章:

  • PHP7内核剖析 学习笔记 第一章 PHP基础架构
  • 学习记录,正则表达式, 隐式转换
  • C++中实现多态有几种方式
  • 华为HarmonyOS 让应用快速拥有账号能力 -- 3 获取用户手机号
  • 深入浅出:java 学习入门全攻略
  • 泷羽sec-burp(3)decodor comparer logger模块使用 学习笔记
  • 【P2-1】ESP8266 WIFI模块STA、AP、STA+AP、TCP/UDP透传工作模式介绍与AT指令介绍
  • Aicbo:解锁AI创意新纪元,一键生成视频、绘画与文字!
  • gesp的python二级题目
  • python 调用shell 脚本
  • 【机器学习】机器学习算法-线性回归算法
  • springboot河南旅游推荐系统-计算机毕业设计源码33358
  • DNS域名解析服务器--RHCE
  • Git本地分支更新推送到远程主分支上
  • 1231243545347ikih
  • 江协科技STM32学习- P33 实验-软件I2C读写MPU6050
  • 裸金属服务器和普通服务器的不同之处
  • 决策树算法
  • Java实战项目-基于 SpringBoot+Vue 的医院管理系统
  • Qt的程序如何打包详细教学
  • 无桥图腾柱PFC -- 基于平均电流的双闭环仿真
  • 【多模态RAG】多模态RAG ColPali实践
  • 《GBDT 算法的原理推导》 11-12计算损失函数的负梯度 公式解析
  • 【酒店管理与推荐系统】Python+Django网页界面平台+推荐算法+管理系统网站
  • 第5章 输入/输出(I/O)管理
  • C++11标准模板(STL)- 常用数学函数 - 分类及比较 - 对给定的浮点值分类(std::fpclassify)