接口IIC_SPI_URAT_USB_can

来源:互联网 发布:安卓简单捕鱼源码 编辑:程序博客网 时间:2024/04/30 10:54

转自: 接口IIC_SPI_URAT_USB

1、总线

总线(bus)是多个部件分时共享公共信息的一组信号线的集合 。

2、共享

多个部件之间都可以通过总线来传输信息

3、分时

某一时刻只能某两个部件之间传输信息

4、总线分类

    连接范围:片内总线(芯片级互连)、外部总线(通信总线)、内部总线(系统总线)

带宽:并行总线、串行总线

5、总线标准

         主要包括硬件、软件两方面。

         硬件方面:信号线定义、时钟频率、系统结构、仲裁及配置、电气规范、机械规范等方面的内容。

         软件方面:总线协议、驱动程序和管理程序等。

 

第一部分 I2C串行总线的组成及工作原理

1、介绍

Ø  I2C (Inter IC BUS)总线由PHILIPS公司推出,在微电子通信控制领域广泛采用。它是同步通信的一种特殊形式,具有双向、两线(SCL、SDA)、串行、多主控(multi-master)、具有总线仲裁机制的特点,非常适合在器件之间进行近距离、非经常性的数据通信。

Ø  如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。

2、 硬件结构图与接口电路

硬件结构图

参考关于IIC和SPI总线

3、  通信过程

主机起动总线

发送一地址帧,并指明操作类型(读或写)

相应从机应答

发送数据

每一帧的应答

数据传送完毕后,主机发送停止总线信号

4、 起始和终止信号

 

Ø  SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号

Ø  SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号 

 

5、 总线寻址

I2C总线协议有明确的规定:采用7位的寻址字节(寻址字节是起始信号后的第一个字节)。

寻址字节的位定义

 D7~D1位组成从机的地址。D0位是数据传送方向位,为“0”时表示主机向从机写数据,为“1”时表示主机由从机读数据。

 从机的地址由固定部分和可编程部分组成。在一个系统中可能希望接入多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目。

 

6、 应答

每传送一个字节数据(含地址及命令字),都要有一个应答信号,以确定数据是否被对方收到。应答信号由接收设备产生。

注意:

由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。

如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非应答”通知主机,主机则应发出终止信号以结束数据的继续传送。

当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。

 

7、 数据传输的几种组合方式

a、  主机向从机发送数据,数据传送方向在整个传送过程中不变:

Ø 有阴影部分表示数据由主机向从机传送;

Ø  无阴影部分则表示数据由从机向主机传送。

Ø A表示应答

Ø A非表示非应答

Ø S表示起始信号

Ø P表示终止信号。

 

b、主机在第一个字节后,立即从 从机 读数据

 

c、在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次 读/写 方向位正好反相。

 

8、 总 线 仲

8.1单主机时,由该主机控制时钟线SCL。

8.2在多主机系统中,可能同时有几个主机企图启动总线传送数据。当SCL为高电平时,仲裁在SDA线发生;在其他主机发送低电平时,发送高电平的主机将断开它的数据输出,因为总线上的电平与它自己的不同。

仲裁可以持续多位,它的第一个阶段是比较地址位,如果多个主机寻址相同的器件,仲裁会继续比较数据位。

 

 

第二部分 SPI总线协议

SPI,即 SerialPeripheral Interface的缩写,全称串行外围设备接口。

 

SPI总线优势:SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

 

结构:环形总线结构,由ss(cs)scksdisdo构成,其时序比较简单,主要在sck的控制下,两个双向移位寄存器进行数据交换。

 

通信传输方式:

上升沿发送、下降沿接收、高位先发送。

上升沿到来的时候,sdo上的电平将被发送到从设备的寄存器中。

下降沿到来的时候,sdi上的电平将被接收到主设备的寄存器中。

 

一、技术性能

SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master

时钟由Master控制,在时钟移位脉冲下,数据按位传输高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。总线结构如下图所示。

二、接口定义
        SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。

(1)MOSI:主器件数据输出,从器件数据输入

(2)MISO:主器件数据输入,从器件数据输出

