既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
一、名字
- SPI(Serial Peripheral Interface:串行外设接口),是Motorola公司提出的一种同步串行数据传输标准。
- I2C(INTER IC BUS:IC之间总线),是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。
- UART(Universal Asynchronous Receiver Transmitter:通用异步收发器),是电脑硬件的一部分,它把将要传输的资料在串行通信与并行通信之间加以转换,UART通常被集成于其他通讯接口的连接上。UART即我们通常说的“串口”。
二、UART、SPI、I2C对比
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常用于控制计算机与串行设备的芯片
<p>2、就是我们经常所说的串口,基本都用于调试。</p> </td> <td style="width:215px;">主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间</td> <td style="width:307px;">I2C一般是用在同一个板子上的2个IC之间的通信 ,它可以替代标准的并行总线,连接各种集成电路和功能模块。</td> </tr><tr><td style="width:105px;">传输距离</td> <td style="width:152px;"> </td> <td style="width:215px;"> </td> <td style="width:307px;">I2C需要有双向IO的支持,而且使用上拉电阻,抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信</td> </tr><tr><td style="width:105px;">通信特征</td> <td style="width:152px;">异步,一帧可以传5/6/7/8位</td> <td style="width:215px;">同步,<span style="color:#f33b45;"><strong>SPI允许数据一位一位的传送</strong></span>,甚至允许暂停。从最高位开始传。</td> <td style="width:307px;">同步,电平信号,一次连续8bit。从最高位开始传</td> </tr><tr><td style="width:105px;">协议复杂度</td> <td style="width:152px;">结构比较复杂</td> <td style="width:215px;">SPI实现要比UART简单,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。</td> <td style="width:307px;">协议比SPI复杂,但是连线比标准的SPI要少</td> </tr><tr><td style="width:105px;">对比</td> <td style="width:152px;"> </td> <td style="width:215px;"> <p>在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。</p> <p>在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。</p> </td> <td style="width:307px;"> </td> </tr></tbody></table></div><h1 id="%E4%B8%89%E3%80%81%E4%B8%B2%E8%A1%8C%E5%A4%96%E8%AE%BE%E6%8E%A5%E5%8F%A3%EF%BC%9ASPI"><a name="t2"></a><br><strong>三、串行外设接口:SPI</strong></h1>
|
1、速览点
(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和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前(先传?),低位在后,为全双工通信。
2、数据传输
(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
3、spi读写
(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位时钟周期才把数据读回来。
四、IC之间总线:I2C
1、速览点
(1)由图可知
- 由两条信号线组成:串行数据线(SDA)、串行时钟线(SCL)。
- 由1,2箭头指示可知,I2C器件内部采用开漏的方法,总线被上拉。
- 那么总线状态只能被下拉为0(当MOS管输入0的时候)。
- 只要有一方下拉了总线,总线状态必定为0。
(2)任何一个设备都能像主控器一样工作,并控制总线,但同一时刻只能有一个主控设备。
(3)总线上的每一个设备都有一个独一无二的地址,根据设备的能力,作为发射器或接收器工作。
(4)在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
(5)连接到相同总线的IC 数量只受到总线的最大电容限制。
(6)SDA传输数据是大端传输(高位先传,低位后传?),是以字节为单位的。
2、详细介绍
https://blog.csdn.net/oqqHuTu12345678/article/details/72356722
3、时序
https://blog.csdn.net/oqqHuTu12345678/article/details/72356722
https://blog.csdn.net/Mr_Lyoko/article/details/79598106
4、代码
https://blog.csdn.net/oqqHuTu12345678/article/details/72358553
**五、****通用异步收发器:**UART
1、速览点
(1)UART由波特率产生器、UART接收器、UART发送器组成。
(2)由三条信号线组成:RX、TX、GND
(3)UART包括RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范。它们的主要区别在于其各自的电平范围不相同。 嵌入式设备中常常使用到的是TTL、TTL转RS232的这种方式。
2、通信协议
(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。在数据传输和接收双方,需要预先统一波特率,以便正确的传输数据。
3、详细介绍
https://blog.csdn.net/oqqHuTu12345678/article/details/71597893
https://blog.csdn.net/oqqHuTu12345678/article/details/71597575
https://blog.csdn.net/xiaodingqq/article/details/80342459
4、代码学习
https://blog.csdn.net/oqqHuTu12345678/article/details/71601785
六、心得体会
1、通信接口分为物理层和协议层
(1)物理层(硬件):如UART,PC和单片机通信,PC机的串口是232电平而单片机的串口是TTL电平,两个设备之间通信如果电平不一致就相当于语言不通,造成逻辑混乱。因此一般的单片机系统板上都会有一个串口模块电路(串口控制器)用来进行电平转换,**将PC机的232电平转化成单片机能识别的232电平,**常用芯片如PL2303、CH340。
(2)协议层:就相当于规定了一个标准或规则,比如SPI协议中,主机向从机发出一个数据,从机接收到后会发出应答信号,这就是协议规定的内容,不需要人为干预。当然有的单片机没有这些协议的控制器(硬件),如51单片机和24c02通信,需要模拟IIC协议,用软件来实现硬件的功能,这就增加了软件的复杂度。
收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
02通信,需要模拟IIC协议,用软件来实现硬件的功能,这就增加了软件的复杂度。
收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
[外链图片转存中…(img-AsDdx1rb-1715633255870)]
[外链图片转存中…(img-KLl4N8by-1715633255871)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!