总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

自己学习工作笔记,有些乱,勿怪

1、spi

SPI(Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,在很多器件中被广泛应用。

SPI接口经常被称为4线串行总线,以主/从方式工作,数据传输过程由主机初始化。如图1所示,其使用的4条信号线分别为:

1) SCLK:串行时钟,用来同步数据传输,由主机输出;

2) MOSI:主机输出从机输入数据线,通常先传输MSB;

3) MISO:主机输入从机输出数据线,通常先传输LSB;

4) SS:片选线,低电平有效,由主机输出。

在SPI总线上,某一时刻可以出现多个从机,但只能存在一个主机,主机通过片选线来确定要通信的从机。这就要求从机的MISO口具有三态特性,使得该口线在器件未被选通时表现为高阻抗。

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

图1,spi接口线

2、数据传输

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

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

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

这是通过移位寄存器来实现的。如图2所示,主机和从机各有一个移位寄存器,且二者连接成环。随着时钟脉冲,数据按照从高位到低位的方式依次移出主机寄存器和从机寄存器,并且依次移入从机寄存器和主机寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

图2、spi数据传输的实现

3、时钟极性和时钟相位

SPI由于接口相对简单(只需要4根线),用途算是比较广泛,主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。即一个SPI的Master通过SPI与一个从设备,即上述的那些Flash,ADC等,进行通讯。而主从设备之间通过SPI进行通讯,首先要保证两者之间时钟SCLK要一致,互相要商量好了,要匹配,否则,就没法正常通讯了,即保证时序上的一致才可正常讯。而这里的SPI中的时钟和相位,指的就是SCLk时钟的特性,即保证主从设备两者的时钟的特性一致了,以保证两者可以正常实现SPI通讯。

SPI的极性Polarity和相位Phase,最常见的写法是CPOL和CPHA,不过也有一些其他写法,简单总结如下:
(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity = (时钟)极性
(2) CKPHA (Clock Phase) = CPHA = PHA = Phase =(时钟)相位
(3) SCK=SCLK=SPI的时钟
(4) Edge=边沿,即时钟电平变化的时刻,即上升沿(rising edge)或者下降沿(falling edge)
对于一个时钟周期内,有两个edge,分别称为:
(1)Leadingedge=前一个边沿=第一个边沿,对于开始电压是1,那么就是1变成0的时候,对于开始电压是0,那么就是0变成1的时候;
(2)Trailingedge=后一个边沿=第二个边沿,对于开始电压是1,那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),对于开始电压是0,那么就是1变成0的时候;
本博文采用如下用法:

  1. 极性=CPOL
  2. 相位=CPHA
  3. SCLK=时钟
  4. 第一个边沿和第二个边沿

CPOL和CPHA,分别都可以是0或时1,对应的四种组合就是

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

CPOL极性

先说什么是SCLK时钟的空闲时刻,其就是当SCLK在发送8个bit比特数据之前和之后的状态,于此对应的,SCLK在发送数据的时候,就是正常的工作的时候,有效active的时刻了。其英文精简解释为:ClockPolarity = IDLE state of SCK。
SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:
CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;
CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

从上图中可以看出,(CPOL=0)的SCK 波形,它有(传输)8个脉冲,而在脉冲传输前和完成后都保持在【低电平状态】。此时的状态就是时钟的空闲状态或无效状态,因为此时没有脉冲,也就不会有数据传输。同理得出,(CPOL=)1的图,时钟的空闲状态或无效状态时SCK 是保持【高电平的】。
CPHA相位

首先说明一点,capture strobe = latch= read =sample,都是表示数据采样,数据有效的时刻。相位,对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿。
对于:
CPHA=0,表示第一个边沿:
对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;
CPHA=1,表示第二个边沿:
对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;
对于CPOL=1,idle时候的是高电平,第二个边沿就是从低变到高,所以是上升沿;

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

我们看上面的图,发现数据 SI 是对应 SCK的第一个时钟沿,再仔细看,数据是在SCK的第一个时钟边沿保持稳定【数据被采样捕获】,在下一个边沿改变【SCK的下降沿数据改变】因此我们得出结论:该系列FLASH 是【数据在第一个时钟沿被采样捕获】或【数据在SPCK 起始边沿捕获,在SPCK下一个边沿改变】

如何判断CPOL和CPHA

