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

基于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指令:
" P" K* H5 N& ^  D4 l1 U' b从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
$ k+ l0 O* p; V9 J* k, P+ F) f
其他指令跟以上两个指令的配置方式类似,查询指令表,将不同功能的指令码和模式作为参数写进QSPI_Send_CMD()即可。
其他事项:
Ⅰ、dummycycles一般情况下都是0,只有在各种Read操作的时候需要用到,可以理解为,在接收到指令后延时一小段时间,再读取返回值。从如下时序图就可以直观看出。

. n1 |, U" O4 F2 Q9 X
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的全部配置,整理以下该工程的函数所属。核心文件有:! f  B) s  v8 B5 {$ ?: l
qspi.c(存放QSPI的引脚配置和QSPI时钟等配置,是由stm32cubemx生成的,另外包括3个自己写的函数:QSPI_Send_CMD、QSPI_Receive、QSPI_Transmit);
+ s* W3 Q, B4 G; h% Y9 ^w25qxx.c(存放NM25Q64EB的一系列函数,包括读ID,读,写,擦除,QPI使能等)0 z) f( I8 X( w$ o% l
实验过程中,我们在main()函数中调用NM25Q64EB的一系列函数进行测试读写功能:0 G4 T# h8 h- N& S( w  ^3 H
Ⅰ、先读取ID是否等于0x5216;( i' U# w+ c1 h! T5 L( D7 s
Ⅱ、flash的大小,在读写的时候,读写的起始地址+数据大小不能超过8*1024*1024* Y/ E3 i9 o1 y6 [9 a
Ⅲ、擦除. ^. E3 n8 y. I* O8 W* u
Ⅳ、写数据
; H7 B- w' d: g! p! D/ l" j0 bⅤ、读出数据并打印出来
mmuuss586 回答时间:2019-8-15 13:42:23
图片2.png
9 p: F4 v, `# b1 y9 r" _/ e% n8 ?) X2 D' U
图片3.png
8 c/ H1 K0 K2 _- m7 f
mmuuss586 回答时间:2019-8-15 13:42:58
4、IPS6404L读写的移植。
( [8 W2 y, I; _对IPS6404L和NM25Q64EB的读写,可以对比进行学习。两者的引脚,QSPI系数配置是一致的,工作过程照样是发送指令,让IPS6404L做出不同的操作,但有一些差异。
mmuuss586 回答时间:2019-8-15 13:43:58
(1)退出QPI模式
; ?$ F% a# {- j$ |$ r. g这是IPS6404L和NM25Q64EB的第一个区别,IPS6404L要读取ID只允许在SPI的模式下,所以在读取ID之前我们要先退出QPI的模式,利用指令码0Xf5,该指令只能在QPI模式下使用,使用我们指令模式要选择4线。此处的Waitcycles和NM25Q64EB的dummycycles是同样的作用,查表该值为0.
mmuuss586 回答时间:2019-8-15 13:44:15
(2)读ID
+ h1 ?1 z. S, C# ^& f" }6 [读取ID和NM25Q64EB也有差异,读取ID的指令是0x9F,只能在SPI模式下读取,根据时序图的注释,我们可以看出,读出的地址有两个字节(16bits),我们同样经过移位操作(在QSPI_PARAM_Test()中,将读取到的第一个字节左移8位,再与第二个字节做或运算)将其通过串口打印出来,读到ID=0Xd5d说明正确。
mmuuss586 回答时间:2019-8-15 13:44:35
(3)进入QPI模式( ~! e/ M: E% R1 r
读取完ID后进入QPI模式,指令码是0X35,只能再SPI模式下操作。除了指令码,其他配置和退出QPI模式的配置函数一致。
- [2 t3 m! o0 p( |% h' u(4)写PSRAM数据6 \( E# X4 a5 F) L& }% A
指令码是0x38,指令模式、数据模式、地址模式全部为4线,地址大小为24bits,赋值好后调用HAL_QSPI_Command()完成配置并调用HAL_QSPI_Transmit()发送
mmuuss586 回答时间:2019-8-15 13:44:55
(5)读PSRAM数据. s4 ?) a. n/ }6 {+ t
指令码是0xEB,此处特别注意要配置dummy cycles为6,一般涉及到Read的函数都要查表确认。
mmuuss586 回答时间:2019-8-15 13:45:21
(6)读写数据校验
' i- d2 W8 y/ v6 q; v+ _2 Q最后将写入PSRAM的数据和读取到的数据进行逐一比较,按位比较成功,说明测试成功。可以正式在main()函数中正常读写,测试得到以下结果,说明通讯正常。
mmuuss586 回答时间:2019-8-15 13:45:46
(7)其他事项:
& C1 ~0 {+ [6 U' N* mⅠ、IPS6404L如果在进入QPI模式后没有退出QPI模式,尽管在函数中将进入QPI模式的函数屏蔽,照样会保持QPI模式,无法读取ID,必须在读ID前退出QPI模式。+ B% F# C& e/ D$ l0 v5 u' S
1 o* F$ z( c  P, k2 @
Ⅱ、配置指令所用的宏定义放在stm32f7xx_hal_msp.h中,请对照移植。
mmuuss586 回答时间:2019-8-15 13:46:07
(7)其他事项:/ X4 q  \& a$ e, n4 L) f0 K; D
Ⅰ、IPS6404L如果在进入QPI模式后没有退出QPI模式,尽管在函数中将进入QPI模式的函数屏蔽,照样会保持QPI模式,无法读取ID,必须在读ID前退出QPI模式。
2 o0 u8 ^) j' K) i% m* f
1 w& n6 \2 `( K$ ^9 o, O& q$ YⅡ、配置指令所用的宏定义放在stm32f7xx_hal_msp.h中,请对照移植。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版