1.SPI和IIC
串行外设接口(Serial Peripheral Interface,SPI)是一种高速的,全双工,同步的通信总线,并且SPI通常由一个主模块和一个或多个从模块组成,是一个环形结构,在芯片的管脚上占用四根线 — 片选信号SS,时钟SCLK,主输入从输出MISO,主输出从输入MOSI。
SPI有四种操作模式;主从设备必须使用相同的工作参数——SCLK\CPOL和CPHA;SPI不规定最大传输速率,没有地址方案;SPI并不关心物理接口的电气特性,例如信号的标准电压。
集成电路总线(Inter-Integrated Circuit,IIC)是一种串行通信总线,使用多主从架构,没有物理芯片选择信号线,没有仲裁逻辑电路,只用两条信号线——serial data(SDA)和serial clock(SCL)。由于只有两条线,共用数据线,所以是半双工通信,通信速度慢。
IIC协议规定:
- 每一支IIC设备都有一个唯一的七位设备地址。
- 数据帧大小为8位的字节。
- 数据(帧)中的某些数据位,用于控制通信的开始、停止、方向(读写)和应答机制。
SPI和IIC的对比
(1) SPI协议可以用在主控周围的flash通信中,比如常用的W25Q64或者W25Q128,分别是64K和128K的flash,支持SPI通信。
IIC协议可以用在主控和EEPROM flash通信中,如P24C64E。
(2) 总线拓扑结构\信号路由\硬件资源耗费
(3) 数据吞吐\传输速度
(4) 优雅性
2. 数据接收处理
如何处理不连续的数据;如何判断数据是否连续;在未知数据大小的情况下,如何存储多个不连续的数据:
定义一个存储数据,大小,偏移量三个元素的链表,在数据不连续的时候,将数据插入到链表中,形成一个有序链表,然后在数据连续之后,遍历链表,一次性的将链表的数据发送给用户,然后清除链表,只保留最后一个节点的信息。