你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32F767通过cube配置:QSPI接口读写64M PSRAM+flash参考资料...  

[复制链接]
mmuuss586 发布时间:2019-8-15 13:11
阅读主题, 点击返回1楼
1 收藏 4 评论75 发布时间:2019-8-15 13:11
75个回答
mmuuss586 回答时间:2019-8-15 13:38:26
0x38指令:8 ]3 Q, F+ z; U. n
从Table8可知,该指令的功能是使能QPI,该指令对比0x90,他只能在SPI模式下使用,且无返还的数据。同样0xFF,是失能QPI的指令,只能在QPI模式下使用,所以我们配置如下:
mmuuss586 回答时间:2019-8-15 13:39:21
在Qspi_Enable的函数中,涉及到了NM25Q64EB的状态寄存器。NM25Q64共有3个状态寄存器,决定QPI是否使能(QE)的寄存器是第二个(status register2),位从下表中查得是第3位,我们先将状态寄存器3得到值(stareg2)读出来,再和00000100(0x04)做一个与运算,如果该位不为1,则往该位写入1,即1<<2左移运算得到00000100,再和状态寄存器原始状态stareg2做一个或运算。
mmuuss586 回答时间:2019-8-15 13:40:25
图片3.png
: B: v* N( w: l& Z4 J. X
其他指令跟以上两个指令的配置方式类似,查询指令表,将不同功能的指令码和模式作为参数写进QSPI_Send_CMD()即可。
其他事项:
Ⅰ、dummycycles一般情况下都是0,只有在各种Read操作的时候需要用到,可以理解为,在接收到指令后延时一小段时间,再读取返回值。从如下时序图就可以直观看出。
5 S- C4 e1 `" K1 [6 n1 F2 m$ H  S
mmuuss586 回答时间:2019-8-15 13:40:46
Ⅱ、在状态寄存器1的第一位是busy的标志位,可以通过检测该位,知道各种操作是否完成,检测完成再进行下一个指令的操作。
mmuuss586 回答时间:2019-8-15 13:41:04
Ⅲ、在配置SET_PARAM时,通过配置第4,5位来选择不同的cycles和frequent。此处配置为00011000,即3<<4。
mmuuss586 回答时间:2019-8-15 13:41:30
(3)到此为止,我们完成了QSPI和NM25Q64EB的全部配置,整理以下该工程的函数所属。核心文件有:) n3 F7 F9 Z+ Z9 Q7 H8 ^
qspi.c(存放QSPI的引脚配置和QSPI时钟等配置,是由stm32cubemx生成的,另外包括3个自己写的函数:QSPI_Send_CMD、QSPI_Receive、QSPI_Transmit);6 l+ A# D4 s  Y7 z2 p4 E# j; J" F& i+ n
w25qxx.c(存放NM25Q64EB的一系列函数,包括读ID,读,写,擦除,QPI使能等)3 d& q' m: I5 w( M, ?" F
实验过程中,我们在main()函数中调用NM25Q64EB的一系列函数进行测试读写功能:
3 h" Q! h, t* }; Q1 a" fⅠ、先读取ID是否等于0x5216;* _2 C! f3 F5 r# h8 u
Ⅱ、flash的大小,在读写的时候,读写的起始地址+数据大小不能超过8*1024*1024
8 r4 m) l& Y0 M0 L3 m$ E* s7 }Ⅲ、擦除, Q5 Z. ~" h$ O1 \! S/ W- C
Ⅳ、写数据
8 h; o+ `* t1 w- i, EⅤ、读出数据并打印出来
mmuuss586 回答时间:2019-8-15 13:42:23
图片2.png
$ q- }. F# F$ e. |( e  W) c  V2 h  U5 z# w& O
图片3.png
& r/ p( @% l3 |0 N5 t0 f1 _
mmuuss586 回答时间:2019-8-15 13:42:58
4、IPS6404L读写的移植。9 }0 y' C: B+ b9 @1 \6 ]
对IPS6404L和NM25Q64EB的读写,可以对比进行学习。两者的引脚,QSPI系数配置是一致的,工作过程照样是发送指令,让IPS6404L做出不同的操作,但有一些差异。
mmuuss586 回答时间:2019-8-15 13:43:58
(1)退出QPI模式
& R$ M* U/ u4 o9 o7 A& `' m2 K这是IPS6404L和NM25Q64EB的第一个区别,IPS6404L要读取ID只允许在SPI的模式下,所以在读取ID之前我们要先退出QPI的模式,利用指令码0Xf5,该指令只能在QPI模式下使用,使用我们指令模式要选择4线。此处的Waitcycles和NM25Q64EB的dummycycles是同样的作用,查表该值为0.
mmuuss586 回答时间:2019-8-15 13:44:15
(2)读ID0 H, \+ n1 @# x' N9 c: K  B+ k$ M
读取ID和NM25Q64EB也有差异,读取ID的指令是0x9F,只能在SPI模式下读取,根据时序图的注释,我们可以看出,读出的地址有两个字节(16bits),我们同样经过移位操作(在QSPI_PARAM_Test()中,将读取到的第一个字节左移8位,再与第二个字节做或运算)将其通过串口打印出来,读到ID=0Xd5d说明正确。
mmuuss586 回答时间:2019-8-15 13:44:35
(3)进入QPI模式5 z2 }; L1 G9 [
读取完ID后进入QPI模式,指令码是0X35,只能再SPI模式下操作。除了指令码,其他配置和退出QPI模式的配置函数一致。0 C- K- ?0 c0 @* N+ f4 P; t7 b
(4)写PSRAM数据/ B# Z* U# O6 v" ]# X6 ]9 E
指令码是0x38,指令模式、数据模式、地址模式全部为4线,地址大小为24bits,赋值好后调用HAL_QSPI_Command()完成配置并调用HAL_QSPI_Transmit()发送
mmuuss586 回答时间:2019-8-15 13:44:55
(5)读PSRAM数据
/ n; M/ _. {9 {0 G- D指令码是0xEB,此处特别注意要配置dummy cycles为6,一般涉及到Read的函数都要查表确认。
mmuuss586 回答时间:2019-8-15 13:45:21
(6)读写数据校验
, k$ Y' M& W  I最后将写入PSRAM的数据和读取到的数据进行逐一比较,按位比较成功,说明测试成功。可以正式在main()函数中正常读写,测试得到以下结果,说明通讯正常。
mmuuss586 回答时间:2019-8-15 13:45:46
(7)其他事项:
; s) ?- L& N4 @( u2 w0 U/ i6 W9 aⅠ、IPS6404L如果在进入QPI模式后没有退出QPI模式,尽管在函数中将进入QPI模式的函数屏蔽,照样会保持QPI模式,无法读取ID,必须在读ID前退出QPI模式。
5 c! |8 l( R" O6 d9 R( D5 X5 a; x& T8 Z) q0 o( v6 C+ ^' g8 V
Ⅱ、配置指令所用的宏定义放在stm32f7xx_hal_msp.h中,请对照移植。
mmuuss586 回答时间:2019-8-15 13:46:07
(7)其他事项:
. W  _2 b, n! G5 \0 a; ~Ⅰ、IPS6404L如果在进入QPI模式后没有退出QPI模式,尽管在函数中将进入QPI模式的函数屏蔽,照样会保持QPI模式,无法读取ID,必须在读ID前退出QPI模式。
. S( U* X: O6 g& F% }
2 H3 e7 A$ ?, Y% E  ^9 I% [Ⅱ、配置指令所用的宏定义放在stm32f7xx_hal_msp.h中,请对照移植。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版