ECSPI简介
增强型可配置串行外围接口(ECSPI)是一个全双工、同步、四线串行通信块。
ECSPI包含一个64 x 32接收缓冲区(RXFIFO)和一个64 x 32传输缓冲区(TXFIFO)。有了数据FIFO,ECSPI允许以较少的软件中断进行快速数据通信。下图显示了ECSPI的框图。
特点
- 全双工同步串行接口
- 主/从可配置
- 支持多个外围设备的四芯片选择(SS)信号
- 传输连续功能允许无限长的数据传输
- 32位宽64条FIFO,用于传输和接收数据
- 可配置芯片选择(SS)和SPI时钟(SCLK)的极性和相位
- 直接内存访问(DMA)支持
- 最高工作频率达到参考时钟频率
管脚信息
- SCLK:时钟信号(用于数据同步,由主机提供)
- SS:片选信号(用于选中从设备)
- MOSI:主机输出/从机输入
- MISO:主机输入/从机输出
工作模式
SPI总线以主从模式进行数据传输,数据从主设备流向从设备
数据交换
时钟信号SCLK
时钟信号有四种模式,通过POL(时钟极性)与PHA(时钟相位)进行配置。
POL = 0 表示当SCLK = 0时处于空闲状态,所以有效状态就是SCLK处于高电平时
POL = 1 表示当SCLK = 1时处于空闲状态,所以有效状态就是SCLK处于低电平时
PHA = 0 表示数据采样是在第1个时钟沿,数据发送是在第2个时钟沿
PHA = 1 表示数据采样是在第2个时钟沿,数据发送是在第1个时钟沿
图四为四种模式与数据传输之间的关系
部分寄存器介绍
Receive Data Register (ECSPI1_RXDATA)
ECSPI1_RXDATA)寄存器存储的是64(个)*32(位)组成的RXFIFO的顶部字,也就是最上边的32位,可以通过循环该寄存器获取RXFIFO中的数据。取出的时候注意一下顺序(看看主设备是以什么顺序发送的)
Transmit Data Register (ECSPIx_TXDATA)
ECSPIx_TXDATA寄存器存储的是64(个)*32(位)组成的TXFIFO的顶部字,也就是最上边的32位,只写并且写的最小单位为32位,将要发送的数据循环写入该寄存器后(数据会一个一个进入TXFIFO中,个人感觉是一种压栈的感觉,ECSPIx_TXDATA寄存器存的是栈顶的数据),通过对其他寄存器的配置,就可以开始传输了。
Control Register (ECSPIx_CONREG)
EN[0]:打开或关闭SPI模块(初始化阶段会用到)
SMC[3]:设置SMC位为1表示当数据写入TXFIFO后立即开始传输,但我们一般都会将SMC位配置为0,这样问哦们就可以通过XCH位控制何时发送
XCH[2]:0表示不发送,1表示启动发送,将数据写入TXFIFO后,将1写入此位开启发送
CHANNEL_MODE[7-4]:4-7位,每一位代表一个SPI设备,0表示将设备配置为从设备,1表示将设备配置为主设备
CHANNEL_SELECT[19–18]:SPI通道选择位。从四个外部SPI主/从设备中选择一个。在主模式下,这两个位通过断言芯片选择(SSn)输出来选择外部从设备。在给定的时间内,只有选定的芯片选择(SSn)信号才能激活;其余三个信号将被否定
BURST_LENGTH[31-20]:突发长度,在数据开始发送之前设置,代表要发送的数据的长度,突发就是提供一个首地址(ECSPIx_TXDATA寄存器),然后会自动从首地址开始取出地址连续的突发长度个数据进行传输(TXFIFO中取出)
Config Register (ECSPIx_CONFIGREG)
SCLK_PHA[3-0]:3-0位,每一位都代表一个SPI channel,控制时钟相位是1还是0
SCLK_POL[7-4]:7-4位,每一位都代表一个SPI channel,控制时钟极性是1还是0
SS_CTL[11-8]:由于设置了SMC位,所以忽略此位
SS_POL[15-12]:控制片选信号的极性,低电平选中从设备还是高电平选中从设备
DATA_CTL[19-16]:此字段控制每个SPI通道的数据线的非活动状态(数据低电平有效还是高电平有效)
SCLK_CTL[23-20]:此字段控制每个SPI通道的SCLK的非活动状态(低电平有效还是高电平有效)
注:水平有限,有不对的地方感谢指正
参考资料:IMX6Q数据手册