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

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

[复制链接]
mmuuss586 发布时间:2019-8-15 13:11
阅读主题, 点击返回1楼
赞 1 收藏 4 评论77 发布时间:2019-8-15 13:11
77个回答
mmuuss586 回答时间:2019-8-15 13:38:26
0x38指令:
6 E5 i/ \4 K" Q6 R( X% 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
- p: b5 W5 M* M9 s/ X
其他指令跟以上两个指令的配置方式类似,查询指令表,将不同功能的指令码和模式作为参数写进QSPI_Send_CMD()即可。
其他事项:
Ⅰ、dummycycles一般情况下都是0,只有在各种Read操作的时候需要用到,可以理解为,在接收到指令后延时一小段时间,再读取返回值。从如下时序图就可以直观看出。

) n2 A3 ?/ h  Q3 a' ?
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的全部配置,整理以下该工程的函数所属。核心文件有:
7 S4 U* T* ~' }/ e& Pqspi.c(存放QSPI的引脚配置和QSPI时钟等配置,是由stm32cubemx生成的,另外包括3个自己写的函数:QSPI_Send_CMD、QSPI_Receive、QSPI_Transmit);
5 B6 x6 |1 C& J8 z6 @* `w25qxx.c(存放NM25Q64EB的一系列函数,包括读ID,读,写,擦除,QPI使能等)
0 D- G7 y3 _0 n' ?2 }5 f4 W实验过程中,我们在main()函数中调用NM25Q64EB的一系列函数进行测试读写功能:+ k: F6 h" P+ L
Ⅰ、先读取ID是否等于0x5216;
$ J- E$ ?* P: P: d( U0 R  B; P2 CⅡ、flash的大小,在读写的时候,读写的起始地址+数据大小不能超过8*1024*1024
$ @; z! D# y4 K8 GⅢ、擦除1 J0 W: F7 l( l. \5 _2 ], N
Ⅳ、写数据, w4 e) K: _( [5 Z/ ~( v$ d) l- m
Ⅴ、读出数据并打印出来
mmuuss586 回答时间:2019-8-15 13:42:23
图片2.png
8 u1 d+ S& w2 t4 X0 e+ `1 \
- h- y; x  f9 h! A+ r7 N' ] 图片3.png
5 p+ a- [) I) R5 W7 y( t% u" j
mmuuss586 回答时间:2019-8-15 13:42:58
4、IPS6404L读写的移植。, _/ E- l: {) S" N
对IPS6404L和NM25Q64EB的读写,可以对比进行学习。两者的引脚,QSPI系数配置是一致的,工作过程照样是发送指令,让IPS6404L做出不同的操作,但有一些差异。
mmuuss586 回答时间:2019-8-15 13:43:58
(1)退出QPI模式
& @- C" I  Y" u8 W2 p1 `这是IPS6404L和NM25Q64EB的第一个区别,IPS6404L要读取ID只允许在SPI的模式下,所以在读取ID之前我们要先退出QPI的模式,利用指令码0Xf5,该指令只能在QPI模式下使用,使用我们指令模式要选择4线。此处的Waitcycles和NM25Q64EB的dummycycles是同样的作用,查表该值为0.
mmuuss586 回答时间:2019-8-15 13:44:15
(2)读ID- ~% `% W% r; x! L0 v7 k  ~; m
读取ID和NM25Q64EB也有差异,读取ID的指令是0x9F,只能在SPI模式下读取,根据时序图的注释,我们可以看出,读出的地址有两个字节(16bits),我们同样经过移位操作(在QSPI_PARAM_Test()中,将读取到的第一个字节左移8位,再与第二个字节做或运算)将其通过串口打印出来,读到ID=0Xd5d说明正确。
mmuuss586 回答时间:2019-8-15 13:44:35
(3)进入QPI模式# w8 t3 b9 v6 m2 C
读取完ID后进入QPI模式,指令码是0X35,只能再SPI模式下操作。除了指令码,其他配置和退出QPI模式的配置函数一致。5 D) V# d. g: N9 W# U9 B$ e
(4)写PSRAM数据
0 h* \6 ^4 q# y指令码是0x38,指令模式、数据模式、地址模式全部为4线,地址大小为24bits,赋值好后调用HAL_QSPI_Command()完成配置并调用HAL_QSPI_Transmit()发送
mmuuss586 回答时间:2019-8-15 13:44:55
(5)读PSRAM数据) B: c- f: F$ [9 B# ^
指令码是0xEB,此处特别注意要配置dummy cycles为6,一般涉及到Read的函数都要查表确认。
mmuuss586 回答时间:2019-8-15 13:45:21
(6)读写数据校验, D; h0 T" f* U4 N) V& w
最后将写入PSRAM的数据和读取到的数据进行逐一比较,按位比较成功,说明测试成功。可以正式在main()函数中正常读写,测试得到以下结果,说明通讯正常。
mmuuss586 回答时间:2019-8-15 13:45:46
(7)其他事项:
) ~0 H+ X( i" g1 L$ e: K+ bⅠ、IPS6404L如果在进入QPI模式后没有退出QPI模式,尽管在函数中将进入QPI模式的函数屏蔽,照样会保持QPI模式,无法读取ID,必须在读ID前退出QPI模式。6 ]  h* y0 u" q" E% X) C# w* E
. ~) V  |* c( R4 O* z( Y3 G3 k) }7 ?
Ⅱ、配置指令所用的宏定义放在stm32f7xx_hal_msp.h中,请对照移植。
mmuuss586 回答时间:2019-8-15 13:46:07
(7)其他事项:* p- O! s0 a' c5 D
Ⅰ、IPS6404L如果在进入QPI模式后没有退出QPI模式,尽管在函数中将进入QPI模式的函数屏蔽,照样会保持QPI模式,无法读取ID,必须在读ID前退出QPI模式。
. ^# k% v- n, R& w1 ?. L, K! q2 c( ^+ Q$ P6 @
Ⅱ、配置指令所用的宏定义放在stm32f7xx_hal_msp.h中,请对照移植。

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版