2022-10-12 21:11 编辑:xiaofeng 点击: 次 A+
参考博客
https://blog.csdn.net/xiaodingqq/article/details/80342459
https://blog.csdn.net/weiqifa0/article/details/8845281
https://www.zhihu.com/question/22632011
https://blog.csdn.net/zhuyongxin_6688/article/details/78001767(有图,件)
https://blog.csdn.net/Setul/article/details/78968242
目录
一、名字
二、UART、SPI、I2C对比
三、串行外设接口:SPI
1、速览点
2、数据传输
3、spi读写
四、IC之间总线:I2C
1、速览点
2、详细介绍
3、时序
4、代码
五、通用异步收发器:UART
1、速览点
2、通信协议
3、详细介绍
4、代码学习
六、心得体会
1、通信接口分为物理层(硬件)和协议层
2、关于总线的选择问题
七、UART和RS232的联系和区别
1、RS232
2、UART
3、TTL和RS232
4、嵌入式常用串口实物图
UART、SPI、I2C对比表格 对比项 UART SPI I2C 信号线数目 3根,RX、TX、GND 4根,SDO、SDI、SCLK、SS 2根,SDA、SCLK 设备从属关系 —— 存在主从设备。SPI用片选信号选择从机 存在主从设备。IIC用地址选择从机。 通信方式 全双工通信 全双工通信 半双工通信 通信速率 速度慢 比I2C总线要快,速度可达到几Mbps I2C的速度比SPI慢 应用领域
1、UART常用于控制计算机与串行设备的芯片
2、就是我们经常所说的串口,基本都用于调试。
主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间 I2C一般是用在同一个板子上的2个IC之间的通信 ,它可以替代标准的并行总线,连接各种集成电路和功能模块。 传输距离 I2C需要有双向IO的支持,而且使用上拉电阻,抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信 通信特征 异步,一帧可以传5/6/7/8位 同步,SPI允许数据一位一位的传送,甚至允许暂停。从最高位开始传。 同步,电平信号,一次连续8bit。从最高位开始传 协议复杂度 结构比较复杂 SPI实现要比UART简单,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。 协议比SPI复杂,但是连线比标准的SPI要少 对比
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。
在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。

(1)四条信号线:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)、片选线(SS)。(所谓的进出,是针对信号进出主机而言)
(2)SPI总线可以实现多SPI设备互相连接。提供时钟的SPI设备为主设备(Master),其他设备为从设备(Slave)。SCLK信号线只由主设备控制,从设备不能控制信号线。
(3)在SPI总线上,某一时刻可以出现多个从机,但只能存在一个主机。主机通过片选线来确定要通信的从机。这就要求从机的MISO口具有三态特性,使得该口线在器件未被选通时表现为高阻抗。
(4)主从设备间可以实现全双工通信,收发独立,操作简单,数据传输速率较高,但需要占用主机较多的口线(每个从机都需要一根片选线),而且只支持单个主机,没有指定的流控制,没有应答机制确认是否接收到数据。
(5)数据输出通过SDO线,数据在时钟上沿或下沿时改变(即发送),在紧接着的下沿或上沿被读取,从而完成一位数据传输。数据输入也使用同样原理。因此,8位数据的传输,至少需要8次时钟信号的改变(上沿和下沿为一次)。
(6)普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。
(7)SPI接口在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前(先传?),低位在后,为全双工通信。
(1)SPI在数据传输的时候,需要确定两件事情:
其一,数据是在时钟的上升沿采集还是下降沿采集;其二,时钟的初始(空闲)状态是为高电平还是低电平。对比:I2C空闲状态时,时钟线(不是数据线?)为高电平,数据采集时,时钟线也为高电平,但SPI给出了更自由的方式。(2)两个概念
CPOL:时钟极性,表示SPI在空闲时,时钟信号是高电平还是低电平。
CPHA:时钟相位,表示SPI设备是在在时钟的上升沿采集还是下降沿采集。
则SPI数据传输就有四种可能---按照标准的说法,SPI数据传输就有四种模式。
(3)四种模式
模式 CPOL CPHA 0 0 0 1 0 1 2 1 0 3 1 1
模式0(杠cs表示片选信号)

模式1

模式2

模式3

(1)SPI在硬件设计上采用的双数据线制,根据设计,在SPI通信过程中,主从设备之间会形成一个数据环形链路——即主设备向从设备写一次数据,从设备就会回一次数据(至于从设备回复的数据是否有效,则另当别论——如果有效,主设备就把它读入,否则丢弃)

