本帖最后由 宫影空明人不往 于 2024-2-6 15:39 编辑
#申请原创#前言
在APM32F10x的应用手册发现APM32F10x芯片是有QSPI模块的,但奈何手册对其的描述简短,以及没有相关的配套例程供我进行参考。同时,发现其他公司有QSPI模块的芯片的内核不一样,并且在寄存器上有很大的差异,因此不太能参考。但是,新发布的APM32F411也有QSPI模块,同时其SDK有QSPI的相关例程。因此可以参考例程来对QSPI模块的使用进行学习。
1.QSPI简介
1.1QSPI模式
在使用QSPI模块前需要对QSPI协议的相关知识进行了解。QSPI模块一共支持三种模式,分别为单线模式,双线模式以及四线模式。当QSPI选择相应的模式去与存储器通信时,与其连接的存储器也需要切换到相应的模式。比如说,如果想用四线模式与W25QXX存储器进行通信前,需将W25Qxx存储器改成快速读写模式。具体操作为将其QE位置一。回到正题,三种模式的区别如下:
(1).单线模式
单线模式与标准SPI模式相同,QSPI通过IO0向存储器发送信息,通过IO1接收存储器发过来的数据。当使用QSPI的单线模式与W25Qxx进行通信时,需要将IO2与IO3引脚与存储器的nWP与nHOLD进行连接,并输出高电平来取消存储器的写保护以及开启保持功能。如果存储器这两个引脚使用硬件拉高时,QSPI的IO2和IO3的引脚可以当普通IO使用。
(2).双线模式
双线模式的IO引脚的使用与单线模式类似。不同的点为IO0和IO1为半双工传输,同时发送和接收。IO2和IO3的引脚使用与单线模式相同。
(3).四线模式
四线模式下,IO0到IO3四个引脚均用作数据的发送与接收。同时,在快速读取模式下,存储器W25Qxx的nWP和nHOLD引脚不再作取消写保护和使能保持功能,而是当做数据传输IO使用。因此,四线模式下QSPI的吞吐量得到巨大提升。
1.2 QPSI操作流程
QSPI主要通过存储器定下来的指令协议来操作相应的存储器,例如擦除操作,读取数据,设置存储器状态,操作存储寄存器等指令。而每一个指令操作通常由四部分组成,分别为,指令阶段,地址阶段,空闲字节阶段,数据阶段。
(1).指令阶段
指令阶段主要是QSPI向存储器发送一个8bit的数据,来告诉存储器需要完成的工作。
(2).地址阶段
如果QSPI需要读取或者写入数据,则需要在发送指令后向存储器发送相应的地址,地址的具体长度由用户配置。
(3).空闲字节阶段
在快速读取阶段,存储器可能需要时间来处理数据,因此在数据段前需要隔开若干个时钟周期来保证后续读取数据的正确性。
(4).数据阶段
数据阶段则是读取或者写入的数据。
针对不同的操作,上述四种阶段可以有不同的组合方式。比如说擦除操作的指令加上地址,读取存储器状态的指令加上数据,以及设置存储器模式的单指令以及读写数据时的指令+地址+数据,如果是快速操作的话,还需要在数据阶段前加上空闲字节阶段。最后,指令阶段,地址阶段以及数据阶段其传输模式都可以是单线模式,双线模式以及四线模式的,具体在寄存器中进行配置。
2.QSPI逻辑分析图
为了消化上述内容,针对三种不同的模式,分别抓了三张逻辑分析图。
(1).单线模式
下图为单线模式下读取W25Qxx的ID信息,其中IO口从上到下分别为CLK,CS,IO0,IO1,IO2,IO3。当前存储器为快速模式,因此IO2,IO4可作其他IO口使用。单线模式下读取存储器的ID信息步骤为发送0x90指令,然后发送24位地址,值为0x000000,然后读取相关ID信息。我们根据下图可以看到,QSPI从IO0发送相关指令以及地址到存储器,并从IO1读取相应ID信息,0xef,0x16。
(2).双线模式
下图为双线模式下读取W25Qxx的ID信息,IO口跟单线模式一样。双线模式下读取存储器ID信息步骤为发送0x92指令,然后发送24地址,并隔若干个空闲字节后读取相关ID信息。通过下图可以看出,指令阶段为单线模式,然后地址以及数据阶段为双线模式。其中,在双线模式下的8bit数据拆分为IO0的bit6,bit4,bit2和bit0和IO1的bit7,bit5,bit3,bit1。
(3).四线模式
下图为四线模式下读取W25Qxx的ID信息。四线模式下读取存储器ID信息步骤为发送0x94指令,然后发送24地址,并隔若干个空闲字节后读取相关ID信息。通过下图可以看出,指令阶段为单线模式,然后地址以及数据阶段为四线模式。其中,在四线模式下的8bit数据拆分为IO0的bit4,bit0;IO1的bit5和bit1;IO2的bit6和bit2;IO3的bit7和bit3。
我们可以看到,双线模式和四线模式的空闲字节的时钟周期是不一样的,因此在实际使用中,这部分需要额外注意。
因篇幅原因,QSPI的相关知识讲解到这里结束。目前来看,APM32F411的QSPI只能用于与QSPI Flash进行连接通信,没有相关的XIP功能。下篇将介绍如何使用APM32F411QSPI模块。
大家对于APM32F411上QSPI的使用或者与其他的QSPI使用差异有什么见解可一起讨论。
|