(3)SCLK :时钟信号,由主器件产生

(4)/SS:从器件使能信号,由主器件控制

三、内部结构

参考关于IIC和SPI总线

四、 时钟极性和时钟相位      

在SPI操作中,最重要的两项设置就是时钟极性(CPOL或UCCKPL)和时钟相位(CPHA或UCCKPH)。时钟极性设置时钟空闲时的电平,时钟相位设置读取数据和发送数据的时钟沿。

主机和从机的发送数据是同时完成的,两者的接收数据也是同时完成的。所以为了保证主从机正确通信,应使得它们的SPI具有相同的时钟极性和时钟相位

 SPI接口时钟配置心得:在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。

 

五、传输时序

SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。

如下图所示,在SCLK的下降沿上数据改变,上升沿一位数据被存入移位寄存器。

五、数据传输

在一个SPI时钟周期内,会完成如下操作:

1) 主机通过MOSI线发送1位数据,从机通过该线读取这1位数据;

2) 从机通过MISO线发送1位数据,主机通过该线读取这1位数据。

这是通过移位寄存器来实现的。如下图所示,主机和从机各有一个移位寄存器,且二者连接成环。

随着时钟脉冲,数据按照从高位到低位的方式依次移出主机寄存器和从机寄存器,并且依次移入从机寄存器和主机寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。

六、优缺点

SPI接口具有如下优点:

1)   支持全双工操作;

2)     操作简单;

3)    数据传输速率较高。

同时,它也具有如下缺点:

1)    需要占用主机较多的口线(每个从机都需要一根片选线);

2)    只支持单个主机。

3)    没有指定的流控制,没有应答机制确认是否接收到数据。

 

第三部分 UART串行接口

UART总线是异步串口,相比较IIC、SPI结构复杂,一般由:波特率产生器、UART接收器、UART发送器组成,硬件上由两根线,用于发送和接收。

UART常用于控制计算机与串行设备的芯片,提供了RS-232C数据终端设备接口,可以和调制解调器或者其他使用该接口的串行设备进行通信。

可实现全双工通信

需要固定的波特率,两位数据的间隔要相等。

UART协议作为一种低速通信协议,广泛应用于通信领域各场合。

 

参考:一起学mini2440裸机开发(六)--UART原理与基础实验 

一、通信基本概念

1、串行通信与并行通信

计算机与外界的信息交换称为通信,基本的通信方式有两种:

(1)   并行通信(parallel communication)

所传送数据的各位同时发送或接收。

在并行通信中,一个并行数据占多少位二进制数,就要多少根传输线,这种方式的特点是通信速度快,但传输线多,价格较贵,适合近距离传输。

 

(2)   串行通信(serial communication)

所传送数据的各位按顺序一位一位地发送或接收。

串行通信仅需1~2根传输线,故在长距离传输数据时比较经济,但由于它每次只能传送1位,所以传送速度较慢。

2、同步通信和异步通信方式

串行通信分同步和异步两种方式。

2.1.异步通信ASYNC

在异步通信中数据或字符是逐帧(frame)传送的。

帧定义为一个字符的完整的通信格式,通常也称为帧格式。最常见的帧格式一般是先用一个起始位“0”表示字符的开始;然后是5~8位数据,规定低位在前,高位在后;其后是奇偶校验位;最后是停止位,用以表示字符的结束,停止位可以是1位、1.5位、2位,不同的计算机规定有所不同。从起始位开始到停止位结束就构成完整的1帧。

•   起始位——通信线上没有数据传送时,为高电平(逻辑1);当要发送数据时,首先发1个低电平信号(逻辑0),此信号称为“起始位”,表示开始传输1帧数据。

•   数据位——起始位之后的位即数据位。数据位可以是5、6、7或8位(不同计算机的规定不同),上图的数据位为8位。一般从最低位开始传送,最高位在最后。

•   奇偶校验位——数据位之后的位为奇偶校验位(有的方式具有)。此位可用于判别字符传送的正确性,其有3种可能的选择,即奇、偶、无校验,用户可根据需要选择(在有的格式中,该位可省略)。在80C51单片机中,此位还可以用来确定该帧字符信息的性质(地址或数据)。