(2)例子:假设上升沿发送、下降沿接收、高位先发送。
假设主机8位寄存器装的是待发送的数据10101010
那么第一个上升沿时,数据将会是SDO=1,寄存器=0101010x
下降沿到来的时候,SDI上的电平将存到主机的寄存器中的最低位(最右边),SDO上的电平将存到从机的寄存器的最低位(最右边),则此时主机寄存器=0101010SDI(SDI表示1bit),从机寄存器=1010101SDO。
这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次,这样就完成里一个spi时序。
假定主机和从机初始化就绪,并且主机的sbuff=0xaa=0b1010 1010,从机的sbuff=0x55=0b0101 0101
下面将分步对SPI的8个时钟周期的数据情况演示一遍


(1)上表示上升沿、下表示下降沿,SDI、SDO相对于主机而言的。
(2)ss引脚作为主机时,从机可以把它拉低,被动选为从机;作为从机时,可以作为片选脚用。
(3)根据以上分析,一个完整的传送周期是16位。因为主机首先要发送命令过去,然后从机准备数据,主机在下一个8位时钟周期才把数据读回来。

(1)由图可知
由两条信号线组成:串行数据线(SDA)、串行时钟线(SCL)。由1,2箭头指示可知,I2C器件内部采用开漏的方法,总线被上拉。那么总线状态只能被下拉为0(当MOS管输入0的时候)。只要有一方下拉了总线,总线状态必定为0。(2)任何一个设备都能像主控器一样工作,并控制总线,但同一时刻只能有一个主控设备。
(3)总线上的每一个设备都有一个独一无二的地址,根据设备的能力,作为发射器或接收器工作。
(4)在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
(5)连接到相同总线的IC 数量只受到总线的最大电容限制。
(6)SDA传输数据是大端传输(高位先传,低位后传?),是以字节为单位的。
https://blog.csdn.net/oqqHuTu12345678/article/details/72356722
https://blog.csdn.net/oqqHuTu12345678/article/details/72356722
https://blog.csdn.net/Mr_Lyoko/article/details/79598106
https://blog.csdn.net/oqqHuTu12345678/article/details/72358553

(1)UART由波特率产生器、UART接收器、UART发送器组成。
(2)由三条信号线组成:RX、TX、GND
(3)UART包括RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范。它们的主要区别在于其各自的电平范围不相同。 嵌入式设备中常常使用到的是TTL、TTL转RS232的这种方式。

