i.MX 6Dual/6Quad ECSPI原理

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总线以主从模式进行数据传输,数据从主设备流向从设备
在这里插入图片描述

图二
如图二所示,每个ECSPI都有4根SS片选信号线(有五个ECSPI),通过改变SS信号线上的电平(可以通过寄存器配置,下方会进行介绍)选定设备,同一时刻,只能有一个从设备被选中

数据交换

在这里插入图片描述

图三
在SPI总线中与其说是数据传输,不如说是数据交互,主设备每个时钟周期都会通过MISO管脚发送一个bit,同时也会从从设备的MOSI管脚上接收一个bit,这样就形成了数据交换,即使主设备接收到的数据没什么用,但SPI机制就是这样。 数据流向:主设备的TXDATA(就是TXFIFO) --> 主设备的Shift Register ->主设备的MISO管脚 -> 从设备的MOSI管脚 -> 从设备的Shift Register -> 从设备的RXDATA(就是RXFIFO) ->然后数据就可以由应用层取出了。

时钟信号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数据手册

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值