[求助] IIC与SPI通信用于存储芯片的速度问题

kevin1588112   2018-3-18 09:19 楼主
最近在学习存储芯片的存和取,主要用52单片机来控制。首先我学的是IIC,两根线还挺好用的,总感觉速度不够快,在网上看SPI总线传输速度快,我想问一下各位大神我用52单片机能实现数据存储&读取速率SPI>IIC吗?

回复评论 (10)

很多单片机自带SPI接口,速度相当快。
若是软件模拟SPI接口,则不大可能比IIC更快。
点赞  2018-3-18 10:00
引用: maychang 发表于 2018-3-18 10:00
很多单片机自带SPI接口,速度相当快。
若是软件模拟SPI接口,则不大可能比IIC更快。

看来我该学一下stm32单片机了
点赞  2018-3-18 10:30
51也有带spi的,有带eep的,直接用片上资源多好
点赞  2018-3-18 18:58
引用: huo_hu 发表于 2018-3-18 18:58
51也有带spi的,有带eep的,直接用片上资源多好

那请问52有没有spi呢 (我在网上看资料说51只可以模拟spi总线a
点赞  2018-3-19 09:00
引用: kevin1588112 发表于 2018-3-19 09:00
那请问52有没有spi呢 (我在网上看资料说51只可以模拟spi总线a

用有spi的新片子
点赞  2018-3-19 20:34
  一。 IIC 简介

  它是由数据线 SDA 和时钟 SCL 构成的串行总线, 可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。用I2C通信的芯片最常用的就是EEPROM芯片,如Atmel的AT24CXX系列,此外,还有一些其它功能的芯片。

  I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。

  开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。

  结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。

  应答信号: 接收数据的 IC 在接收到 8bit 数据后, 向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

  二.SPI

  SPI通常有SCK时钟,STB片选,DATA数据信号三个信号。SPI总线真正实现了全双工数据传输,SPI 有3线跟4线两种,4线的话,就是多了一条叫SDC的线,用来告知从设备现在传输的是数据还是指令。这个接口较快,可以传输较连续的数据。SPI要想连接多个从设备,就需要给每个从设备配备一根片选信号。如果要可以实现全双工,也是需要多加一根数据线(MOSI MISO)。SPI通信芯片的引脚名称不一定都是这几个名称,可能还有会别的名称,但是意思是一样的,例如MOSI引脚的意思是“主机输出从机输入”,某个SPI接口的芯片就有可能会写成SDI,因为这个SPI器件是作为从机的,所以它的SDI的意思就是“从机数据输入引脚”。

  SPI通信过程为:把CS引脚拉低,然后SCK输出时钟,然后就可以在MOSI引脚上输出数据,同时可以在MISO上获得数据了。

  (这是一个SPI FLASH芯片,DO是MISO,DI是MOSI,CLK是SCK,功能一样,叫法不一样而已)

  (单片机接法)

  下面主要总结一下2种总线的异同点:

  1 iic总线不是全双工,2根线SCL SDA。spi总线实现全双工,4根线SCK CS MOSI MISO

  2 iic总线是多主机总线,通过SDA上的地址信息来锁定从设备。spi总线只有一个主设备,主设备通过CS片选来确定从设备

  3 iic总线传输速度在100kbps-4Mbps。spi总线传输速度更快,可以达到30MHZ以上。

  4 iic总线空闲状态下SDA SCL都是高电平。spi总线空闲状态MOSI MISO也都是 SCK是有CPOL决定的

  5 iic总线scl高电平时sda下降沿标志传输开始,上升沿标志传输结束。spi总线cs拉低标志传输开始,cs拉高标志传输结束

  6 iic总线是SCL高电平采样。spi总线因为是全双工,因此是沿采样,具体要根据CPHA决定。一般情况下master device是SCK的上升沿发送,下降沿采集

  7 iic总线和spi总线数据传输都是MSB在前,LSB在后(串口是LSB在前)

  8 iic总线和spi总线时钟都是由主设备产生,并且只在数据传输时发出时钟  拍明芯城电话:400-693-8369

  9 iic总线读写时序比较固定统一,设备驱动编写方便。spi总线不同从设备读写时序差别比较大,因此必须根据具体的设备datasheet来实现读写,相对复杂一些。
https://www.iczoom.com
点赞  2018-3-29 17:42
  它是由数据线 SDA 和时钟 SCL 构成的串行总线, 可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。用I2C通信的芯片最常用的就是EEPROM芯片,如Atmel的AT24CXX系列,此外,还有一些其它功能的芯片。

  (这是EEPROM芯片的接法)

  (对应的单片机引脚)

  I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。

  开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。

  结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。

  应答信号: 接收数据的 IC 在接收到 8bit 数据后, 向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

  二.SPI

  SPI通常有SCK时钟,STB片选,DATA数据信号三个信号。SPI总线真正实现了全双工数据传输,SPI 有3线跟4线两种,4线的话,就是多了一条叫SDC的线,用来告知从设备现在传输的是数据还是指令。这个接口较快,可以传输较连续的数据。SPI要想连接多个从设备,就需要给每个从设备配备一根片选信号。如果要可以实现全双工,也是需要多加一根数据线(MOSI MISO)。SPI通信芯片的引脚名称不一定都是这几个名称,可能还有会别的名称,但是意思是一样的,例如MOSI引脚的意思是“主机输出从机输入”,某个SPI接口的芯片就有可能会写成SDI,因为这个SPI器件是作为从机的,所以它的SDI的意思就是“从机数据输入引脚”。

  SPI通信过程为:把CS引脚拉低,然后SCK输出时钟,然后就可以在MOSI引脚上输出数据,同时可以在MISO上获得数据了。

  (这是一个SPI FLASH芯片,DO是MISO,DI是MOSI,CLK是SCK,功能一样,叫法不一样而已)

  (单片机接法)

  下面主要总结一下2种总线的异同点:

  1 iic总线不是全双工,2根线SCL SDA。spi总线实现全双工,4根线SCK CS MOSI MISO

  2 iic总线是多主机总线,通过SDA上的地址信息来锁定从设备。spi总线只有一个主设备,主设备通过CS片选来确定从设备

  3 iic总线传输速度在100kbps-4Mbps。spi总线传输速度更快,可以达到30MHZ以上。

  4 iic总线空闲状态下SDA SCL都是高电平。spi总线空闲状态MOSI MISO也都是 SCK是有CPOL决定的

  5 iic总线scl高电平时sda下降沿标志传输开始,上升沿标志传输结束。spi总线cs拉低标志传输开始,cs拉高标志传输结束

  6 iic总线是SCL高电平采样。spi总线因为是全双工,因此是沿采样,具体要根据CPHA决定。一般情况下master device是SCK的上升沿发送,下降沿采集

  7 iic总线和spi总线数据传输都是MSB在前,LSB在后(串口是LSB在前)

  8 iic总线和spi总线时钟都是由主设备产生,并且只在数据传输时发出时钟

  9 iic总线读写时序比较固定统一,设备驱动编写方便。spi总线不同从设备读写时序差别比较大,因此必须根据具体的设备datasheet来实现读写,相对复杂一些。

  如果您觉得对您有帮助请关注我的公众号“老赵a科技”我们一起学习

  参考2:https://www.cnblogs.com/deng-tao/p/6004280.html

  1、什么是SPI?

  SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一

  种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

  2、SPI优点

  支持全双工通信

  通信简单

  数据传输速率块

  3、缺点

  没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据

  可靠性上有一定的缺陷。

  4、特点

  1):高速、同步、全双工、非差分、总线式

  2):主从机通信模式

  5、协议通信时序详解

  1):SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多

  个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共

  有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。

  (1)SDO/MOSI – 主设备数据输出,从设备数据输入;

  (2)SDI/MISO – 主设备数据输入,从设备数据输出;

  (3)SCLK – 时钟信号,由主设备产生;

  (4)CS/SS – 从设备使能信号,由主设备控制。当有多个从设备的时候,因为每个从设

  备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需

  要将从设备对应的片选引脚电平拉低或者是拉高。


  2):需要说明的是,我们SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配

  置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们

  可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来

  控制我们主设备的通信模式,具体如下:

  Mode0:CPOL=0,CPHA=0

  Mode1:CPOL=0,CPHA=1

  Mode2:CPOL=1,CPHA=0

  Mode3:CPOL=1,CPHA=1

  时钟极性CPOL是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA

  是用来配置数据采样是在第几个边沿:

  CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时

  CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时

  CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿

  CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

  例如:

  CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是 SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

  CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

  CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是 SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

  CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是 SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

  需要注意的是:我们的主设备能够控制时钟,因为我们的SPI通信并不像UART或者IIC通信 那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以我们的

  SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是 保持高电平要么是保持低电平。

  6、内部工作机制

   SSPSR 是 SPI 设备内部的移位寄存器(Shift Register). 它的主要作用是根据 SPI

  时钟信号状态, 往 SSPBUF 里移入或者移出数据, 每次移动的数据大小由 Bus-Width 以

  及 Channel-Width 所决定.
https://www.iczoom.com
点赞  2018-3-30 16:46
引用: maychang 发表于 2018-3-18 10:00
很多单片机自带SPI接口,速度相当快。
若是软件模拟SPI接口,则不大可能比IIC更快。

根据各自的传输原理,SPI无地址码,无需应答,当然比IIC快!
点赞  2018-6-23 19:34
引用: kevin1588112 发表于 2018-3-19 09:00
那请问52有没有spi呢 (我在网上看资料说51只可以模拟spi总线a

在我的记忆中,89C52只是比51多了一个定时器,也是没有SPI的,你可以看一下STC15或者STM8,应该都有SPI,比51芯片强很多,也是8位的
点赞  2018-6-27 11:22
i2c还是spi要看你用什么接口的芯片,i2c不适合高速率的数据传输,效率低
点赞  2018-6-27 16:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复