GD32E505 SPI Flash


GD32E50x有专用的SQPI外设,支持接SQPI接口的PSRAM、Flash等,不过LQFP64封装的不支持,这些管脚都分配到了PF口或PG口上。好在SPI0且仅有SPI0支持4线模式,可以尝试四线接口的SPI Flash。

GD32E505 SPI0四线操作模式:

SPI四线模式用于控制四线SPI flash外设。要配置成SPI四线模式,首先要确认TBE位置1,且TRANS位清零,然后将SPI_QCTL寄存器中的QMOD位置1。在SPI 四线模式,SPI_CTL0寄存器中BDEN位、BDOEN位、CRCEN位、CRCNT位、FF16位、RO位和LF位保持清零,且MSTMOD位置1,以保证SPI工作于主机模式。SPIEN位、PSC位、CKPL位和CKPH位根据需要进行配置。

SPI四线模式有两种运行模式:四线写模式四线读模式,通过SPI_QCTL寄存器中的QRD位进行配置。

四线写模式

当SPI_QCTL寄存器中的QMOD位置1且QRD位清零时,SPI工作在四路写模式。在四路写模式中,MOSI、MISO、IO2 和IO3 都用作输出引脚。在SCK产生时钟信号后,一旦数据写入SPI_DATA寄存器(TBE位清零)且SPIEN位置1时,SPI将会通过这四个引脚发送写入的数据。一旦SPI开始数据传输,它总是在数据帧结束时检查TBE标志位的状态,若不能满足条件则停止传输。

四路模式下发送操作流程:

  1. 根据应用需求,配置SPI_CTL0和SPI_CTL1中的时钟预分频、时钟极性、相位等参数;
  2. 将SPI_QCTL中的QMOD位置1,然后将SPI_CTL0中的SPIEN位置1来使能SPI功能;
  3. 向SPI_DATA寄存器中写入一个字节的数据,TBE标志位将会清零;
  4. 等待硬件将TBE位重新置位,然后写入下一个字节数据。
    四线SPI写时序 Pic

四线写模式

当SPI_QCTL寄存器中的QMOD位和QRD位都置1时,SPI工作在四路读模式。在四路读模式中,MOSI、MISO、IO2 和IO3都用作输入引脚。当数据写入SPI_DATA寄存器(此时TBE位被清零)且SPIEN位置1时,SPI开始在SCK信号线上产生时钟信号。写数据到SPI_DATA寄存器只是为了产生SCK时钟信号,所以可以写入任何数据。SPI开始数据传输之后,每发送一个数据帧都要检测SPIEN位和TBE位,若条件不满足则停止传输。所以软件需要一直向SPI_DATA写空闲数据,以产生SCK时钟信号。

四路模式下接收操作流程:

  1. 根据应用需求,配置SPI_CTL0和SPI_CTL1中时钟预分频、时钟极性、相位等参数;
  2. 将SPI_QCTL中的QMOD位和QRD位置1,然后将SPI_CTL0中的SPIEN位置1来使能SPI功能;
  3. 写任意数据(例如0xFF)到SPI_DATA寄存器;
  4. 等待RBNE位置1,然后读SPI_DATA寄存器来获取接收的数据;
  5. 写任意数据(例如0xFF)到SPI_DATA寄存器,以接收下一个字节数据。
    四线SPI读时序 Pic

SPI停止流程

不同运行模式下采用不同的流程来停止SPI功能。
SPI四路模式 :在禁用SPI四路模式或者关闭SPI功能之前,软件应该先检查:TBE位置1,TRANS位清零,SPI_QCTL中的QMOD位和SPI_CTL0中的SPIEN位清零。

例程分析

木有例程。。。只能自个啃啃试试了,如果不行,就换成2线的跟普通SPI Flash操作流程一样就完事了。


文章作者: xArm
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xArm !
评论