(1)起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。
(2)数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。
(3)奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。
(4)停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。
(5)空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。
(6)波特率:数据传输的速率。有以下几个档位:300、600、1200、2400、4800、9600、19200、38400、43000、56000、57600、115200。在数据传输和接收双方,需要预先统一波特率,以便正确的传输数据。
https://blog.csdn.net/oqqHuTu12345678/article/details/71597893
https://blog.csdn.net/oqqHuTu12345678/article/details/71597575
https://blog.csdn.net/xiaodingqq/article/details/80342459
https://blog.csdn.net/oqqHuTu12345678/article/details/71601785
(1)物理层(硬件):如UART,PC和单片机通信,PC机的串口是232电平而单片机的串口是TTL电平,两个设备之间通信如果电平不一致就相当于语言不通,造成逻辑混乱。因此一般的单片机系统板上都会有一个串口模块电路(串口控制器)用来进行电平转换,将PC机的232电平转化成单片机能识别的232电平,常用芯片如PL2303、CH340。
(2)协议层:就相当于规定了一个标准或规则,比如SPI协议中,主机向从机发出一个数据,从机接收到后会发出应答信号,这就是协议规定的内容,不需要人为干预。当然有的单片机没有这些协议的控制器(硬件),如51单片机和24c02通信,需要模拟IIC协议,用软件来实现硬件的功能,这就增加了软件的复杂度。
(1)SPI总线有4根线,分别是SCK,SDO,SDI,SS,可以挂多个从设备,但是在挂多个从设备时,主设备端还需要做一个n选一的译码器,用于选择将要访问的从设备,因此,主设备上的管脚需求比较多。SPI总线在只有一个从设备时,只要用到SCK,SDO,SDI这三根线,此时选择SPI比I2C总线占优。
(2)I2C总线只有两根线,SCL,SDA.,也可以挂多个从设备,对从设备的选择直接依靠协议完成,无需增加物理连线。一般情况下,当一块电路板上有多个从设备时,往往选用I2C而非SPI,因为SPI增加了额外额硬件开销以及电路板走线。
(3)I2C和SPI总线一般是读取一些PROM等从设备用。 而串行通信接口SCI(UART?),主要应用在两个智能设备之间的互相通讯。有别于SPI和I2C总线的主从模式,SCI可以是主-主模式。
-----另一种说法
(1)总线拓扑结构/信号路由/硬件资源耗费
IIC 只需两根信号线,而标准SPI至少四根信号,如果有多个从设备,信号需要更多。一些SPI变种虽然只使用三根线——SCLK, SS和双向的MISO/MOSI,但SS线还是要和从设备一对一根。另外,如果SPI要实现多主设备结构,总线系统需额外的逻辑和线路。用IIC 构建系统总线唯一的问题是有限的7位地址空间,但这个问题新标准已经解决——使用10位地址。从第一点上看,IIC是明显的大赢家。
(2)数据吞吐/传输速度
如果应用中必须使用高速数据传输,那么SPI是必然的选择。因为SPI是全双工,IIC 的不是。SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps。IIC 最高的速度也就快速+模式(1 Mbps)和高速模式(3.4 Mbps),后面的模式还需要额外的I/O缓冲区,还并不是总是容易实现的。
(3)优雅性
IIC 常被称更优雅于SPI。公正的说,我们更倾向于认为两者同等优雅和健壮。IIC的优雅在于它的特色——用很轻盈的架构实现了多主设备仲裁和设备路由。但是对使用的工程师来讲,理解总线结构更费劲,而且总线的性能不高。SPI的优点在于它的结构相当的直观简单,容易实现,并且有很好扩展性。SPI的简单性不足称其优雅,因为要用SPI搭建一个有用的通信平台,还需要在SPI之上构建特定的通信协议软件。也就是说要想获得SPI特有而IIC没有的特性——高速性能,工程师们需要付出更多的劳动。另外,这种自定的工作是完全自由的,这也说明为什么SPI没有官方标准。IIC和SPI都对低速设备通信提供了很好的支持,不过,SPI适合数据流应用,而IIC更适合“字节设备”的多主设备应用。
(4)小结
在数字通信协议簇中,IIC和SPI常称为“小”协议,相对Ethernet, USB, SATA, PCI-Express等传输速度达数百上千兆字节每秒的总线。但是,我们不能忘记的是各种总线的用途是什么。“大”协议是用于系统外的整个系统之间通信的,“小”协议是用于系统内各芯片间的通信,没有迹象表明“大”协议有必要取代“小”协议。IIC和SPI的存在和流行体现了“够用就好”的哲学。
RS232是早期的一种串行通信标准,它描述了使用RS-232标准进行通信时的电平要求(定义多少电平表示数据0和1)、接线要求、线材要求,其实更多的是电平标准。
UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),既然是“器”,显然,它就是个设备而已,要完成一个特定功能的硬件。它最基本的功能是串并数据转换。
另外UART还要控制数据的格式(波特率、起始位、数据位、校验位、停止位等内容),这表示它也是异步串行通信的一种方式,它本身不是协议,但具有协议的特征,然而比RS232协议更具一般性。
因此可以说,UART同时具有硬件和协议的范畴。
在嵌入式MCU中的UART使用TTL电平,而在PC中的UART使用的则是RS232电平。所以UART并没有规范该使用什么电平,取决于你使用什么通信标准。即UART可以使用RS232规定的电平来通信,也可以用其他协议规定的电平来工作。
P.s:RS232与常见的TTL电平不同,RS232采用的是负逻辑,因此一般会使用MAX-232双向转化芯片。
TTL标准:低电平为0,高电平为1(+5V电平,3.3V以上即可)
RS-232标准:正电平为0,负电平为1(±15V电平)
------------------------------------------------------------------------
4、注意RS232不是接口标准,DB9、DB25才叫接口标准,现在RS232用的多的都是DB9。
5、接设备的时候,一般只接GND RX TX。不会接Vcc或者+3.3v的电源线,避免与目标设备上的供电冲突。
6、PL2303、CP2102芯片是USB转TTL串口的芯片,用USB来扩展串口(TTL电平)。
------------------------------------------------------------------------
(1)串口(嵌入式中指的是UART)、COM口
(两者同概念?COM口有两种物理标准:D型9针插头和 4针杜邦头。左图是UART,中间是4针杜邦头COM口,右图是D型9针插头。由此可知,4针杜邦头和UART是一样的?另外D型9针插头我们一般只接GND、RXD、TXD,因此其实和UART是一样的)



(2)下图是用PL2303芯片的USB转TTL串口

下图是用CP2102芯片的USB转TTL串口

下图是USB转RS-232串口