•   停止位——校验位后为停止位,用于表示1帧结束,用高电平(逻辑1)表示。停止位可以是1、1.5或2位,不同计算机的规定有所不同。

•   异步通信的主要特点如下:

进行串行通信的单片机的时钟相互独立;其时钟频率可以不相同;在通信时不要求有同步时钟信号。由于异步通信是逐帧进行传输的,各位之间的时间间隔应该相同,所以必须保证2个单片机之间有相同的传送波特率。如果传送波特率不同,则时间间隔不同;当误差超过5%时,就不能正常进行通信。由于信息传输可以是随时不间断地进行的,因而帧与帧之间的时间间隔可以是不固定的,间隙处为高电平。

由于异步通信每传送一帧有固定格式,通信双方只需按约定的帧格式来发送和接收数据,所以硬件结构比同步通信方式简单。此外,它还能利用校验位检测错误,所以这种通信方式应用较广泛。

2.2.同步通信SYNC

在同步通信中,数据或字符开始处是用一同步字符来指示(一般约定为l~2个字符),以实现发送端和接收端同步,一旦检测到约定同步字符,下面就连续、顺序地发送和接收数据。

由于同步通信数据块传送时去掉了每个数字都必须具有的字符开始和结束的标志,且它一次可以发送一个数据段(多个数据),因此,其速度高于异步通信;但这种方式要求接收和发送时钟严格保持同步,在通信时通常要求有同步时钟信号,对硬件结构要求较高。

由于这种方式易于进行串行外围扩展,所以目前很多型号的单片机都增加了串行同步通信接口,如目前已得到广泛应用的I2C串行总线和SPI串行接口等。

3、串行通信数据传输率

传送速率是指数据传送的速度,用b/s或bps(比特/秒)表示,称为比特率。在二进制的情况下,比特率与波特率数值相等,因而在单片机的串行通信中,常称为波特率。

   假如数据传送的速率为120个字符每秒,每个字符由1个起始位、8个数据位和1个停止位组成,则其传送波特率为:

10b×120/s=1200b/s=1200波特

每一位的传送时间即为波特率的倒数:

异步通信的数据传送速率一般为50b/s~100kb/s,常用于计算机到CRT终端,以及双机或多机之间的通信等。

4、串行通信方式

在串行通信中,数据是在两机之间传送的。按照数据传送方向,串行通信可分为:

单工(Simplex)制式、半双工(half duplex)制式和全双工(full duplex)制式。

(1)单工制式

在单工制式下,数据在甲机和乙机之间只允许单方向传送。两机之间只需1条数据线。

(2)半双工制式

在半双工制式下,数据在甲机和乙机之间允许双方向传送,但它们之间只有一个通信回路,接收和发送不能同时进行,只能分时发送和接收(即甲机发送,乙机接收,或者乙机发送,甲机接收),因而两机之间只需1条数据线。

(3)全双工制式

在全双工制式下,甲、乙两机之间数据的发送和接收可以同时进行,称为“全双工传送”。全双工形式的串行通信必须使用2条数据线。

不管哪种形式的串行通信,在两机之间均应有公共地线。

5、信号调制与解调

当异步通信的距离在15m之内时,计算机之间可以直接进行通信

而当传输距离较远时,通常是用电话线传送。由于电话线频带不够宽,再加上远距离传输时信号不可避免地衰减,因而使信号发生明显的畸变。

在发送时要用调制器(modulator)把数字信号转换为模拟信号,并加以放大再传送,这个过程叫做调制。在接收时,再用解调器(demodulator)检测此模拟信号,并把它转换成数字信号再送入计算机接口,这个过程即解调

6、通信协议

    通信协议是指在计算机之间进行数据传输时的一些约定,包括通信方式、波特率、命令码的约定等。

为保证计算机之间能准确、可靠地通信,相互之间必须遵循统一的通信协议。

在通信之前一定要先设置好通信协议。

 

二、 UART(Universal Asynchronous Receiver/Transmitter通用异步收发器)

