CAN入门学习

CAN是ISO标准化的串行通信协议,分为高速和低速两个标准。CAN通讯节点由控制器和收发器组成,通过显性和隐性电平传输数据。数据帧包含仲裁段、控制段、数据段、CRC段和ACK段。STM32的CAN外设支持正常、静默、回环和静默回环模式,有多个发送邮箱和接收FIFO。
摘要由CSDN通过智能技术生成

问题

  • can是什么
  • can有几个标准
  • can物理层是什么样的
  • can通讯节点硬件构成
  • can控制器收发数据的过程
  • can的显性电平和隐性电平是什么
  • can报文种类有哪几种
  • can的数据帧的结构是什么
  • can测试模式分为哪些

正文

        CAN 是控制器局域网络 (Controller Area Network) 的简称。是 ISO 国际标准化的串行通信
协议。

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

        CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。其中ISO11898
是针对通信速率为125Kbps~1Mbps 的高速通信标准,而 ISO11519-2是针对通信速率为 125Kbps
以下的低速通信标准。

硬件层

        与 I2C、SPI 等具有时钟信号的同步通讯方式不同,CAN 通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有 CAN_High 和 CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。

         对于闭环总线网络,CAN 物理层的形式主要有两种,图中的 CAN 通讯网络是一种遵循 ISO11898 标准的高速、短距离“闭环网络”,它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个“120 欧”的电阻。

        对于开环总线网络,遵循 ISO11519-2 标准的低速、远距离“开环网络”,它的最大传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2千欧”的电阻。

        CAN通讯节点由一个 CAN控制器及 CAN收发器组成,控制器与收发器之间通过
CAN_Tx 及 CAN_Rx信号线相连,收发器与 CAN 总线之间使用 CAN_High 及 CAN_Low
信号线相连。其中 CAN_Tx 及 CAN_Rx使用普通的类似 TTL逻辑信号,而 CAN_High及
CAN_Low 是一对差分信号线,使用比较特别的差分信号。

        当 CAN节点需要发送数据时,控制器把要发送的二进制编码通过 CAN_Tx 线发送到
收发器,然后由收发器把这个普通的逻辑电平信号转化成差分信号,通过差分线
CAN_High和 CAN_Low 线输出到 CAN 总线网络。而通过收发器接收总线上的数据到控制
器时,则是相反的过程,收发器把总线上收到的 CAN_High及 CAN_Low信号转化成普通
的逻辑电平信号,通过 CAN_Rx输出到控制器中。

        以高速 CAN 协议为例,当表示逻辑 1时(隐性电平),CAN_High和 CAN_Low
线上的电压均为 2.5v,即它们的电压差 V H -V L =0V;而表示逻辑 0 时(显性电平),
CAN_High 的电平为 3.5V,CAN_Low线的电平为 1.5V,即它们的电压差为 V H -V L =2V。
例如,当 CAN 收发器从 CAN_Tx线接收到来自 CAN 控制器的低电平信号时(逻辑 0),它
会使 CAN_High输出 3.5V,同时 CAN_Low输出 1.5V,从而输出显性电平表示逻辑 0。

协议层

        以上是 CAN 的物理层标准,约定了电气特性,以下介绍的协议层则规定了通讯逻辑。

        而 CAN使用的是两条差分信号线,只能表达一个信号,简洁的物理层决定了 CAN 必
然要配上一套更复杂的协议,如何用一个信号通道实现同样、甚至更强大的功能呢?CAN
协议给出的解决方案是对数据、操作命令(如读/写)以及同步信号进行打包,打包后的这些
内容称为报文。

        在原始数据段的前面加上传输起始标签、片选(识别)标签和控制标签,在数据的尾段
加上 CRC校验标签、应答标签和传输结束标签,把这些内容按特定的格式打包好,就可以
用一个通道表达各种信号了,各种各样的标签就如同 SPI中各种通道上的信号,起到了协
同传输的作用。当整个数据包被传输到其它设备时,只要这些设备按格式去解读,就能还
原出原始数据,这样的报文就被称为 CAN的―数据帧‖。

        can的帧一共有5种,数据帧、遥控帧、错误帧、过载帧  、帧间隔 。

        数据帧以一个显性位(逻辑 0)开始(帧起始),以 7 个连续的隐性位(逻辑 1)结束(帧结束),在它们之间,分别有仲裁段、控制段、数据段、CRC段和 ACK段。

        帧起始——通知各个节点将有数据传输。

        仲裁段——当同时有两个报文被发送时,总线会根据仲裁段的内容决定哪个数据包能被传输,这也是它名称的由来。

        控制段——它由 4个数据位组成,用于表示本报文中的数据段含有多少个字节。

        数据段——数据段为数据帧的核心内容,它是节点要发送的原始信息,由 0~8个字节组成,MSB先行。

        CRC段——保证报文的正确传输。

        ACK段——发送节点发送的是隐性位,而接收节点则在这一位中发送显性位以示应答。

        帧结束——帧结束段由发送节点发送的 7 个隐性位表示结束。

STM32 的 CAN 外设简介

        STM32的 CAN提供了测试模式,可以控制使用正常模式、静默模式、回环模式及静默回环模式。正常模式——正常模式下就是一个正常的 CAN节点,可以向总线发送数据和接收数据。

静默模式——一般用于监测,它可以用于分析总线上的流量,但又不会因为发送显性位而影响总线。

回环模式——回环模式下,它自己的输出端的所有内容都直接传输到自己的输入端,输出端的
内容同时也会被传输到总线上,即也可使用总线监测它的发送内容。输入端只接收自己发送端的内容,不接收来自总线上的内容。使用回环模式可以进行自检。

         CAN外设的发送邮箱,它一共有 3个发送邮箱,即最多可以缓存 3 个待发送的报文。

         CAN外设的接收 FIFO,它一共有 2个接收 FIFO,每个 FIFO 中有 3个邮箱,即最多可以缓存 6 个接收到的报文。当接收到报文时,FIFO 的报文计数器会自增,而 STM32内部读取 FIFO 数据之后,报文计数器会自减,我们通过状态寄存器可获知报文计数器的值,而通过前面主控制寄存器的 RFLM 位,可设置锁定模式,锁定模式下 FIFO 溢出时会丢弃新报文,非锁定模式下 FIFO 溢出时新报文会覆盖旧报文。

        can结构体保护,can初始化结构体、CAN 发送及接收结构体、CAN 筛选器结构体(CAN的筛选器有多种工作模式,利用筛选器结构体可方便配置)、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值