【问题标题】:u-boot mmc read_block limitiationsu-boot mmc 读块限制
【发布时间】:2016-08-12 22:56:05
【问题描述】:

我正在尝试将文件从 MMC/SD 卡复制到 U-Boot SPL 的全局变量(结构)中,该变量位于 OCRAM 中。到目前为止,我正在尝试使用

mmc->block_dev.block_read(0, file_sector, 4, &my_struct);

由于复制到 DRAM (DDR3/DDR4) 有效(如果我将 &my_struct 替换为 RAM 中的地址,则调用成功并且我可以正确地从 RAM 读取文件),我确定我的文件位于扇区的开头file_sector

但是,使用此代码,我得到:

ERROR: v7_dcache_inval_range - start address is not aligned - 0x100082f4
ERROR: v7_dcache_inval_range - start address is not aligned - 0x10008af4

block_read 的目的地位置上我应该注意一些要求/限制吗?

【问题讨论】:

  • mmc_read 应该使用字符缓冲区来完成它的工作。它不需要任何特定的对齐方式。
  • 什么是“DDRAM”?
  • 我的错,这是一个错字。应该读取 DRAM(文档说 DDR3/DDR4)

标签: embedded u-boot


【解决方案1】:

因此,部分答案是它在错误消息中所说的内容。 'mystruct' 所在的位置不是缓存对齐的,因此我们所做的刷新无效。您应该使用 ALLOC_CACHE_ALIGN_BUFFER 宏,并且正如@LPs 所述,将复制到字符缓冲区中。

【讨论】:

  • 感谢您的提示。从 common.h 文档中,我看到宏是在堆栈上分配的。是否有等效的分配头?我需要填写标题并将其读回两个单独的文件中。
  • 你是说堆?如果您已初始化 DDR,那么是的,您可以使用 memalign.h 中的 malloc_cache_aligned()
  • 是.. 堆... 抱歉 :) 感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 2019-04-03
相关资源
最近更新 更多