完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我无法理解 FlexSPI AHB RX 缓冲区的工作原理,并且在从外部 QSPI 闪存执行代码时性能意外大幅下降。我使用的开发板是 MIMXRT1060-EVKB。
我正在测试的代码是一个非常简单的 for 循环,周期性地切换 gpio 和 led:for (uint32_t time=0; time < us; time++) { }。它在内存中占用 20 个字节。闪存的行为就好像每 32 字节就有一个屏障,穿过它时会导致性能下降,并且好像 AHB RX 缓冲区只能容纳一个 32B 页面。因此,如果代码存储在 0x60002F60 和 0x60002F74 之间,则它不会跨越 32B 屏障,并且如果启用或禁用核心缓存,以及是否在 FlexSPI 中启用预取,循环将以相同的频率执行。如果代码存储在 0x60002F70 和 0x60002F84 之间,它将跨越边界,并且在禁用核心缓存时执行速度慢 6 倍,在禁用预取时速度慢 100 倍。启用预取时, 在 FlexSPI 寄存器中,AHBCR[READSZALIGN] 设置为 0,闪存在单独模式下访问。AHBRXBUF0-2 未配置,因此 AHBRXBUF3 的大小应等于 AHB RX 缓冲区总大小,根据 AN12437 为 128*64 位。它也应该用于所有读取访问,这似乎是因为在 AHBRXBUF3CR0 中禁用 PREFETCHEN 导致与在 AHBCR 中禁用 PREFETCHEN 相同的结果。MPU未激活。AHBRXBUF0-2 控制寄存器还提到了 AHBBUFREGIONiSTART 和 AHBBUFREGIONiEND,我在参考手册中找不到关于这些字段的任何信息。 按照 AN12437 中的建议激活核心缓存或将代码放入 ITCM 可以解决问题,但我想了解为什么会出现这种行为。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1904个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36342 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4391 浏览 0 评论
6043 浏览 1 评论
6757 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4207 浏览 0 评论
615浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
612浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
602浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
692浏览 2评论
789浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-17 19:26 , Processed in 1.054801 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号