SPI实验笔记

SPI

SPI全称是Serial Perripheral Interface,也就是串行外围设备接口。是一种高速、全双工的同步通信总线,SPI时钟频率相比I2C要高很多,最高可以工作在上百MHz。SPI以主从方式工作,通常是有一个主设备和一个或多个从设备,一般SPI需要4根线,但是也可以使用三根线(单向传输)。、

标准的4线SPI分别为:

①、CS/SS,Slave Select/Chip Select,这个是片选信号线,用于选择需要进行通信的从设备。I2C主机是通过发送从机设备地址来选择需要进行通信的从机设备的,SPI主机不需要发送从机设备,直接将相应的从机设备片选信号拉低即可。
②、SCK,Serial Clock,串行时钟,和I2C的SCL一样,为SPI通信提供时钟。
③、MOSI/SDO,Master Out Slave In/Serial Data Output,简称主出从入信号线,这根数据线只能用于主机向从机发送数据,也就是主机输出,从机输入。
④、MISO/SDI,Master In Slave Out/Serial Data Input,简称主入从出信号线,这根数据线只能用户从机向主机发送数据,也就是主机输入,从机输出。
在这里插入图片描述

在这里插入图片描述

SPI的工作时序要比I2C的时序相对简单:

CS片选信号先拉低,选中要通信的从设备,然后通过MOSI和MISO这两根数据线进行收发数据,MOSI数据线发出了0XD2这个数据给从设备,同时从设备也通过MISO线给主设备返回了0X66这个数据。这个就是SPI时序图。

I.MX6ULL自带了一个SPI外设:ECSPI

ECSPI特性如下:
①、全双工同步串行接口。
②、可配置的主/从模式。
③、四个片选信号,支持多从机。
④、发送和接收都有一个32x64的FIFO。
⑤、片选信号SS/CS,时钟信号SCLK极性可配置。
⑥、支持DMA。

I.MX6U有4个ECSPI,每个ECSPI支持四个片选信号,也就说,如果你要使用ECSPI的硬件片选信号的话,一个ECSPI可以支持4个外设。如果不使用硬件的片选信号就可以支持无数个外设。

 ECSPIx_CONREG(x=1~4)寄存器,ECSPI的控制寄存器:

在这里插入图片描述

BURST_LENGTH(bit31:24):突发长度,设置SPI的突发传输数据长度,在一次SPI发送中最大可以发送212bit数据。可以设置0X000~0XFFF,分别对应1~212bit。我们一般设置突发长度为一个字节,也就是8bit,BURST_LENGTH=7。
CHANNEL_SELECT(bit19:18):SPI通道选择,一个ECSPI有四个硬件片选信号,每个片选信号是一个硬件通道,可设置为0~3,分别对应通道0~3。I.MX6U-ALPHA开发板上的ICM-20608的片选信号接的是ECSPI3_SS0,也就是ECSPI3的通道0,所以本章实验设置为0。
DRCTL(bit17:16):SPI的SPI_RDY信号控制位,用于设置SPI_RDY信号,为0的话不关心SPI_RDY信号;为1的话SPI_RDY信号为边沿触发;为2的话SPI_DRY是电平触发。
PRE_DIVIDER(bit15:12):SPI预分频,ECSPI时钟频率使用两步来完成分频,此位设置的是第一步,可设置015,分别对应116分频。
POST_DIVIDER(bit11:8):SPI分频值,ECSPI时钟频率的第二步分频设置,分频值为2^POST_DIVIDER。
CHANNEL_MODE(bit7:4):SPI通道主/从模式设置,CHANNEL_MODE[3:0]分别对应SPI通道3~0,为0的话就是设置为从模式,如果为1的话就是主模式。比如设置为0X01的话就是设置通道0为主模式。
SMC(bit3):开始模式控制,此位只能在主模式下起作用,为0的话通过XCH位来开启SPI突发访问,为1的话只要向TXFIFO写入数据就开启SPI突发访问。
XCH(bit2):此位只在主模式下起作用,当SMC为0的话此位用来控制SPI突发访问的开启。
HT(bit1):HT模式使能位,I.MX6ULL不支持。
EN(bit0):SPI使能位,为0的话关闭SPI,为1的话使能SPI。

ECSPIx_CONFIGREG,这个也是ECSPI的配置寄存器:

在这里插入图片描述

