12. 同步串行接口(SSP)
12.1. 模块介绍
SPI_IIC 模块可用作 SPI 接口通信和 IIC 接口通信,两种功能同一时间只能选择其中一种使用。该模块集成两种接口协议,节省资源的同时又能满足不同的应用需求。
12.2. 功能特点
12.2.1. SPI 功能
• 支持主模式和从模式工作
• 可编程时钟极性,采样相位,支持 4 种模式
• 支持 1~32bit 传输
• 支持 5byte 发送/接收数据缓冲
• 传输数据顺序 MSB 和 LSB
• 支持标准模式,三线模式
• 可触发中断的专用发送和接收标志
12.2.2. IIC 功能
• 支持主模式和从模式
• 主模式支持时钟同步和总线仲裁
• 从模式支持在发送数据没有准备好或者接收缓冲器满时候拉低 SCL
• 从模式支持 7bit 地址或者 10bit 地址
• 从模式支持接收广播地址
• 支持 5byte 发送/接收数据缓冲
12.3. 功能说明
12.3.1. SPI 工作模式
• 模式 0:时钟空闲为 0,上升沿采样,下降沿出数据
• 模式 1:时钟空闲为 0,下降沿采样,上升沿出数据
• 模式 2:时钟空闲为 1,下降沿采样,上升沿出数据
• 模式 3:时钟空闲为 1,上升沿采样,下降沿出数据
12.3.2. SPI 接口模式
• 标准模式:通信线有 CLK,CS,IO0(MOSI),IO1(MISO),一个 CLK 传输 1bit 数据
• 三线模式:通信线有 CLK,CS,IO0,接收和发送都通过 IO0, 一个 CLK 传输 1bit 数据12.3.3. SPI 数据帧与内部缓存
SPI 可支持 1~32bit 帧数据传输,内部集成了一个 40bit 的缓冲区,根据配置的数据帧长度不同,缓冲区能缓存的帧数也不一样。数据帧长度<=8bit 时,缓冲区可容纳 5 帧数据,8bit<数据帧长度<=16bit时,缓冲区可容纳两帧数据,数据帧长度>16bit 时,缓冲区可容纳 1 帧数据,当缓冲区无法再容下一帧数据时,缓冲区满标志会置 1。
12.3.4. IIC 主机时钟同步和总线仲裁
IIC 主机模式时,在多主机的应用场景下,支持时钟同步和总线仲裁。当总线上连接了不止一个主机时,就会存在同时发起通信的情况,这时候需要时钟同步以及总线仲裁机制决定由哪个主机占用总线完成数据传输。
时钟同步的原理:IIC 总线上的不同主机可能发起传输时的时钟频率不一样,通过时钟同步机制,可以让所有主机的时钟同步,才能进行逐位仲裁。所有主机的 SCL 在总线上是线与的关系,当总线上的 SCL 由高切换到低电平时,所有主机从 0 开始计算低电平周期时间。当电平时间达到时,如果总线上的其它主机的 SCL 低电平仍然保持,那么其它主机进入高电平等待状态,等低电平时间最长的主机的 SCL 拉高时再统一拉高。因此,总线上同步后的 SCL 的低电平时间由低电平周期最长的主机决定,而高电平时间由高电平周期最短的主机决定。总线仲裁原理:IIC 总线上不同主机的 SDA 线也是线与的关系,各主机在 SCL 线为高电平时,检查SDA 线的电平是否和自己发送的 SDA 信号一致,如果检测到 SDA 线为低电平时,自己要发送的 SDA 信号为高电平,那么该主机仲裁失败,停止总线上的传输动作。
12.3.5. IIC 从机拉低 SCL
IIC 从机在发送状态下如果缓冲区中没有可发送的数据,或者在接收状态下缓冲区已满时,将会在 SCL端口输出低电平,拉低总线上的 SCL 信号使主机暂停发送时钟。当从机准备好发送或者接收后,将在 SCL输出高电平,主机又可以重新控制总线上的 SCL 线,恢复数据传输。
12.3.6. IIC 从机支持 7bit/10bit 寻址
IIC 从机支持 7bit 或者 10bit 寻址模式,由寄存器 CON0 的 IIC_SLAVE_ADDR_WIDTH 位决定。7bit 模式下,主机需要在 TX 模式下发送带 START 位的 7bit 地址,最后 1bit 为 R/W 标志。当主机写从机时,寻址完成即可进行数据发送。当主机读从机时,寻址完成后,主机需要改成 RX 模式,然后配置准备接收的数据长度(寄存器 DMA_LEN),然后对寄存器 CMD_DATA 写任意值启动接收。10bit 模式下,主机需要在 TX 模式下发送带 START 位的第 1byte 地址(此时 R/W 位为 1),接着发送第 2byte 地址,此时如果收到从机的 ACK 信号,则为寻址成功。接下来如果是主机写从机,就可以直接进行数据发送。如果是主机读从机,那么需要主机再次发送带 START 为的第 1byte 地址(此时 R/W 为 1),然后切换成 RX 模式,配置寄存器 DMA_LEN,并且对寄存器 CMD_DATA 写任意值启动读数据。
主机读从机时,从机被寻址成功且收到读标志时,需要切换成 TX 模式,并且往缓冲区中写入要发送的数据。