技术文档

单片机总线 单片机外围模块漫谈之三,CAN总线

小编 2024-10-06 技术文档 23 0

单片机外围模块漫谈之三,CAN总线

1980年,Bosch的工程师开始研究汽车上高速串行通信的问题,并在1986年发布了CAN(Controller Area Network)总线。CAN以其多主,高速(最高1Mbps),抗干扰的特性被广泛应用汽车及各种工业环境。在此我们主要介绍一下CAN总线的特点,帧类型,以及应用中的注意事项。

1. CAN总线特点

1.1 多主控制

跟我们常用的RS485只有一个主机,从机只能等待主机的轮询不同,在CAN总线中,当任意一个节点监测到总线空闲时,就可以立即启动信息的发送,也就是每一个节点都可以当主机。当然,这马上会引起我们的担心。如同一个家庭每个人都当家做主,那还不乱了套吗?不急,我们来看一下。这个问题是如何被巧妙地解决的。

物理层 ,CAN采用差分总线。单片机引脚的逻辑电平0,被CAN收发器(PHY)转换为显性电平(Dominant),逻辑电平1被转换为隐性电平(Reccesive)。总线上执行的是"线与"逻辑,只要有一个节点输出显性电平,那么总线上就是显性电平。

仲裁(Arbitration) ,CAN的发送总是以SOF(Start Of Frame)起始,紧跟器后是ID。在发送ID的同时,节点监听总线上的显隐状态,当监听到的状态与自己发送的不一致时,此节点将停止发送,进入只收模式。如下图所示,每一帧消息所具有的ID决定了此消息的优先级,发送最高优先级消息的节点获得总线最后的控制权,得以最终完整的发送自己的消息。

接收滤波(Filter) 。一个挂在总线上的节点可以监听到所有的消息(Message),但通常我们只对其中某些消息感兴趣,这时怎么办呢?CAN模块一般会提供接收滤波功能(Filter)。通过设置滤波寄存器,我们可以达到接收消息时,比对ID所有位,也可以只比对ID某些位,从而达到只接收ID与自己完全相同的消息,或接收ID与自己部分相同的消息的目的。利用这种机制可以给节点编组,给组成员群发消息。

1.2 速度快,距离远

CAN总线可以达到1Mbps的速率。总线速度随着传输距离增加而下降,下面是一些典型速率。在一个数据帧内可以传送8个字节的数据。

1000kbps 40m

500kbps 130m

100kbps 620m

50kbps 1300m

5kbps 10000m

2012年,Bosch又发布了CANFD(CAN with Flexible Data-rate),最高速率可以达到10Mbps,在一个数据帧内可以传送64字节的数据。2015 年 ,国际标准化组织(ISO)正式发布支持CAN FD的11898-1协议。

2. 帧类型

CAN协议很简洁,只包含4种帧类型。

数据帧(Data Frame) ,用来把数据从发送节点传送至接收节点。

远程帧(Remote Frame) ,一个节点用来请求其它节点发送数据。一个节点发送远程帧时会把Arbitration Filed最后一位RTR(置1),具有相同ID的节点会把数据发送到总线上。

错误帧(Error Frame) ,当一个节点检测到错误时会向总线发出错误帧,以通知其它节点。

过载帧(Overload Frame) ,用来在数据帧或远程帧之间插入延时。

帧间隔(Interframe Space), 不是一种帧类型。它是帧之间的间隙,由多个连续的隐性电平构成。

在编程时我们直接用到的就是数据帧和远程帧。软件编程比较简单,需要注意的是一般需要设置寄存器中的初始化请求位(Initialization request),使模块进入初始化状态,才能开始进行CAN模块的各种配置,初始化完成后退出初始化状态,进入运行状态。

3. CAN总线应用注意事项

3.1 终端匹配电阻

在CAN总线的两端要用120欧的电阻端接进行阻抗匹配,因为CAN总线长度一般会比较长,传输的信号速度快,特别是信号的边沿跳变部分频率很高。

传输线效应 平常我们总是认为电信号从一个引脚发出,通过导线,瞬间就会到达接收引脚,导线上的电压处处是相等的。但是当信号的频率很高,或者导线特别长,总之导线的长度接近传导信号波长的1/10后,我们就需要转变一下我们的观念,此时信号的传输主要受电缆特性阻抗的影响。

电缆特性阻抗 = 信号电场强度(伏特/米) / 磁场强度(安培/米)

电缆的特性阻抗与电缆的材质,粗细,线缆之间的距离有关,而与电缆的长度无关。电缆的特性阻抗还和信号的频率有关,但是当频率增加到一定数值时,特性阻抗不再变化。常用的带屏蔽双绞线的特性阻抗是120欧。