如果起始的SCLK的电平是0,那么CPOL=0,如果是1,那么CPOL=1,然后看数据采样时刻,即时序图数据线上的数据那个矩形区域的中间所对应的位置,对应到上面SCLK时钟的位置,对应着是第一个边沿或是第二个边沿,即CPHA是0或1。(对应的是上升沿还是还是下降沿,要根据对应的CPOL的值,才能确定)。

(1)如何判断CPOL:SCLK的空闲时候的电压,是0还是1,决定了CPOL是0还是1;
(2)如何判断CPHA:而数据采样时刻对应着的SCLK的电平,是第一个边沿还是第二个边沿,对应着CPHA为0还是1。

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

SCLK的极性,相位,边沿之间的内在逻辑

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

1、LSB的意思是:全称为Least Significant Bit,在二进制数中意为最低有效位,一般来说,MSB位于二进制数的最左侧,LSB位于二进制数的最右侧。

2、MSB的意思是:全称为Most Significant Bit,在二进制数中属于最高有效位,MSB是最高加权位,与十进制数字中最左边的一位类似。

优缺点
SPI接口具有如下优点:
1) 支持全双工操作;
2) 操作简单;
3) 数据传输速率较高。
同时,它也具有如下缺点:
1) 需要占用主机较多的口线(每个从机都需要一根片选线);
2) 只支持单个主机。

2、I2C

接口

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

I2C接口包括时钟线(SCL)和数据线(SDA)。这两条线都是漏极开路或者集电极开路结构,使用时需要外加上拉电阻,可以挂载多个设备。每个设备都有自己的地址,主机通过不同地址来选中不同的设备。iic是半双工。

2、一般操作

1)主机给从机发数据

发送开始条件START和从机地址;

发送数据;

发送停止条件STOP结束。

2)主机从从机读取数据

发送开始条件START和从机地址;

发送要读取的地址;

读取数据;

发送停止条件STOP结束。

2.1开始和结束条件

当SCL保持高电平期间,SDA从高电平跳变到低电平,即为开始条件START。当SCL保持高电平期间,SDA从低电平跳变到高电平,即为结束条件STOP。

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

2.2 重复的起始条件
与起始条件的区别是,它出现在结束条件STOP之前。例如读取数据时,发送START、从机地址、要读取的地址后,不需要发送STOP,而可以发送重复起始条件和从机地址,开始数据读取。

2.3 ACK和NACK
数据传输时先传MSB。接收者在每个字节后的第9个时钟周期将SDA保持低电平进行确认数据接收成功;而在第9个时钟周期将SDA保持高电平表示数据传输出错,或者主机不再想接收数据。

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

byte:10101010(oxaa)

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

ACK:Acknowledgement,它是一种正向反馈,接收方收到数据后回复消息告知发送方。

NACK:Negative Acknowledgement,则是一种负向反馈,接收方只有在没有收到数据的时候才通知发送方。

REX:Retransmission,重传,当发送方得知数据丢失后,重新发送一份数据。

数据读写
1)写数据

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

2)读数据

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

  1. 优缺点
    1)优点
    只使用两条信号线;
    支持多主机多从机;
    有应答机制。
    2)缺点
    速率比SPI慢。

3. UART

UART是一种异步传输接口,不需要时钟线,通过起始位和停止位及波特率进行数据识别。

  1. 接口
    UART仅使用两条线TXD和RXD用于数据的发和收。
总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

2.数据格式

1)起始位

数据线空闲状态为高电平,要发送数据时将其拉低一个时钟周期表示起始位。

2)数据位

使用校验位时,数据位可以有5~8位;如果不使用校验位,数据位可以达9位。

3)校验位

奇偶校验,保证包括校验位和数据位在内的所有位中1的个数为奇数或偶数。

4)停止位

为了表示数据包的结束,发送端需要将信号线从低电平变为高电平,并至少保持2个时钟周期。

3.优缺点
1)优点
只使用两条信号线;
不需要时钟信号;
有校验位进行错误检测;
2)缺点
传输速率比较低。

4. CAN

总结嵌入式的SPI、I2C、UART、CAN、RS485、232、等

CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。最初,CAN被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入CAN控制装置。

