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

STM32L4R9 的 QuadSPI Flash 通讯速率不理想

[复制链接]
STMCU小助手 发布时间:2023-2-14 16:21
1. 引言 客户反应 STM32L4R9 同 QSPI Flash 通讯,测出来的读取速率为 10MB/s, 和理论值相差较大。! d, x3 G7 x* q$ H: K4 P; h5 e
: t/ @& s4 ?$ D1 k
2. 问题分析; ^$ D' Z5 \0 T
按照客户的时钟配置和 STM32L4R9 的数据手册中的数据,OSPI 读数速率为 10MB/s 肯定存在问题。同时我们也可以在 AN4760 应用手册中看到如下说明:
' i0 M+ L1 `1 d$ Y, ]5 j9 w0 \2 A  }- x+ q
) [4 G0 o# F0 I2 J! A- p1 f: H: u
J_E26%$$[6_`$UJTB0`FR]N.png 5 Q7 \4 h, x( R- b  }" f
6 V+ Z8 I& q0 d# G* u9 e
J]4QWL0QKJ@A@L41Z8FGU~1.png 0 U" o% t/ M7 u0 J; ]

& @: @/ N1 U! g  s0 i/ |
& Z: A3 K) u8 @$ L
在客户系统中,IO0~IO3 的 4 线通讯模式下信号波形如下图,可以看出每经过 8 个CLK 周期就有很长一段时间的延时。如果提高 CPU 的主频,这个延时会缩短,但客户测到最短的延时也有 200ns,并且一直存在:
4 m0 A& B+ U/ X  Z% v/ j/ s" E
6 e7 p" c" ]- @2 r3 ^3 `

2 m" d8 n/ [9 d' g! h IR2~ST4W26[VL]]A9Z~HW`0.png 9 r7 X# S$ Q& \

" X* G- w" Q% W8 M, o
* d1 `( C9 A; C) ]
3. 问题解
5 J$ I/ F" `& t
3 @3 @: k" L! v( G6 E
从客户测试波形上看,由于是 4 条数据线,因此 8 个 clock 正好是 4bytes,也就是32bits 数据。怀疑 STM32L4R9 QSPI 在 DMA 通讯中,读到一个 word(32bits)数据后需要在内部做一定的数据处理,造成时间延迟。
9 F8 B5 O7 |1 {( z# Z/ C分析代码发现,DMA 设置的是 byte 传输模式,如下面代码:
. }& {3 }$ z9 j3 e. D8 b% ?2 c#define BUFFERSIZE (COUNTOF(aTxBuffer) - 1) ' O8 G6 J4 z8 a9 V, [$ _
hdma.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
6 Q: w8 R2 u! g8 G, V* Q1 S  p hdma.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; & r9 z2 b. {& z% e  t7 Z; G

7 ]& g$ Y+ r' b' K+ Q7 `& { STM32L4R9 是 Cortex-M4 内核,系统总线是 32bits 的,怀疑是在 32bit 总线上传输byte 数据会降低效率,造成延迟,于是修改代码如下: 5 P" C% {: b, K, c2 d3 {9 o
示例代码在下面路径,需要使用附件中的 main.c 文件替换掉下面文件中的 main.c:& i7 b& k2 o+ D+ q  i, h! x3 s, Q
\STM32Cube_FW_L4_Vxx\Projects\32L4R9IDISCOVERY\Examples\OSPI\OSPI_NOR_ReadWrite_DMA\EWARM
& Y6 h- ^+ I" w  X6 [0 K另外程序中做如下改动:
# r+ O& m+ G% ?+ t: d, i: I0 g #define BUFFERSIZE 1024 // (COUNTOF(aTxBuffer) - 1)
; y1 @: n% r8 L; Y; p6 t' Whdma.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma.Init.MemDataAlignment = DMA_PDATAALIGN_WORD; 配置时请留意 OSPIHandle.Init.FifoThreshold = 4;
  G, i- O# q' h( l$ ~ //也需要 4 的倍数。修改代码后进行测试,代码读 4096bytes 的图像(1026 words),发现每个 word 数据中间的延迟已经没有了。之前速度提不上去的问题是 DMA byte 设置引起,因为STM32L4R9 是 32bits 系统,使用 8bits 传输会降低效率,需要改为 DMA 32bits 配置就OK 了。图形数据传输的总字节数也要设置为 4 的倍数,不足的需要补$ k, `7 c1 S8 r- ^  T
9 h$ E+ d( F. v
)DU)7O7MH_JF}1GIKF8M8G4.png : L+ p% t2 i1 q# P

* {  c: E: u. L3 M) f完整版请查看:附件 LAT1180_QSPI flash 速率过慢问题_v1.0.pdf (428.75 KB, 下载次数: 1)
收藏 评论0 发布时间:2023-2-14 16:21

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版