UART(UniversalAsynchronous Receiver and Transmitter)通用异步收发器(异步串行通信口),是一种通用的数据通信协议,它包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。

而RS232、RS499、RS423、RS422和RS485等,是对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。

2.1   RS232

COM口是PC(个人计算机)上,异步串行通信口的简写。由于历史原因,IBM的PC外部接口配置为RS232,成为实际上的PC界默认标准。所以,现在PC机的COM口均为RS232。

 

上图右边是串口接口,统称RS232接口(封装DB9)

通信过程中实际只有两个管脚参与通信

2脚:PC的输入RXD  

3脚:PC的输出TXD 

5脚:接地 

通过2,3脚就实现全双工(可同时收发)的串行异步通信。

 

2.2   UART通信协议

UART使用的是异步,串行通信。

串行通信是指利用一条传输线将数据一位位地顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。

异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。 

数据传送速率用波特率来表示,即每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率为10×120=1200字符/秒=1200波特。

UART数据通信格式如下图:

上图所示为UART工作原理:将传输数据的每个字符以串行方式一位一位的传输。

其中各位的意义如下:

起始位:先发出一个逻辑”0”信号,表示传输字符的开始。

数据位:可以是5~8位逻辑”0”或”1”。如ASCII码(7位),扩展BCD码(8位)。小端传输

校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验)

停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。

 空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。

注:异步通信是按字符传输的,接收设备在收到起始信号之后只要在一个字符的传输时间内能和发送设备保持同步就能正确接收。下一个字符起始位的到来又使同步重新校准(依靠检测起始位来实现发送与接收方的时钟自同步的)

 

三、优势

URAT可实现单端,远距离传输。大多数PC包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。

串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据

能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200

 

第四部分 USB通用串行总线

一、概述

USB外设接口标准的基本思想是采用通用连接器和自动配置及热插拔技术和相应的软件,实现资源共享和外设简单快速连接,关键是提供设备共享接口来解决PC机与外部设备连接的通用性。

USB (Universal Serial Bus)是由Compaq、IBM、Intel、Microsoft、NEC等7家公司组成的联盟在1994年提出的。同年,该联盟成立了实施者论坛(简称USB-IF)。

1996年USB-IF公布了USB 1.0规范,这是第一个为USB产品设计提出的标准。

1998年,在对以前版本的标准进行阐述和扩充的基础上,发布了USB 1.1标准规范。

1999年, 发布了USB2.0。之后,USB更加广泛普及与推广。

 

USB2.0利用传输时序的缩短(微帧)及相关传输技术,将整个传输速度从原本12Mb/s提高到480Mb/s。1GB的数据在1分钟之内就可传输完毕,是USB1.1的40倍。

另外,USB2.0也具有向下兼容的特性,更重要的是,在连接端口扩充的同时,各种采用USB2.0的设备仍可维持480Mb/s的传输速度。

在USB接口设备被广泛应用后,许多的设备如移动硬盘、光盘刻录机、扫描仪、视频会议的CCD及卡片阅读机等便成为USB接口非常流行的应用;而USB的即插即用的特点又使得这些设备易于安装与使用。

二、USB规范

¡  ①有全速、低速和高速3种模式供选择。

¡  ②设备安装和配置容易。

¡  ③易于扩展。

¡  ④使用灵活。USB共有4种传输模式:控制传输、同步传输、中断传输块传输

¡  ⑤能够采用总线供电。

¡  ⑥实现成本低。

三、 USB接口特性

USB电缆由电源线+5V (VBUS)、地线(GND)和两根数据线(D+和D-)4线组成。数据在D+和D-间通过差分方式以全速或低速传输,如下图所示。

 

四、 USB输出驱动特性

USB采用差分驱动输出的方式在USB电缆上传输信号。信号的低电平必须低于0.3V,信号高电平必须高于2.8V

输出驱动必须支持三态工作,以支持双向半双工的数据传输。

全速设备的输出驱动要求更为严格:其电缆的特性阻抗范围必须在76.5~103.5Ω之间,传输的单向延迟小于26ns;驱动器阻抗范围必须在28~44Ω之间。