信号在阻抗不连续处会产生反射,所以要保持电缆阻抗的连续性,而且线缆终点需要用等于电缆特性阻抗的电阻进行端接,以消耗掉传输至端点的信号,否则信号会反射回去和后续发出的信号产生叠加,引起错误。

频率与波长对应关系

150K 2000m

500K 600m

1M 300m

10M 30m

端接电阻的另一个作用是可以使CAN总线从显性状态快速回到隐性状态。因为在显性状态下,两条线缆CAN_H, CAN_L之间的寄生电容会被充电,如果没有一个放电回路,总线不能快速回到隐性状态。

3.2 EMC防护

CAN常常工作在强干扰的工业环境中,采用屏蔽双绞线会极大的提升EMC防护性能。同时如果数字电路部分和CAN收发器之间用高速光耦隔离开,并且对两部分采用完全隔离的电源供电,那么可以把总线上的干扰最大限度地隔离在外部。

需要注意的是屏蔽层只能在一点接入大地。如果在多个点接地,那么通过大地会形成电流环路,反而会引入噪声。

3.3 时钟容差( Oscillator Tolerance)

总线的速度越高,需要的时钟精度越高。一般在低于125kpbs时可以用低成本的陶瓷震荡器(ceramic resonators),更高的速度下建议使用晶体振荡器(Quartz,or Crystal Oscilators)。

3.4 CAN模块死机现象

CAN模块内部有监控电路,总线上的异常,如短路等,会引起错误计数器增长。TEC(Transmit Error Counter), REC(Receive Error Counter)。当发送错误TEC计数超过255后,CAN模块进入BUS-OFF模式,此节点不能发送也不能接收。这样做的好处是可以避免由个别模块的问题引起整个总线不能工作。

芯片一般会提供两种恢复机制:自动和手动模式。比如在STM32单片机中,如果ABOM位设置为1,CAN模块将不断尝试自动恢复。如果ABOM=0,则需要程序进入CAN初始化模式,重新配置后,再退出初始化进入正常工作模式。

由于CAN总线非常可靠,不易出错,所以在测试阶段建议人为制造一些总线错误,比如短路,断路,强干扰之类,看程序是否能从异常状态下恢复。

单片机常用的几种通信接口,I2C、SPI、UART等

在嵌入式系统中,板上通信接口是指用于将各种集成电路与其他外围设备交互连接的通信通路或总线。以下内容为常用板上通信接口:包括I2C、SPI、UART、1-Wire:

I2C总线

I2C总线是一种同步、双向、半双工的两线式串行接口总线。这里,半双工的含义是指在任意给定的时刻,只有一个方向上是可以通信的。I2C总线最早由Philips半导体公司于20世纪80年代研发面市。I2C最初的设计目标是为微处理器/微控制器系统与电视机外围芯片之间的连接提供简单的方法。I2C总线由两条总线组成:串行时钟线SCL和串行数据线SDA。SCL线——负责产生同步时钟脉冲。SDA线——负责在设备间传输串行数据。I2C总线是共享的总线系统,因此可以将多个I2C设备连接到该系统上。连接到I2C总线上的设备既可以用作主设备,也可以用作从设备。主设备负责控制通信,通过对数据传输进行初始化/终止化,来发送数据并产生所需的同步时钟脉冲。从设备则是等待来自主设备的命令,并响应命令接收。主设备和从设备都可以作为发送设备或接收设备。无论主设备是作为发送设备还是接收设备,同步时钟信号都只能由主设备产生。在相同的总线上,I2C支持多个主设备的同时存在。图1-1显示了I2C总线上主设备和从设备的连接关系。当总线空闲时,SDA 和SCL 都处于高电平状态,当主机要和某个从机通讯时,会先发送一个开始条件,然后发送从机地址和读写控制位,接下来传输数据(主机发送或者接收数据),数据传输结束时主机会发送停止条件。传输的每个字节为8 位,高位在前,低位在后。

开始条件:SCL 为高电平时,主机将SDA 拉低,表示数据传输即将开始。从机地址:主机发送的第一个字节为从机地址,高7 位为地址,最低位为R/W 读写控制位,1 表示读操作,0 表示写操作。

一般从机地址有7 位地址模式和10 位地址模式两种,如果是10 位地址模式,第一个字节的头7 位是11110XX 的组合,其中最后两位(XX)是10 位地址的两个最高位,第二个字节为10 位从机地址的剩下8 位,如下图所示:

应答信号:每传输完成一个字节的数据,接收方就需要回复一个ACK(acknowledge)。写数据时由从机发送ACK,读数据时由主机发送ACK。当主机读到最后一个字节数据时,可发送NACK(Notacknowledge)然后跟停止条件。数据:从机地址发送完后可能会发送一些指令,依从机而定,然后开始传输数据,由主机或者从机发送,每个数据为8 位,数据的字节数没有限制。重复开始条件:在一次通信过程中,主机可能需要和不同的从机传输数据或者需要切换读写操作时,主机可以再发送一个开始条件。停止条件:在SDA 为低电平时,主机将SCL 拉高并保持高电平,然后在将SDA 拉高,表示传输结束。

