IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线接口。
I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。
每个连接到总线的设备都有一个独立的地址,主机正是利用该地址对设备进行访问
I2C开始和结束信号
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
起始信号后,总线上所有的从机开始等待主机紧接下来的从机地址addr广播。因为总线上每个设备的地址都是唯一的,当主机广播的地址与某个设备地址相同时,该设备就被选中,并向主机发出应答(ACK)或者非应答(NACK),主机只有在接收到应答信号后继续发送/接收数据,没选中的设备将会忽略之后的数据信号。根据I2C协议,从机地址可以是7位或者10位。
I2C通讯采用的是读写复合的格式。传输过程中主机需要发出2次起始信号:第一次传输主机通过从机地址找到从机设备,发送一段数据,这个数据是从设备内部寄存器或者存储器地址;第二次传输是对该地址进行读/写。主机要读取从机数据时,主机会释放对SDA总线的控制,由从机控制SDA总线,主机负责接收信号;主机要向从机设备写数据时,SDA由主机控制,从机负责接收信号。
写操作:
主机发送Start起始信号后发送I2C 从机地址addr和读操作1(1bit)或写操作0(1bit),如果是写操作0,主机等待从机发送ACK,收到ACK后主机发送从机Regaddr寄存器地址,接着继续等待ACK,等到ACK后主机发送Data,即要写入寄存器中的数据,从机发送ACK,主机发送Data重复多次可顺序写入多个寄存器直至主机产生STOP停止信号
读操作:
如果是需要接受从机数据,主机通常需要发起2次起始,Start起始信号后,主机发送从机地址addr以及写操作0,主机等待从机发送ACK,收到ACK后主机发送从机Regaddr寄存器地址,接着继续等待ACK,等到ACK后,需要再发起一次起始信号,主机发送从机地址addr和读操作1,并等待ACK,从机发送ACK后接着发送data即寄存器里的值,主机发送ACK表示收到,从机继续发送data即顺序读下一个寄存器,当主机希望停止接收数据时就向返回一个非应答信号(NACK),数据传输将结束。
SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。
参考:https://blog.csdn.net/qq_29344757/article/details/76520378
SPI是串行外设接口(Serial Peripheral Interface)的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。SPI数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。
SPI总线只需四条线(如图所示)就可以完成MCU与各种外围器件的通讯:
(1)MOSI – 主(Master)器件数据输出,从(Slave)器件数据输入
(2)MISO – 主(Master)器件数据输入,从(Slave)器件数据输出
(3)SCLK –时钟信号,由主(Master)器件产生
(4)/SS – 从器件使能信号,由主器件控制,有的IC会标注为CS(Chip select)
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。
当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低(低电平有效)。接着开始发送工作脉冲到时钟线SCLK上提供时钟脉冲,MISO、MOSI则基于此脉冲完成数据传输,在相应的脉冲时间上,[主设备]把信号发到MOSI实现“写”,同时可对MISO采样而实现“读”。
SPI传输模式:
通过设置控制寄存器SPICR1中的CPOL和CPHA位,将SPI可以分成四种传输模式。
SPI通讯模式
模式 |
CPOL(时钟极性) |
CPHA(时钟相位)
|
MODE0 |
0 |
0 |
MODE1 |
0 |
1 |
MODE2 |
1 |
0 |
MODE3 |
1 |
1 |
CPOL=0,表示当SCLK=0时处于空闲态,SCLK=1有效。
CPOL=1,表示当SCLK=1时处于空闲态,SCLK=0有效。
CPHA=0,表示数据采样是在第一个跳变沿,数据发送在第2个边沿。
CPHA=1,表示数据采样是在第二个跳变沿,数据发送在第1个边沿。
SPI工作原理
SPI是一个环形总线结构,SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,根据上面的传输模式发出一位数据就会接收到一位数据,移位寄存器在旧的数据没有发完之前是不会接受新的数据的。8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个SPI时序。
一个从机Slave设备要想能够接收到主机Master 发过来的控制信号, 必须在此之前能够被 Master设备进行访问。 所以, Master设备必须首先通过 SS/CS pin对Slave 设备进行片选, 把想要访问的从机 Slave 设备选上。在数据传输的过程中, 传输一位数据就需要相对应的采样一位数据。
SPI的缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
参考:https://blog.csdn.net/qq_38410730/article/details/80318821