HT_LENGTH(bit28:24):HT模式下的消息长度设置,I.MX6ULL不支持。
SCLK_CTL(bit23:20):设置SCLK信号线空闲状态电平,SCLK_CTL[3:0]分别对应通道3~0,为0的话SCLK空闲状态为低电平,为1的话SCLK空闲状态为高电平。
DATA_CTL(bit19:16):设置DATA信号线空闲状态电平,DATA_CTL[3:0]分别对应通道3~0,为0的话DATA空闲状态为高电平,为1的话DATA空闲状态为低电平。
SS_POL(bit15:12):设置SPI片选信号极性设置,SS_POL[3:0]分别对应通道3~0,为0的话片选信号低电平有效,为1的话片选信号高电平有效。
SCLK_POL(bit7:4):SPI时钟信号极性设置,也就是CPOL,SCLK_POL[3:0]分别对应通道3~0,为0的话SCLK高电平有效(空闲的时候为低电平),为1的话SCLK低电平有效(空闲的时候为高电平)。
SCLK_PHA(bit3:0):SPI时钟相位设置,也就是CPHA,SCLK_PHA[3:0]分别对应通道3~0,为0的话串行时钟的第一个跳变沿(上升沿或下降沿)采集数据,为1的话串行时钟的第二个跳变沿(上升沿或下降沿)采集数据。
通过SCLK_POL和SCLK_PHA可以设置SPI的工作模式。

寄存器ECSPIx_PERIODREG:

在这里插入图片描述

CSD_CTL(bit21:16):片选信号延时控制位,用于设置片选信号和第一个SPI时钟信号之间的时间间隔,范围为0~63。
CSRC(bit15):SPI时钟源选择,为0的话选择SPI CLK为SPI的时钟源,为1的话选择32.768KHz的晶振为SPI时钟源。我们一般选择SPI
在这里插入图片描述

①、这是一个选择器,用于选择根时钟源,由寄存器CSCDR2的位ECSPI_CLK_SEL来控制,为0的话选择pll3_60m作为ECSPI根时钟源。为1的话选择osc_clk作为ECSPI时钟源。本章我们选择pll3_60m作为ECSPI根时钟源。
②、ECSPI时钟分频值,由寄存器CSCDR2的位ECSPI_CLK_PODF来控制,分频值为2^ECSPI_CLK_PODF。本章我们设置为0,也就是1分频。
③、最终进入ECSPI的时钟,也就是SPI CLK=60MHz。
SAMPLE_PERIO:采样周期寄存器,可设置为00X7FFF分别对应032767个周期。

ECSPIx_STATREG,这个是ECSPI的状态寄存器:

在这里插入图片描述

TC(bit7):传输完成标志位,为0表示正在传输,为1表示传输完成。
RO(bit6):RXFIFO溢出标志位,为0表示RXFIFO无溢出,为1表示RXFIFO溢出。
RF(bit5):RXFIFO空标志位,为0表示RXFIFO不为空,为1表示RXFIFO为空。
RDR(bit4):RXFIFO数据请求标志位,此位为0表示RXFIFO里面的数据不大于RX_THRESHOLD,此位为1的话表示RXFIFO里面的数据大于RX_THRESHOLD。
RR(bit3):RXFIFO就绪标志位,为0的话RXFIFO没有数据,为1的话表示RXFIFO中至少有一个字的数据。
TF(bit2):TXFIFO满标志位,为0的话表示TXFIFO不为满,为1的话表示TXFIFO为满。
TDR(bit1):TXFIFO数据请求标志位,为0表示TXFIFO中的数据大于TX_THRESHOLD,为1表示TXFIFO中的数据不大于TX_THRESHOLD。
TE(bit0):TXFIFO空标志位,为0表示TXFIFO中至少有一个字的数据,为1表示TXFIFO为空。
最后就是两个数据寄存器,ECSPIx_TXDATA和ECSPIx_RXDATA,这两个寄存器都是32位的,如果要发送数据就向寄存器ECSPIx_TXDATA写入数据,读取及存取ECSPIx_RXDATA里面的数据就可以得到刚刚接收到的数据。
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SPI Multiboot是指一种基于SPI总线的多启动引导协议,它允许开发者通过单个SPI接口将多个不同的固件程序存储在一个SPI闪存芯片中,并在系统启动时通过分别选择这些不同的程序来启动不同的设备。 其中多个不同的固件程序可以任意划分成多个分区,并按照设定的优先级顺序存储在SPI闪存芯片中。而启动时则通过控制SPI接口时序和信号的方式,选择相应的固件程序进行启动。 此外,SPI Multiboot协议还支持数据传输的加密和校验,以确保数据安全和完整性。 对于应用者而言,SPI Multiboot协议的优点主要有以下几点: 1.节省硬件成本。使用SPI Multiboot,只需要一个SPI接口即可存储多个固件程序,而不必使用多个独立的闪存芯片,从而节省了硬件成本。 2.方便固件更新。由于可以通过SPI接口直接更新闪存中的固件程序,因此更新固件程序将变得更加方便和快捷。 3.提高系统的稳定性和安全性。SPI Multiboot协议支持数据传输的加密和校验,可以确保固件程序的安全和完整性,从而提高了系统的稳定性和安全性。 4.灵活性和可扩展性。SPI Multiboot协议允许开发者使用不同的固件程序和分区划分方案,以满足不同设备的需求,并且还可以扩展协议中的参数和信号,以适应更多的应用场景。 总之,SPI Multiboot协议是一种带有多种优点的多启动引导协议,对于需要在单一设备上运行多个不同的固件程序的应用场景而言,提供了一种较为理想的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值