I.MX6ULL的SPI通信

简述

SPI是串行外设接口(Serial Peripheral Interface)的缩写,相比于I2C最高400bps的传输速度,SPI每秒可以传输的数据可以高达几十M甚至上百Mbit。
1、SPI的的特点是高速、全双工(可以一边发数据一边收数据)、同步(有统一的时钟信号)通信。
2、标准SPI通信一共需要四根线,

  • CS:片选信号线,需要通信的时候主设备直接将对应从设备的CS拉低。
  • SCK:时钟信号线
  • MOSI:主出从入数据线
  • MISO:主入从出数据线

3、SPI的四种工作模式

(一)、I.MX6ULL的SPI接口

I.MX6ULL自带的SPI外设叫做ECSPI,一共有4个ECSPI,每一个的特点如下:

  • 全双工同步串行接口
  • 可配置的主从/模式
  • 四个片选信号,支持多从机
  • 发送和接收都有一个64x32的FIFO
  • 片选信号SS/CS,时钟信号SCLK极性可配置
  • 支持DMA

(二)、ECSPI的重要寄存器

1、ECSPIx_CONREG:ECSPI配置寄存器

bit描述
bit[31:20]突发长度,设置SPI的突发传输数据长度,可以设置的值的范围为:0X0 ~ 0XFFF,分别对应长度为1 ~ 2^12bit,通常设置为8个bit。
bit[19:18]通道选择,一个ECSPI有四个通道,可设置值为0 ~ 3
bit[17:16]SPI_RDY信号控制位。2:SPI_RDY为电平触发,1:SPI_RDY为边沿触发;0:不关心SPI_RDY信号
bit[15:12]ECSPI时钟频率要分频两次后获得,这是第一次预分频,取值0 ~15,对应1 ~ 16分频
bit[11:8]SPI分频,这是第二次分频,取值0 ~ 15,对应分频值2^0 ~ 2^15
bit[7:4]SPI通道主/从模式设置,bit[7:4] 分别对应通道3 ~ 0,1:主模式;0:从模式
bit[3]开始模式控制,此位只能在主模式下起作用,为 0 的话通过 bit[2]位来开启 SPI突发访问,为 1 的话只要向 TXFIFO 写入数据就开启 SPI 突发访问
bit[2]此位只在主模式下起作用,当 bit[3]为 0 的话此位用来控制 SPI 突发访问的开启
bit[1]HT模式使能位,貌似I.MX6ULL不支持
bit[0]SPI使能位,1:使能SPI;0:关闭SPI

2、 ECSPIx_CONFIGREG:同样也是ECSPI配置寄存器

bit描述
bit[28:24]HT模式下的消息长度设置,I.MX6UL不支持这个
bit[23:20]设置 SCLK 信号线空闲状态电平,bit[23:20]分别对应通道3~0,为 0 的话 SCLK 空闲状态为低电平,为 1 的话 SCLK 空闲状态为高电平
bit[19:16]设置 DATA 信号线空闲状态电平,bit[19:16]分别对应通道3~0,为 0 的话 DATA 空闲状态为高电平,为 1 的话 DATA 空闲状态为低电平
bit[15:12设置 SPI 片选信号极性设置,bit[15:12]分别对应通道 3~0,为 0 的话片选信号低电平有效,为 1 的话片选信号高电平有效
bit[7:4]SPI 时钟信号极性设置,也就是 bit[7:4]分别对应通道 3~0,为 0 的话 SCLK 高电平有效(空闲的时候为低电平),为 1 的话 SCLK 低电平有效(空闲的时候为高电平)
bit[3:0]SPI时钟相位设置,也就是bit[3:0]分别对应通道3~0, 为 0 的话串行时钟的第一个跳变沿(上升沿或下降沿)采集数据,为 1 的话串行时钟的第二个跳变沿(上升沿或下降沿)采集数据

通过bit[7:4]和bit[3:0]可以设置SPI 的工作模式。
3、ECSPIx_PERIODREG:这个是 ECSPI 的采样周期寄存器

bit描述
bit[28:24]片选信号延时控制位,用于设置片选信号和第一个 SPI 时钟信号之间的时间间隔,范围为 0~63
bit[15]SPI 时钟源选择,为 0 的话选择 SPI CLK 为 SPI 的时钟源,为 1 的话选择32.768KHz 的晶振为 SPI 时钟源。我们一般选择 SPI CLK 作为 SPI 时钟源
bit[15:0]采样周期,可设置为 0~0X7FFF 分别对应 0~32767 个周期

4、ECSPIx_STATREG:ECSPI状态寄存器

bit描述
bit[7]传输完成标志位,1:传输完成;0:传输还未完成
bit[6]RXFIFO溢出标志位,1:溢出;0:未溢出
bit[5]RXFIFO空标志位,1:空;0:不为空
bit[4]RXFIFO 数据请求标志位,此位为 0 表示 RXFIFO 里面的数据不大于RX_THRESHOLD,此位为 1 的话表示 RXFIFO 里面的数据大于 RX_THRESHOLD
bit[3]RXFIFO 就绪标志位,为 0 的话 RXFIFO 没有数据,为 1 的话表示 RXFIFO 中至少有一个字的数据
bit[2]TXFIFO 满标志位,为 0 的话表示 TXFIFO 不为满,为 1 的话表示 TXFIFO 为满
bit[1]TXFIFO 数据请求标志位,为 0 表示 TXFIFO 中的数据大于 TX_THRESHOLD, 为 1 表示TXFIFO 中的数据不大于 TX_THRESHOLD
bit[0]TXFIFO 空标志位,为 0 表示 TXFIFO 中至少有一个字的数据,为 1 表示 TXFIFO为空

5、ECSPIx_TXDATA 和 ECSPIx_RXDATA:两个数据寄存器

这两个寄存器都是 32位的,如果要发送数据就向寄存器 ECSPIx_TXDATA 写入数据,读取及存取ECSPIx_RXDATA里面的数据就可以得到刚刚接收到的数据。

(三)SPI初始化

  • 初始化对应的配置寄存器ECSPIx_CONREG和ECSPIx_CONFIGREG
  • 配置时钟信号
  • 初始化对应的IO复用模式和电气属性
  • 读写功能的实现

(四)参考资料

STM32系统学习——SPI(读写串行 FLASH)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值