硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5033|回复: 8
收起左侧

[SPI/QSPI] STM32H7 QSPI跑的程序有大坑,卡了48小时

[复制链接]

61

主题

62

回帖

245

积分

高级会员

积分
245
发表于 2021-3-26 21:40:58 | 显示全部楼层 |阅读模式
STM32H7 QSPI跑的程序有大坑,这个指令缓存不能开启SCB_EnableICache();  ,否则我驱动的SD卡读文件经常失败,是DMA方式的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107664
QQ
发表于 2021-3-27 09:13:27 | 显示全部楼层
没遇到过这种问题。
回复

使用道具 举报

61

主题

62

回帖

245

积分

高级会员

积分
245
 楼主| 发表于 2021-3-27 10:34:51 | 显示全部楼层
eric2013 发表于 2021-3-27 09:13
没遇到过这种问题。

一样的程序,下载到内部FLASH中跑 SD卡正常。下载到QSPI FLASH中就有问题,如果不开启“指令缓存” 就正常?
这是哪方面的问题呢?只是程序放的地方不一样而已,所有外设都正常包括ucos系统,唯独SD卡有问题。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107664
QQ
发表于 2021-3-27 10:44:10 | 显示全部楼层
vzhaodan 发表于 2021-3-27 10:34
一样的程序,下载到内部FLASH中跑 SD卡正常。下载到QSPI FLASH中就有问题,如果不开启“指令缓存” 就正 ...

不太清楚你这个怎么回事,之前在我们V7板子上面测试过,正常。

回头我找下我做的那个例子,给大家分享下。
回复

使用道具 举报

61

主题

62

回帖

245

积分

高级会员

积分
245
 楼主| 发表于 2021-3-27 11:46:35 | 显示全部楼层
会不会MPU设置有关系?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107664
QQ
发表于 2021-3-28 08:38:16 | 显示全部楼层
vzhaodan 发表于 2021-3-27 11:46
会不会MPU设置有关系?

如果SD卡使用了DMA方式,可以简单省事些,直接通过MPU关闭此SD所使用RAM控件的Cache,读Cache和写Cache完全关闭即可。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2021-3-31 20:55:40 | 显示全部楼层
我之前遇到过SD卡无法读取文件,开启了下面这个功能:

  /* Enable I-Cache */
  SCB_EnableICache();

  /* Enable D-Cache */
  SCB_EnableDCache();

出现SD卡无法正确读取数据,参照
STM32Cube_FW_H7_V1.9.0\Projects\STM32H743I-EVAL\Examples\SD\SD_ReadWrite_DMA\Src\main.c,
可以解决这个问题,就是下面这两个函数调用,清缓存:
SCB_CleanDCache_by_Addr((uint32_t*)aTxBuffer, BUFFER_WORD_SIZE*4);
SCB_CleanDCache_by_Addr((uint32_t*)aRxBuffer, BUFFER_WORD_SIZE*4);

可以参考完整程序单独测试。
回复

使用道具 举报

61

主题

62

回帖

245

积分

高级会员

积分
245
 楼主| 发表于 2021-4-1 09:36:18 | 显示全部楼层
eric2013 发表于 2021-3-28 08:38
如果SD卡使用了DMA方式,可以简单省事些,直接通过MPU关闭此SD所使用RAM控件的Cache,读Cache和写Cache完 ...

原来是地址对齐的问题,函数内定义的一个数组未必是4字节对齐的,当把这个变量定义在函数外就正常。不过在内部flash跑时没发现这个问题,看来内部flash与外部flash加载程序的分配还是有区别。
回复

使用道具 举报

61

主题

62

回帖

245

积分

高级会员

积分
245
 楼主| 发表于 2021-4-1 11:43:31 | 显示全部楼层
120338 发表于 2021-3-31 20:55
我之前遇到过SD卡无法读取文件,开启了下面这个功能:

  /* Enable I-Cache */

外部FLASH运行代码, 开了 SCB_EnableICarche();   和没开速度测试是一样的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-11 12:02 , Processed in 0.225542 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表