对于用CMOS技术制成的驱动器,由于它们的阻抗很小,可以分别在D+和D-驱动器串上一个阻抗相同的合适的电阻,以满足阻抗要求并使两路平衡。 如图所示:

所有USB集线器和全速设备的上游端口(Upstream  Port)的驱动器都必须是全速的。

集线器上游端口发送数据的实际速率可以为低速,但其信号必须采用全速信号的定义。低速设备上游端口的驱动器电路是低速的。

 

五、 USB接收设备

 

(a)USB上游端口图                  (b)USB下游端口图

所有USB设备、集线器和主机都必须有一个差分数据接收器和两个单极性接收器。差分接收器能分辨D+和D-数据线之间小至200mV的电平差。两个单极性接收器分别用于D+和D-数据线,它们的开关阈值电压为0.8V和2.0V。

六、 USB数据编码和解码

USB使用一种不归零反向NRZI(None Return Zero Invert)编码方案。在该编码方案中,“1”表示电平不变,“0”表示电平改变。下图列出了一个数据流的NRZI编码,在图中的第二个波形中,一开始的高电平表示数据线上的J态, 后面就是NRZI编码。

七、比特填充

USB用总线上电平的跳变作为时钟来保持数据发送端和接收端的时钟同步。

因此,在数据传输时总线上电平的跳变必须有足够的频率。根据NRZI编码规定,如果发送端要连续发送一串逻辑二进制“1”,则在这期间总线上电平会一直保持不变,通信双方的时钟可能会失步

针对这种可能出现的情况,USB规定了比特填充(Bit Stuffing)机制。在数据进行NRZI编码之前,当数据发送端在连续发送6个逻辑“1”后,它自动插入一个逻辑“0”。这样,总线上的电平至少每6个比特时间就能跳变一次。

与之对应,在数据接收端也有一个自动识别被插入的“0”并将其舍弃的机制。如果接收端发现有连续7个逻辑“1”,则认为是一个比特填充错误。它将丢弃整个数据包,并等待发送端重新发送数据

一个图例如下:

可以发现,SYNC信号在逻辑上其实是“10000000B”(同步块),数据以00000001的顺序在总线上发送。经过比特填充和NRZI编码后变为总线上的“KJKJKJKK”信号。

 

八、USB体系结构

一个USB系统定义由USB主机USB设备USB互连3个部分组成。

USB互连是指USB设备与主机之间进行连接和通信的操作,它包括总线拓扑结构、通信各层的任务和相互关系、数据流模型,以及主机与多路USB设备通信时的带宽分配等内容。

 

九、USB总线拓扑结构

数据和控制信号在主机和USB设备间的交换存在两种管道:单向和双向。

USB的数据传输是在主机软件和一个USB设备的指定端口之间。这种主机软件和USB设备的端口间的联系称作管道。总的来说,各管道之间的数据流动是相互独立的。一个指定的USB设备可有许多管道。例如,一个USB设备存在一个端口,可建立一个向其他USB设备的端口发送数据的管道,也可建立一个从其他USB设备的端口接收数据的管道。

十、USB主机

在一个USB系统中只有一台主机。主机的USB接口称为USB控制器,通过它主机和外围USB设备进行通信。USB主机是一台带有USB接口的普通计算机,它是USB系统的核心。在设计中USB控制器都必须提供基本相同的功能。控制器对主机及设备来讲须满足一定要求。

控制其主要功能:

1. 帧产生

2. 传输差错控制

3. 状态处理

4. 串行/并行数据转换

5. 数据处理

 

从用户的角度看,USB主机所具有的功能包括检测USB设备的插入和拔出,管理主机与设备之间的数据流,对设备进行必要的控制,收集各种状态信息以及对插入的设备供电。这些功能都由主机上客户软件和USB系统软件来实现。

客户软件和与其对应的USB设备进行通信,实现各个USB设备的特殊功能应用。

系统软件对USB设备和客户软件之间的通信进行管理,并完成USB系统中一些共同的工作。

十一、USB设备

1.  USB集线器

2.  USB功能设备

