IIC、UART、SPI、LIN、CAN通信接口
IIC:
1、I2C总线是PHLIPS公司在20世纪80年代推出的一种串行总线。
2、PHILIPS公司开发用于连接微控制器及其外围设备
3、一条是串行数据线SDA,一条是串行时钟线SCL
4、支持多个通讯主机和多个通讯从机,但是任意时间点上只能存在一个主控
5、半双工串行异步通信接口,
6、连接到总线的IC数量只是受到总线的最大负载电容400pf限制
7、每个连接到总线的器件都可以通过唯一的地址和其它器件通信
8、空闲状态时,SDA和SCL处于高电平
9、串行的 8 位双向数据传输位速率在标准模式下可达100kbit/s
快速模式下可达400kbit/s
高速 模式下可达3.4Mbit/s
协议:
1. 起始信号
2. 终止信号
3. 写数据信号
4. 读数据信号
5. 应答信号
6. 非应答信号
通信过程以AT24Cxx系列为例:
写的过程:
1、发送起始信号;
2、发送从设备地址 7 位,写信号 1 位,等待应答;
3、发送待写入数据的存储地址,等待应答;
4. 发送数据给从设备,等待应答;
5、最后发送停止信号。
读的过程:
1、发送起始信号;
2、发送从设备地址 7 位,写信号 1 位,等待 应答;
3、发送待读取数据的存储地址,等待应答;
4、再发送一个起始信号;
5、发送从设备地址 7 位,读信号一位,等待应答;
6、读去数据,8 个时钟,从设备就把对应的数据反馈给处理器;
7、最后发送停止信号。
UART:
1、通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UATR
2、串行数据总线,用于异步通信,全双工通信,采用TTL/COMS电平
UART控制器中包含四种寄存器:
输出缓存寄存器、输出移位寄存器、输入缓存寄存器、输入移位寄存器。
1、输出缓存寄存器:该寄存器用来存放处理传输过来的并行数据。
2、输出移位寄存器:读取输出缓存寄存器中的值,将并行数据串行输出,LSB先传输。
3、输入移位寄存器:接收对方UART接口传输的串行数据,一帧数据接收完毕后,将把数据传输给输入缓存寄存器。
4、输入缓存寄存器:保存从输入移位寄存器传递过来的串行数据。
UART接口数据线:
1、RX:接收数据
2、TX:发送数据
3、GND:数字地
4、VCC:直流电源
数据格式:
UART作为异步传输接口,接口不需要共用同一个时钟,只需通讯双方在传输过程中的时钟频率大小保持一致。
数据帧包括:起始位、数据位、奇偶校验位、停止位。
1、起始位:表明将要发送数据,起始位为低电平“0”。
2、数据位:数据位可以是5 bits、6 bits、7 bits或者8 bits等,常用为8 bits(ASCII码)。
3、奇偶校验位:用于表示所传输的数据位中1的个数,奇数个1则为1,偶数个1则为0。
4、停止位:表明数据传输结束,停止位为高电平“1”。
空闲状态:
当UART未发送数据时,数据线TX、RX状态为高电平“1”。
波特率:
每秒钟传输的数据位,此时可以等同于比特率。常用的UART波特率为:9600、115200。
SPI:
1、SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。Motorola首先在其MC68HCXX系列处理器上定义的
2、SPI,是一种高速的,全双工,同步的通信总线,
3、是一种最常见的板内芯片间的串行接口
4、SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
采用主-从模式(Master-Slave) 的控制方式
SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave).
一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备,
SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备,
Slave 设备本身不能产生或控制 Clock, 没有 Clock 则 Slave 设备不能正常工作
SPI接口一般使用4条线通信:
1、MISO 主设备数据输入,从设备数据输出。
2、MOSI 主设备数据输出,从设备数据输入。
3、SCLK时钟信号,由主设备产生。
4、CS从设备片选信号,由主设备控制。
SPI工作原理总结
1、硬件上为4根线。
2、主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。
3、串行移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。
这样,两个移位寄存器中的内容就被交换。
4、外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;
反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。
SPI传输模式:
通过设置控制寄存器SPICR1中的时钟极性 (CPOL)和时钟相位 (CPHA)位,
控制着两个 SPI 设备间何时数据交换以及何时对接收到的数据进行采样,
来保证数据在两个设备之间是同步传输的
同时将SPI可以分成四种传输模式
LIN:
1、LIN(Local Interconnect Network)总线是基于UART/SCI(通用异步收发器/串行接口)的低成本串行通讯协议。
2、其目标定位于车身网络模块节点间的低端通信,主要用于智能传感器和执行器的串行通信,
3、而这正是CAN总线的带宽和功能所不要求的部分。
4、LIN总线采用的是单线传输形式,应用了单主机多从机的概念,总线电平一般为12V,传输速率最高限制为20kbps。
5、网络由一个主节点与若干个从节点构成。由于物理层的限制,一个LIN网络最多可以连接16个节点,否则网络阻抗降低,影响通信。
6、由于LIN网络在汽车中一般不独立存在,通常会与上层CAN网络相连,形成CAN-LIN网关节点。
电平逻辑:
显性电平 0(地)
隐性电平 1(12V)
LIN通信协议:
一个LIN信息帧有同步间隔、同步域、标示符域(受保护ID域)、数据域、校验码域以及响应间隔构成。
除起始域与响应间隔,其他部分都是以字节为单位传送,每个字节都有自己的格式,称之为字节域(ByteField)。
字节之间有字节间隔(InterByteSpace),在头信息和响应之间有一个响应间隔(ResponseSpace),这两个间隔的最小值为0。
帧的结构:
帧包括帧头和应答两部分,主机发送帧头,从机接收帧头并解析内容,然后确认发送应答或者是接收应答还是不做处理。
帧头包括同步间隔断、同步段、受保护PID段;应答包括数据段和校验和段
1、同步间隔域(Break Field)
同步间隔域由同步间隔(Break)和同步间隔域间隔符(Break Delimiter) 构成。
同步间隔至少持续13位的显性电平。从机检测到总线上出现持续11位的显性电平则认为是帧开始!
其中同步间隔段的间隔符至少为1位隐性电
2、同步域(Sync Byte Field)
字节域(Byte Field):1位起始位(Start Bit显性)+8位数据位+1位停止位(Stop Bit隐性),是一种标准UART数据传输格式,一般为0x55
3、受保护ID域(Protected Identifier Field)
受保护ID 段的前6位叫作帧ID(Frame ID),加上两个奇偶校验位后称作受保护ID 。
P0 = ID0 ⊕ID1 ⊕ID2 ⊕ID4
P1 = ~(ID1 ⊕ID3 ⊕ID4 ⊕ID5)
数据域长度(字节数)由标示符域的ID4、ID5决定。
4、数据域
数据段包含1-8个字节,先发送编号最低的字节,编号依次增加。
5、校验码域
检验和段是对帧中所传内容进行校验
检验和分为标准型和增强型,标准型只需要校验数据段,而增强型需要校验PID和数据段
检验方法是将检验对象的各个字节进行带进位二进制加法,当结果大于0xFF时,结果减去0xFF,并将最终结果取反。
接收方对接收数据进行相同操作,结果不取反,然后和接收到的校验和相加,如果相加等于0xFF则校验无误。
CAN:
1、CAN是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。
2、CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。
3、其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准,而ISO11519-2是针对通信速率为125Kbps以下的低速通信标准。
4、、CAN具有很高的可靠性,广泛应用于:汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。
CAN协议的特点:
1、多主控制。总线空闲时,所有单元都可发送消息,而两个以上的单元同时开始发送消息时,根据标识符(ID,非地址)决定优先级;
2、系统柔软性。连接总线的单元,没有类似“地址”的信息,因此,在总线上添加单元时,已连接的其他单元的软硬件和应用层都不需要做改变。
3、速度快,距离远。最高1Mbps(距离<40M),最远可达10KM(速率<5Kbps)。
4、具有错误检测、错误通知和错误恢复功能
5、故障封闭功能。CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。
6、连接节点多。CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。
降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。
物理层特征:
1、CAN 控制器根据CAN_L和CAN_H上的电位差来判断总线电平。
2、总线电平分为显性电平和隐性电平,二者必居其一。
3、显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。
4、CAN总线的起止端都有一个120Ω的终端电阻,来做阻抗匹配,以减少回波反射
显性电平对应逻辑:0
CAN_H和CAN_L之差为2V左右。
隐性电平对应逻辑:1
CAN_H和CAN_L之差为0V。
CAN通信是以以下5种类型的帧进行的:
1、数据帧:用于发送单元向接收单元传送数据的帧
2、遥控帧:用于接收单元向具有相同 ID 的发送单元请求数据的帧
3、错误帧:用于当检测出错误时向其它单元通知错误的帧
4、过载帧:用于接收单元通知其尚未做好接收准备的帧
5、间隔帧:用于将数据帧及遥控帧与前面的帧分离开来的帧
其中,数据帧和遥控帧有标准格式和扩展格式两种格式。
标准格式有11 个位的标识符(ID),扩展格式有29 个位的ID 。
数据帧由7个段组成:
1、帧起始:表示数据帧开始的段。
2、仲裁段:表示该帧优先级的段。
3、控制段:表示数据的字节数及保留位的段。
4、数据段:数据的内容,一帧可发送0~8个字节的数据。
5、CRC段:检查帧的传输错误的段。
6、ACK段:表示确认正常接收的段。
7、帧结束:表示数据帧结束的段。
基本ID,禁止高7位都为隐性,即不能:ID=1111111XXXX。
CRC的值计算范围包括:帧起始、仲裁段、控制段、数据段。
发送单元ACK段:发送2个隐性位。
接收单元ACK段:接收到正确消息的单元,在ACK槽发送显性位,通知发送单元,正常接收结束。称之为发送ACK/返回ACK。
总线仲裁:
1、总线空闲时,最先发送的单元获得发送优先权,一但发送,其他单元无法抢占。
2、如果有多个单元同时发送,则连续输出显性电平多的单元,具有较高优先级。
3、从ID开始比较,如果ID相同,还可能会比较RTR和SRR等位
位速率:由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位一般可以分为如下四段:
1、同步段(SS)
2、传播时间段(PTS)
3、相位缓冲段1(PBS1)
4、相位缓冲段2(PBS2)
标识符筛选器:
1、CAN的标识符不表示目的地址而是表示发送优先级。接收节点根据标识符的值,来决定是否接收对应消息。
2、筛选器可配置为:屏蔽位模式和标识符列表模式。
2.1、在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。
2.2、在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。
接收报文标识符的每一位都必须跟筛选器标识符相同。
3、为了过滤出一组标识符,应该设置筛选器组工作在屏蔽位模式。
4、为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。
例:设置筛选器组0工作在:1个32位筛选器-标识符屏蔽模式,然后设置CAN_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00。
其中存放到CAN_F0R1的值就是期望收到的ID,即(STID+EXTID+IDE+RTR)最好是:0XFFFF0000。
而0XFF00FF00就是设置我们需要必须关心的ID,表示收到的映像,其位[31:24]和位[15:8]这16个位的必须和CAN_F0R1中对应的位一模一样,
而另外的16个位则不关心,可以一样,也可以不一样,都认为是正确的ID,即收到的映像必须是0XFFxx00xx,才算是正确的(x表示不关心)。