一个由CAN总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件的电气特性所限制。例如,当使用Philips P82C250作为CAN收发器时,同一网络中允许挂接110个节点。CAN 可提供高达1Mbit/s的数据传输速率,这使实时控制变得非常容易。另外,硬件的错误检定特性也增强了CAN的抗电磁干扰能力。

CAN总线的特点:

1)可以多主方式工作,网络上任意一个节点均可以在任意时刻主动地向网络上的其他节点发送信息,而不分主从,通信方式灵活。

2)网络上的节点可分成不同的优先级,可以满足不同的实时要求。

3)采用非破坏性位仲裁总线结构机制,当两个节点同时向网络上传送信息时,优先级低的节点主动停止数据发送,而优先级高的节点可不受影响地继续传送数据。

4)可以点对点,一点对多点及全局广播几种传送方式接收数据。

5)直接通信距离最远可达10km(速率4Kbps以下)。

6)通信速率最高可达1MB/s(此时距离最长40m)。二、对比

SPI 和I2C这两种通信方式都是短距离的,芯片和芯片之间或者其他元器件如传感器和芯片之间的通信。SPI和IIC是板上通信,IIC有时也会做板间通信,不过距离甚短,不过超过一米,例如一些触摸屏,手机液晶屏那些薄膜排线很多用IIC,I2C能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存这两种线属于低速传输。

而UART是应用于两个设备之间的通信,如用单片机做好的设备和计算机的通信。这样的通信可以做长距离的。UART速度比上面两者者快,最高达100K左右,用与计算机与设备或者计算机和计算之间通信,但有效范围不会很长,约10米左右,UART优点是支持面广,程序设计结构很简单,随着USB的发展,UART也逐渐走向下坡。

CAN 通讯距离最大是10 公里(设速率为5Kbps),或最大通信速率为1Mbps(设通信距离为40 米)。

CAN 总线上的节点数可达110 个。通信介质可在双绞线,同轴电缆,光纤中选择。

CAN 采用非破坏性的总线仲裁技术,当多个节点同时发送数据时,优先级低的节点会主动退出发送,高优先级的节点可继续发送,节省总线仲裁时间。

CAN 是多主方式工作,网上的任一节点均可在任意时刻主动地向网络上其他节点发送信息。

CAN 采用报文识别符识别网络上的节点,从而把节点分成不同的优先级,高优先级的节点享有传送报文的优先权。报文是短帧结构,短的传送时间使其受干扰概率低,CAN 有很好的效验机制,这些都保证了CAN 通信的可靠性。

5、RS232/485

1.对于软件来说,485通信和串口通信是一回事,都是操作串口。这两者只是硬件上的区别而已,跟软件没关系的。所谓的485通信,只是在串口上加了一个转换器而已。


2.RS485与RS232的区别其实并不大,转输方式是一样的。

区别在于:RS485是差分(差分信号)传输,RS232是非差分(同分信号)传输的。

因此,RS485传输信号扰干扰能力强于RS232,故传输距离较RS232远。

就编程上来看,与RS232并没有区别。对于计算机来说如果在232串口上进行485通讯的话,要加入一个RS232/RS485转换模块才行。


3.一般的485卡,实际上是一个RS-232接口卡,不过该RS-232接口卡,直接带有RS-232电平转RS-485电平功能。

PC机主板上,一般有Com1和Com2,插上485卡后,就会有Com3、Com4……。

所以编程完全和Com1Com2一样。


4.485是半双工通信,为什么用485?

因为232只能是点对点,而485可以一对多(一主多从),还有485用的电流环方式,搞干扰强,传输距离远(232是电压型信号,一般10来米就差不多了,485理论上可以到1000米,不过我实际上最好不要超过600米,速率在9600以下)。232最少是3线,收发地,485是2线方式(所谓A/B线)。


5.物理接口和通信协议是两回事,虽有些协议要一定的物理接口支持,比如工业上常用的MODBUS/HART等,可以在232/485上用,也可以在TCP/IP接口上运用。


6.台式机的串口都是RS232的,232和485的串口用针脚来定义的话有两种,一种是9针的,一种是25针的,232和485的差别是两个通讯距离的差别,232的串口界面只能支持15米的范围,485可以拓展到1200米。

展开阅读全文

页面更新:2024-05-13

标签:电平   相位   边沿   优先级   节点   数据传输   速率   总线   时钟   嵌入式   接口   条件   主机   通信   数据   设备   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top