SPI和IIC知识概括及示例

一、SPI通信

SPI是一种高速,全双工,同步的串行通信总线。

何为同步? 答:通信双方需要同一个时钟信号进行时序上的同步;

何为全双工? 答:A向B传输同时,B也可以向A传输; 何为串行?

答:每个时刻传输一位

工作方式: SPI采用主从工作方式,一个主机对应一个或者多个从机。

在物理层上SPI的主机至少需要四根线:

MISO:主设备输入从设备输出

MOSI:主设备输出从设备输入

SCLK:时钟

CS:片选,用于寻址

1、寻址方式

当主设备要和某个从设备进行通信时,主设备会向该从设备的片选线上发送一个使能信号(高电平或者低电平,根据从机而定)表示选中该设备。

 

IIC通信时,在发送数据前会先向总线上发送一个字节的数据,该数据就是某个从机的地址

2、通信过程

SPI通信时,数据传输与常见的UART的低位优先不同,SPI采用的是同IIC一样的高位优先。

就比如10,换算成二进制为1010,高位优先就是按1010的顺序传输,低位优先则是按0101的顺序传输。

SPI传输数据无应答信号,即发送方发送完一个字节紧接着可以发送下一个字节数据。

SPI采用同步通信机制,当时钟信号产生上升沿或者下降沿时,发送方就会往数据线上发送一位数据,当时钟信号再次产生下降沿或者上升沿时,接收方就会从数据线上接收一位数据,从而完成一位数据的传输。一个字节的传输需要八个时钟周期。

 

3、相位和极性

SPI有四种工作模式,取决于相位(CPHL)和极性(CPOL)两个因素。

CPOL表示时钟线在空闲时候的状态 

CPOL=0:SCLK在空闲时属于低电平状态

CPOL=1:SCLK在空闲时属于高电平状态 

CPHA表示采样时刻

CPHA=0:表示每个周期的第一个时钟沿采样

CPHA=1:表示每个周期的第二个时钟沿采样

优点:相比于IIC而言,传输速率快,且数据传输灵活,拥有独立的数据线,双方可以同时收发数据。

缺点:需要占用更多的硬件资源,没有应答信号,不能对传输的数据做检查。

 

黑线为采样时刻,蓝线为时钟信号SCLK

二、IIC通信

前面我们知道SPI是一种高速,全双工,同步的串行通信总线,下面介绍跟他一样常见的通信方式IIC通信。

与SPI不同,IIC是一种低速,半双工,同步的串行通信总线。

为什么是半双工呢,因为IIC只有两根线,一根时钟线SCL和一根数据线SDA. 所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

I2C总线上的每个设备都自己一个唯一的地址,来确保不同设备之间访问的准确性。

 

IIC的特点:可实现一主多从,多主多从。但是一个时段只能读或者写一个从设备。 主设备:提供IIC总线的控制电路 从设备:只能被动参与传输

基本时序:

1、空闲状态:SDA处于高电平 

2、起始信号:SCL高电平期间,将SDA拉低意味着新一轮的传输开始(主设备发起) 

3、中止信号:SCL高电平期间,将SDA拉高意味着一轮传输的结束(主设备发起)

  4、数据信号:一个时钟周期的低电平期间,由发送方将数据线拉高(传输1)、拉低(传输0),同一时钟周期的高电平期间,由接收方读取数据线状态,如果高电平意味着接收是1, 如果读到低电平意味着接收到是0.

 

通信协议:

IIC通信包括如下内容:

1、从设备地址:同一个IIC通道上,每个从设备都有唯一的身份编码---从设备地址     一般从设备地址占7个二进制位,组成一个字节时放在字节的7-1位,该字节的第0位表示传输方向。

    <1>、第0位是0:表示主机向从设备的寄存器里写数据。主机发送,从设备接收   

    <2>、第0位是1:表示主机从从设备的寄存器里读数据。主机接收,从设备发送 

2、从设备中某个寄存器地址:每个从设备中有多个寄存器,为了区分他们,从设备会给这些寄存器唯一的身份标识---寄存器地址。 

3、与从设备交互的数据:   

 <1>、向某个从设备指定寄存器里写数据   

 <2>、从从设备指定寄存器里读数据 

4、辅助应答信号:每次传输完一个字节后,由接收方设置SDA线,以便告知发送方这个字节传输是否正常的一个回馈信号。

关于回馈信号

1、主机发送数据,从设备接收数据—回馈信号由从设备来,在第九周期的低电平期间去设置SDA的电平。

    从设备如果不想继续接收后续数据,可以向主机反馈NACK信号,而主机读到NACK后就发起终止信号,终止本轮的传输。

    从设备如果还想继续接收后续数据,可以向主机反馈ACK信号,而主机读到ACK可以继续发送后续数据,也可以发起终止信号,终止本轮传输。

    第九周期的高电平期间主机读SDA高电平,说明从机无应答(NACK)

    第九周期的高电平期间主机读SDA低电平,说明从机有应答(ACK) 

2、主机接收数据,从设备发送数据—回馈信号由主机来,在第九周期的低电平期间去设置SDA的电平。

    主机如果不想继续接收后续数据,可以向从设备反馈NACK信号,然后主机发起终止信号,终止本次传输。

    主机如果想继续接收后续数据,可以向从设备反馈ACK信号,然后主机继续接收后续数据。

实例代码:

IIC总线按时序编写:以FS4412芯片为例

 

 

SET_SDA_OUT:将GPB.CON[2]配置成输出

SET_SDA_IN:将GPB.CON[2]配置成输入

SET_SDA_H:将数据线拉高

SET_SDA_L:将数据线拉低

SET_SCL_H:将时钟线拉高

SET_SCL_L:将时钟线拉低

READ_SDA:读取SDA数据

 

 

 

 

 

 

 

IIC和SPI的异同:

相同点:

    1、均采用串行,同步机制。

    2、均采用TTL电平(高电平为1,低电平为0),从而决定了他们适用于短距离传输,常用于一块电路板上芯片间的通讯。

    3、均采用主从方式工作。 

不同点:

    1、IIC为半双工,SPI为全双工

    2、IIC有应答机制,SPI无应答机制

    3、IIC通过广播从机地址来寻址,SPI通过片选线向从机发送使能信号。(SPI导致了SPI占用的硬件资源多,但是比IIC节省时间) IIC总线传输速度在100kbps-4Mbps。SPI总线传输速度更快,可以达到30MHZ以上。

    4、IIC的时钟和相位固定,而SPI的时钟和相位可调。

    5、 SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。IIC用于连接微控制器及其外围设备。

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值