SPI总线

SPI总线是同步、双向、全双工的4线式串行接口总线,最早由Motorola公司提出。SPI是由“单个主设备+多个从设备”构成的系统。需要说明的是:在系统中,只要任意时刻只有一个主设备是处于激活状态的,就可以存在多个SPI主设备。常运用于EEPROM、FLASH、实时时钟、AD转换器、数字信号处理器和数字信号解码器之间实现通信。为了实现通信,SPI共有4条信号线,分别是:(1)主设备出、从设备入(Master Out Slave In,MOSI):由主设备向从设备传输数据的信号线,也称为从设备输入(Slave Input/Slave Data In,SI/SDI)。(2)主设备入、从设备出(Master In Slave Out,MISO):由从设备向主设备传输数据的信号线,也称为从设备输出(Slave Output/Slave Data Out,SO/SDO)。(3)串行时钟(Serial Clock,SCLK):传输时钟信号的信号线。(4)从设备选择(Slave Select,SS):用于选择从设备的信号线,低电平有效。SPI使用方法:上图所示芯片有2 个SPI 控制器,SPI 控制器对应SPI 主设备,每个SPI 控制器可以连接多个SPI从设备。挂载在同一个SPI 控制器上的从设备共享3 个信号引脚:SCK、MISO、MOSI,但每个从设备的CS 引脚是独立的.主设备通过控制CS 引脚对从设备进行片选,一般为低电平有效。任何时刻,一个SPI 主设备上只有一个CS 引脚处于有效状态,与该有效CS 引脚连接的从设备此时可以与主设备通信。所以,SPI通信方式可以使用“一主多从”的结构进行通信。每个连接到总线上的器件都有唯一的地址,主设备启动数据传输并产生时钟信号,从设备被主设备寻址,同一时刻只允许有一个主设备。从设备的时钟由主设备通过SCLK 提供,MOSI、MISO 则基于此脉冲完成数据传输。SPI 的工作时序模式由CPOL(Clock Polarity,时钟极性)和CPHA(Clock Phase,时钟相位)之间的相位关系决定,CPOL 表示时钟信号的初始电平的状态,CPOL 为0 表示时钟信号初始状态为低电平,为1 表示时钟信号的初始电平是高电平。CPHA 表示在哪个时钟沿采样数据,CPHA 为0 表示在首个时钟变化沿采样数据,而CPHA 为1 则表示在第二个时钟变化沿采样数据。根据CPOL 和CPHA 的不同组合共有4 种工作时序模式:CPOL=0,CPHA=0、CPOL=0,CPHA=1、CPOL=1,CPHA=0、CPOL=1,CPHA=1

UART

UART——通用异步收发传输器,UART 作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。在应用程序开发过程中使用频率较高的数据总线。基于UART的数据传输是异步形式的串行数据传输。基于UART的串行数据传输不需要使用时钟信号来同步传输的发送端和接收端,而是依赖于发送设备和接收设备之间预定义的配置。对于发送设备和接收设备来说,两者的串行通信配置(波特率、单位字的位数、奇偶校验、起始位数与结束位、流量控制)应该设置为完全相同。通过在数据流中插入特定的比特序列,可以指示通信的开始与结束。当发送一个字节数据的时候,需要在比特流的开头加上起始位,并在比特流的末尾加上结束位。数据字节的最低位紧接在起始位之后。UART 串口的特点是将数据一位一位地顺序传送,只要2 根传输线就可以实现双向通信,一根线发送数据的同时用另一根线接收数据。UART 串口通信有几个重要的参数,分别是波特率、起始位、数据位、停止位和奇偶检验位,对于两个使用UART 串口通信的端口,这些参数必须匹配,否则通

起始位:表示数据传输的开始,电平逻辑为“0” 。数据位:可能值有5、6、7、8、9,表示传输这几个bit 位数据。一般取值为8,因为一个ASCII 字符值为8 位。奇偶校验位:用于接收方对接收到的数据进行校验,校验“1” 的位数为偶数(偶校验) 或奇数(奇校验),以此来校验数据传送的正确性,使用时不需要此位也可以。停止位:表示一帧数据的结束。电平逻辑为“1”。波特率:串口通信时的速率,它用单位时间内传输的二进制代码的有效位(bit) 数来表示,其单位为每秒比特数bit/s(bps)。常见的波特率值有4800、9600、14400、38400、115200 等,数值越大数据传输的越快,波特率为115200 表示每秒钟传输115200 位数据。

