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

基于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指令:
' A# t! F8 K8 C  l" S- B5 M从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
1 k$ a* \( |# G; S
其他指令跟以上两个指令的配置方式类似,查询指令表,将不同功能的指令码和模式作为参数写进QSPI_Send_CMD()即可。
其他事项:
Ⅰ、dummycycles一般情况下都是0,只有在各种Read操作的时候需要用到,可以理解为,在接收到指令后延时一小段时间,再读取返回值。从如下时序图就可以直观看出。

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