[NUCLEO-L476RG开发]首发QSPI 之一 4线数据读写25QXX 和映射读.....
首发QSPI 之一 4线数据读写25QXX 和映射读.....1。前言
QUADSPI 是一种专用的通信接口,连接单、双或四(条数据线)SPI Flash 存储介质。该接
口可以在以下三种模式下工作:
间接模式:使用 QUADSPI 寄存器执行全部操作
状态轮询模式:周期性读取外部 Flash 状态寄存器,而且标志位置 1 时会产生中断(如
擦除或烧写完成,会产生中断)
内存映射模式:外部 Flash 映射到微控制器地址空间,从而系统将其视作内部存储器
2。QUADSPI主要特性
三种功能模式:间接模式、状态轮询模式和内存映射模式
双闪存模式,通过并行访问两个 Flash,可同时发送/接收 8 位数据
支持 SDR 和 DDR 模式
针对间接模式和内存映射模式,完全可编程操作码
针对间接模式和内存映射模式,完全可编程帧格式
集成 FIFO,用于发送和接收
允许 8、16 和 32 位数据访问
具有适用于间接模式操作的 DMA 通道
在达到 FIFO 阈值、超时、操作完成以及发生访问错误时产生中断
STM32L476 的QSPI 速度是可以支持到80M 读写速度的, 看上面的图我们可以知道25QXX 的4线读写速度是只能支持到 70M(4线)的,这个需要注意了。(当然你要超频也是可以的目前我用80M 的读写速度也没发现什么异常,但不建议超频了可能会不稳定)
了解了上面的的,那我们就开始建工程 工具还是用STM32CubeMX 版本4.11、库用的1.1.1
1.这里选择我们的开发板型号,一些基本的外设和端口就不需要我们再进行设置的了。
2.开启我们要使用的QSPI 外设4线。
3.开启一个串口外设方便我们输出数据查看。
4. 设置一下串口的位数和波特率,波特率就默认选择115200 了,位数为8位。
5.(
1。主频为80M ,分频系数为1(F CLK = F AHB /2)=40M 的读写速度,
2.FIFO 中存在 4 个或更多空闲字节可供写入
3.移位半个周期
4.容易大小我们给个默认的为20个位大小
5.( 2nCS 在 Flash 命令之间保持高电平至少 3 个周期)
6. nCS 为高电平(片选释放)时,CLK 必须保持高电平。这称为模式 3。
)
6.给QSPI 添加一个DMA 以进行高速度写,如果不用DMA 速度会慢很多,这个大家可以去试验了。
7.设置好DMA 之后记得还要把这两个中断选上。
8.设置好外设参数之后就生成工程这里还需要给工程起个名字,我就起STM32L476QSPI 了。再选上MDK V5 IDE 由于我是用的KEII 5.16编绎器的。
9.选上这个选项给每一个外设都添加一个*.C ,*.H这样可以方便我们管理每一个外设,选好了就点OK 生成工程了。
10.打开生成的工程,给25QXX 的操作函数起一个单独的文件夹,再把25QXX文件添加进来。
11. 给25QXX.C 的文件路径添加进来,按步骤操作就行了。
12.上面步骤都完成后,我们就打开main.c 把25QXX 的头文件添加进来。
13.这里看上面代码注释写的很清楚了。编绎没有错误就可以下载到我们的开发板了。
14. 到这一步就看程序的输出结果了,这里可以看到我用的16MB 的FLASH 读到的ID 为EF17 是正确的,再把读到的0-99地址的数据输出来。结果也是正确的。 我们再看看开启了内存映射的方法读取内存输出也是正确的。(开启内存映射就可以像内部FLASH 一样的操作了)
工程源代码放在附件里了,需要的就下载,觉得好的就顶。不好的话就喷吧,现在的技术也就这样子了:lol
:):):):):):)谢谢分享mark一下 顶一个 :loveliness:顶一个 学习。。。。。。。。。 :o好高级啊。。。只能先仰望下。。。 顶一下 谢谢分享 强悍,谢谢分享 感谢分享
页:
[1]
2