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

基于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指令:
- e3 x0 n4 ?. K0 E. Z' 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
; J4 C6 W' }+ P& W- Z
其他指令跟以上两个指令的配置方式类似,查询指令表,将不同功能的指令码和模式作为参数写进QSPI_Send_CMD()即可。
其他事项:
Ⅰ、dummycycles一般情况下都是0,只有在各种Read操作的时候需要用到,可以理解为,在接收到指令后延时一小段时间,再读取返回值。从如下时序图就可以直观看出。
) h* O. v7 H5 C, g9 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的全部配置,整理以下该工程的函数所属。核心文件有:+ B9 h8 E- e$ ]+ s7 L1 U  {/ z8 ?
qspi.c(存放QSPI的引脚配置和QSPI时钟等配置,是由stm32cubemx生成的,另外包括3个自己写的函数:QSPI_Send_CMD、QSPI_Receive、QSPI_Transmit);" C2 ?2 t4 K$ Z! A- X
w25qxx.c(存放NM25Q64EB的一系列函数,包括读ID,读,写,擦除,QPI使能等), Z6 K" b' o& z2 @' \
实验过程中,我们在main()函数中调用NM25Q64EB的一系列函数进行测试读写功能:7 I+ W% u# G: _# D: @
Ⅰ、先读取ID是否等于0x5216;: J1 C+ O( R1 l7 c
Ⅱ、flash的大小,在读写的时候,读写的起始地址+数据大小不能超过8*1024*10242 D; L' e; C, h1 B, m  }
Ⅲ、擦除1 v/ [. W4 c# N( o% H) X% P
Ⅳ、写数据/ _/ c1 ?1 Y1 {8 y% h+ @
Ⅴ、读出数据并打印出来
mmuuss586 回答时间:2019-8-15 13:42:23
图片2.png
8 P9 m# P5 \4 g/ i; F
! T+ ^+ K% n1 d: }* y, K% D+ Y 图片3.png
5 u5 E/ L& u; K
mmuuss586 回答时间:2019-8-15 13:42:58
4、IPS6404L读写的移植。
6 z6 K2 r& k& u$ y1 q对IPS6404L和NM25Q64EB的读写,可以对比进行学习。两者的引脚,QSPI系数配置是一致的,工作过程照样是发送指令,让IPS6404L做出不同的操作,但有一些差异。
mmuuss586 回答时间:2019-8-15 13:43:58
(1)退出QPI模式
5 I4 n# p' J+ i/ O  O这是IPS6404L和NM25Q64EB的第一个区别,IPS6404L要读取ID只允许在SPI的模式下,所以在读取ID之前我们要先退出QPI的模式,利用指令码0Xf5,该指令只能在QPI模式下使用,使用我们指令模式要选择4线。此处的Waitcycles和NM25Q64EB的dummycycles是同样的作用,查表该值为0.
mmuuss586 回答时间:2019-8-15 13:44:15
(2)读ID$ k) J+ W; o$ x2 w% k
读取ID和NM25Q64EB也有差异,读取ID的指令是0x9F,只能在SPI模式下读取,根据时序图的注释,我们可以看出,读出的地址有两个字节(16bits),我们同样经过移位操作(在QSPI_PARAM_Test()中,将读取到的第一个字节左移8位,再与第二个字节做或运算)将其通过串口打印出来,读到ID=0Xd5d说明正确。
mmuuss586 回答时间:2019-8-15 13:44:35
(3)进入QPI模式7 y1 E/ k) A3 J
读取完ID后进入QPI模式,指令码是0X35,只能再SPI模式下操作。除了指令码,其他配置和退出QPI模式的配置函数一致。) k, X  `  i, h4 t
(4)写PSRAM数据% p9 x* h% K: l* ?  z% i8 d
指令码是0x38,指令模式、数据模式、地址模式全部为4线,地址大小为24bits,赋值好后调用HAL_QSPI_Command()完成配置并调用HAL_QSPI_Transmit()发送
mmuuss586 回答时间:2019-8-15 13:44:55
(5)读PSRAM数据
3 |* O, u0 w, c  y指令码是0xEB,此处特别注意要配置dummy cycles为6,一般涉及到Read的函数都要查表确认。
mmuuss586 回答时间:2019-8-15 13:45:21
(6)读写数据校验' x. b3 B9 v% H2 n+ r$ e2 R
最后将写入PSRAM的数据和读取到的数据进行逐一比较,按位比较成功,说明测试成功。可以正式在main()函数中正常读写,测试得到以下结果,说明通讯正常。
mmuuss586 回答时间:2019-8-15 13:45:46
(7)其他事项:( j/ B. N. q7 p5 ]& S4 H1 Y: L/ l4 H
Ⅰ、IPS6404L如果在进入QPI模式后没有退出QPI模式,尽管在函数中将进入QPI模式的函数屏蔽,照样会保持QPI模式,无法读取ID,必须在读ID前退出QPI模式。5 _& ]! i; Z( s) i+ ?
2 p& D9 |+ m) i" `, n3 A" C
Ⅱ、配置指令所用的宏定义放在stm32f7xx_hal_msp.h中,请对照移植。
mmuuss586 回答时间:2019-8-15 13:46:07
(7)其他事项:
' B4 v* ]2 i0 Y2 r9 q1 c- ]Ⅰ、IPS6404L如果在进入QPI模式后没有退出QPI模式,尽管在函数中将进入QPI模式的函数屏蔽,照样会保持QPI模式,无法读取ID,必须在读ID前退出QPI模式。) K: h  [; v3 c6 Y0 h
" A' H; S0 d; a( S; M' o
Ⅱ、配置指令所用的宏定义放在stm32f7xx_hal_msp.h中,请对照移植。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版