发送数据到主机,也可以接收来自主机的数据和控制信息。

像:USB鼠标、键盘、数字游戏杆、扬声器和打印机等

 

 

十二、USB协议层

包字段格式

一个USB包一般由多个字段构成,如图所示。

 1. 同步字段

¡  所有包的开头都有一个同步字段SYNC,它在总线上由“KJKJKJKK”信号组成。其中,对于低速设备K=0,J=1,对于全速设备而言恰好相反(K=1,J=0)。SYNC信号的作用通过前6个交替的K和J使数据发送方和接收方的时钟保持同步。最后的两个K表示SYNC的结束和PID的开始。这里必须指出,USB串行数据发送到总线的时候,首先发送最低有效位D0,最后发送最高有效位D7。在以后的图表中,包中单个的位和字段从左到右的顺序就是它们通过总线的顺序。

2. 包标志符字段

¡  所有USB包的同步字段后都紧跟着包标志符(PID)。如图18.14所示,包标志符由4位包类型字段PID0~PID3和其后的4位校验字段PID0~PID3构成。

¡  包标志符指出了包的类型,并由此隐含地指出了包的格式和包上所用错误检测的类型。包标志符的4位校验字段可以保证包标志符译码的可靠性。包标志符的校验字段通过对包类型字段的二进制求反码产生。













====================补canCAN总线协议原理特点

http://wenku.baidu.com/link?url=1NAwU41xxhIP1i2N8oWomwonckUqu-bHjzQ1Dw1PJEy6On32U4M_a6E0gN7uZl0bUL50QDTx2zOJsQUYNDxX1_ap7g4tcE-pccBlrs6zY_e


转:CAN总线工作原理

CAN是控制器局域网络(Controller Area Network, CAN)的简称。CAN总线有两条信号线构成,分别是CANL和CANH。相比于RS485总线构成的网络,CAN总线构成的网络更有优势。
CAN的报文格式
    在总线中传送的报文,每帧由7部分组成。CAN协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位,扩展格式为29位。
    在标准格式中,报文的起始位称为帧起始(SOF),然后是由11位标识符和远程发送请求位 (RTR)组成的仲裁场。RTR位标明是数据帧还是请求帧,在请求帧中没有数据字节。
    控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (ro),为将来扩展使用。它的最后四个位用来指明数据场中数据的长度(DLC)。数据场范围为0~8个字节,其后有一个检测数据错误的循环冗余检查(CRC)。
    应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑1),这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。
    报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。

   

如上图所示,帧格式包括扩展帧和标准帧两种。帧类型包括数据帧和远程帧。数据部分最大长度共8个字节。在编程时,如下的数据结构可以用来描述一个CAN消息:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. typedef struct   
  2. {  
  3.     uint32_t id;            /**< 29 bit identifier, it depend on "format" value 
  4.                                  - if format = STD_ID_FORMAT, id should be 11 bit identifier 
  5.                                  - if format = EXT_ID_FORMAT, id should be 29 bit identifier 
  6.                              */  
  7.     uint8_t dataA[4];       /**< Data field A */  
  8.     uint8_t dataB[4];       /**< Data field B */  
  9.     uint8_t len;            /**< Length of data field in bytes, should be: 
  10.                                  - 0000b-0111b: 0-7 bytes 
  11.                                  - 1xxxb: 8 bytes 
  12.                             */  
  13.     uint8_t format;         /**< Identifier Format, should be: 
  14.                                  - STD_ID_FORMAT: Standard ID - 11 bit format 
  15.                                  - EXT_ID_FORMAT: Extended ID - 29 bit format 
  16.                             */  
  17.     uint8_t type;           /**< Remote Frame transmission, should be: 
  18.                                  - DATA_FRAME: the number of data bytes called out by the DLC 
  19.                                  field are send from the CANxTDA and CANxTDB registers 
  20.                                  - REMOTE_FRAME: Remote Frame is sent 
  21.                             */  
  22. } CAN_MSG_Type;  


另外,还有如下图所示的参数可以进行设置。如CAN总线的波特率,工作模式,过滤器里的内容等。








0 0
原创粉丝点击