1-Wire接口

1-Wire接口是由Maxim Dallas半导体公司(首页为http://www.maxim-ic.com)开发的异步半双工通信协议,也称为Dallas 1-Wire®协议。其中,按照主-从通信模型,只使用单条信号线DQ实现通信。1-Wire总线的一个重要特征在于,该总线允许在信号线上传输能量。1-Wire接口支持在总线上连接单个主设备以及一个或多个从设备。

并行接口

板上并行接口(parallel interface)通常用于系统与外围设备之间的通信,其中,外围设备通过存储器映射到系统的主控端。只要嵌入式系统的主控处理器/控制器含有并行总线,支持并行总线的设备就可以直接连接到该总线系统上。外围设备与主控端之间具有控制信号接口,可以控制并行总线上的数据通信。这里,通信的控制信号包括读/写信号和设备选择信号。一般说来,外围设备具有设备选择线;只有当主控处理器选通该线的时候,该设备才是有效的。数据传输的方向可以是从主控端到外围设备,也可以是从外围设备到主控端;这是通过读和写控制信号线进行控制的。只有主控处理器能够控制读控制信号和写控制信号。一般说来,外围设备通过存储器映射到主控处理器,从而可以访问分配的地址范围。此时,设备需要使用地址译码电路来产生芯片选择信号。当处理器选择的地址位于设备指定范围内的时候,译码电路对芯片选择线进行触发,从而激活设备。然后,处理器可以使能相应的控制线(分别是RD\与WD\),从而由设备读出数据,或者是向设备写入数据。为了实现并行通信,系统需要严格遵循时序规范。前面已经提到过,并行通信是由主控处理器启动的。如果某外围设备想要对通信进行初始化,那么可以向处理器发出中断,告知相关信息。为了实现上述功能,设备的中断线需要连接到处理器的中断线上,并且主控处理器需要触发相应的中断。需要说明的是,主控处理器的数据总线宽度决定了并行接口的宽度,可以是4位、8位、16位、32位、64位等。设备支持的总线宽度应该与主控处理器完全相同。

免责声明:本文内容来源于网络,整理者李逍遥;文章版权归原作者所有,意在传播相关技术知识&行业趋势,供大家学习交流,若涉及作品版权问题,请联系删除或授权事宜。

相关问答

单片机总线 英文名?

单片机总线的英文名是MicrocontrollerBus。MicrocontrollerBus是指用于连接单片机内部各个功能模块的通信总线。单片机内部的各个功能模块,如CPU、存储器、...

单片机总线 的分支结构?

1包括串行总线和并行总线。2串行总线是指数据传输的时候只有一条线路,数据按照位的顺序一个一个传输。串行总线的优点是线路简单,成本低,但传输速度相对较慢...

单片机 外部扩展RAM和ROM时,po口和p2口各起什么作用 - 懂得

单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、...

51 单片机 地址 总线 的构成?

一、总线概述计算机系统是以微处理器为核心的,各器件要与微处理器相连,且必须协调工作,所以在微处理机中引入了总线的概念,各器件共同享用总线,任何时候只...

单片机总线 采用时分复用形式时是为了?

单片机总线采用时分复用形式是为了实现多个设备共享同一总线,减少硬件成本和复杂度。时分复用将总线上的不同信号在时间上分离,使得每个设备在不同时间段内独...

wifi模块与 单片机 连接用哪个 总线 ?

属于串口通信,WiFi的输出输入串口与单片机的输入出口相连,如WiFi的TXD发,单片机的RXD收;单片机的TXD发,WiFi的RXD收,可通过模块对单片机写入代码。WiFi把...

51 单片机 的总控制信号是?

80C51单片机的控制总线信号有以下4个,各信号的作用为:1.RST/VPD:复位信号输入引脚/备用电源输入引脚;2.ALE/PROG:地址锁存允许信号输出引脚/编程脉冲输...

什么是通用型 单片机 什么是 总线 单片机 ?

[回答]MSP430单片机是16位单片机,51单片机是8位单片机。这应当是HD6433694B是一个16位的单片机,具体情况不可考。总线型单片机指的是单片机构建了总线,...

89C51 单片机 地址 总线 数据 总线 分别是多少位?

地址总线包括P0,P2数据总线,P0数据总线8位,地址总线16位可寻址空间64K地址总线包括P0,P2数据总线,P0数据总线8位,地址总线16位可寻址空间64K

单片机 中的SPI,I2C,单 总线 ,什么用,什么区别,他们是不能缺少...

[最佳回答]嘿嘿你提出的问题很多呀我来帮你解答吧1先来回答你什么是总线:总线就是一个公共的计算机的连接线所有外围设备都可以通过它与计算机相连接是...

猜你喜欢