问题标签 [sdmmc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
27 浏览

assembly - 移动存储主机控制器。从 SD 卡读取时忽略电源开/关状态

恐怕我的问题可能是特定于板或 SoC 的。无论如何,我希望有人有这方面的经验。

SoC:RK3308(板:ROCK Pi S)。我在裸机环境中从 SD 卡读取:AArch64 EL3,DDR 已初始化,MMU/GIC 已禁用。

从 SD 卡中读取一个块。我假设,当我的代码获得控制权时,BootROM 将为我完成所有初始化,并且 SD 卡将准备好使用。这是。我可以成功地从卡中读取数据——FIFO 被填满。我的问题如下:

RK3308 技术参考手册第 2 部分第 3 章介绍了移动存储主机控制器。

SDMMC_PWREN 电源使能寄存器

位 [0]:power_enable。卡的电源开/关开关。打开电源后,固件应等待稳压器/开关启动时间,然后再尝试初始化卡。

1'b0:关机 1'b1:开机

位值输出到 card_power_en 端口

还,

SDMMC_CMD 命令寄存器

位 [15] 发送初始化

1'b0:在发送此命令之前不发送初始化序列(1 的 80 个时钟)

1'b1:发送此命令前先发送初始化序列 上电后,必须先向卡发送80 个时钟进行初始化,然后再向卡发送任何命令。在向卡发送第一个命令时应设置该位,以便控制器在向卡发送命令之前初始化时钟。不应为任何一种引导模式(备用或强制)设置此位

问题是当我的代码从 BootROM 代码中获得控制权时SDMMC_PWREN[0] = 0(断电)。但是从卡中读取是成功的。我尝试了设置SDMMC_PWREN[0] = 1,我还尝试SDMMC_CMD[15] = 1在上电后的第一个命令之前设置 80 时钟初始化序列。这一切似乎都没有任何效果。在所有情况下,从卡 (CMD17) 读取都是成功的。但是,response timed out如果我在设置power_enable=1.

当我的代码获得控制权时注册值:

我不明白SDMMC_PWREN注册的实际目的以及如何/何时使用它。任何细节将不胜感激。

我的测试代码很简单:

0 投票
1 回答
51 浏览

usb - 是否可以实现 DISKCOPY 从 eMMC 卷逐块复制到 USB 卷

我正在使用 STM32、FATFS、SDMMC、eMMC 并在 eMMC 上创建了 FATFS。我还在 USBH(主机模式)上创建了一个 FATFS 卷。这也可以正常工作。

eMMC FATFS 工作正常,然后我需要将所有文件从 eMMC 复制到 USB 驱动器。通过 FATFS 从 eMMC 逐个文件复制文件花费的时间太长。

我认为如果我只是盲目地将内存块(512字节)从eMMC复制到USBH会更快。所以我实施了足够的例程来做到这一点。问题是复制大约几百块后复制失败。故障似乎是由于 USBH 没有响应。

我的问题是:1-“是否可以像我尝试做的那样将原始数据从 eMMC 逐块复制到 USBH?” 2-有没有人成功做到这一点?

0 投票
0 回答
15 浏览

usb - FAT信息驻留在哪个块地址

我正在为我的 SDMMC(连接到 eMMC)和 USB 主机(连接到 USB 记忆棒)使用 FATFS。我试图找出 FAT 表在内存中的位置。我在网上阅读,但找不到任何地方说明。虽然,我认为它位于逻辑块 63。我的问题是:1- 它的固定标准位置是任意的吗?2-谁能告诉我更多阅读解释USB驱动器,SD驱动器的逻辑内存布局?

提前致谢。

0 投票
0 回答
80 浏览

arduino - 在 ACMD41 之后 microSDHC 停止响应

我正在尝试初始化 SDHC(大容量)的 microSD 卡。我从 CMD0 和 CMD8 得到逻辑响应。CMD8 正确地回显了我的论点(0x1AA)。

当我发送 ACMD41 时,我期待 R3 响应设置了繁忙位(根据物理层简化规范,版本 8.00)。相反,我反复从 CMD55 和 ACMD41 获得 0x01 的 R1 响应,直到卡完全停止响应任何命令。

我在面包板上使用 Arduino Nano 33 IoT,microSD 卡插入Maxmoral SPI microSD 卡适配器。我的 Arduino 的正极 3.3V 端子上有一个 10 欧姆的电阻。读卡器的 SPI 输入和输出进入 arduino 上的数字引脚。

它是一张 SanDisk 16 GB microSDHC 卡。

我假设这不是硬件或时间问题,因为像 CMD8 和 CMD58 这样的命令似乎可以工作(直到我发出 ACMD41)。我在任何命令之前发送 0xFF,如果没有它,我不会收到任何命令的响应。我在任何命令之前将 CS 引脚设置为低电平,并在接收数据后设置回高电平。

可能是什么问题?我对 ACMD41 的论点不正确吗?在我看来,该卡出于某种原因拒绝了主机。

这些是我为 ACMD41 测试过的论点:

这是用于初始化卡的代码:

这是发送单个命令的代码:

这是发送单个位的代码:

0 投票
1 回答
243 浏览

linux-kernel - sd 卡挂载失败,尝试挂载

在检测到 SD 卡但安装不成功时,Linux 中已包含基于 SPI 驱动程序的 SD 卡和特定于板的 SPI 驱动程序。请查看以下日志以供参考。

我在 buildroot fstab 文件中添加了 devtmpfs 条目。我检查了 /dev 并发现有一个 mmcblk0p1 条目,并且在根挂载点也有一个名为 /root 的目录。我无法找到导致此问题的原因。

任何帮助/指导表示赞赏。

0 投票
0 回答
26 浏览

sd-card - ATFSDC010 SD主控制器可以与eMMC通信吗?

我正在尝试使用 sd 主机控制器读取 eMMC 数据。

sd主机控制器:ATFSDC010 eMMC:KLM8G1GESD-B04P eMMC阅读器:用于ODROID的EMMC模块阅读器

首先,我已将 eMMC 初始化为传输状态(CMD0->CMD1->CMD2->CMD3->CMD7)

其次,我已经发送了 CMD18(READ_MULTI_BLOCK)

如果我发送 CMD18,sd 主机控制器开始时钟切换并从 eMMC 读取数据,上升沿(sd 主机控制器的 FIFO 只有 64 字节,所以它在读取 64 字节后停止时钟切换)

当我读取第一个 FIFO 的 64 字节时,它没有损坏

如果 FIFO 变空,sd 主机控制器重新启动时钟切换以读取 64 字节

当我读取第二个 FIFO 的 64 字节时,只有第一位数据总是被反转(例如:0x4a -> 0xca)和第三个 FIFO,第四个 FIFO ......是相同的

下面是第一个 FIFO 读取信号(数据为 0x4a) 在此处输入图像描述

下面是第四个 FIFO 读取信号(数据应该是 0x7a 但 0xfa)很奇怪我收到了 0xfa,但信号是 0xf4 或 0xea 在此处输入图像描述

我认为 SD 和 eMMC 的读取时序是不同的。下面是(1)SD卡、(2)eMMC的读取时序 在此处输入图像描述 在此处输入图像描述

我对吗?如果我误解了,请让我知道..

我还是个初学者。我问你的理解。

0 投票
0 回答
115 浏览

linux - linx mmc-utils 擦除命令未按预期工作

我有一个带有 eMMC 卡的系统,我正在尝试使用mmc-utils用户空间工具来使用 eMMC 规范(6.6.9 Erase)中定义的擦除功能。

植入对我来说是正确的。但是当我运行命令时,擦除没有按预期工作。 mmc erase secure-erase <start address in erase blocks> <end address in erase blocks> <device/path>

我期望擦除 2 个 524288 (0x0080000) 块。但只有一个块被擦除。我尝试了其他几个值,它们也没有擦除超过一个块。

我是否正确使用了该工具?它对其他人有用吗?这可能是我的 mmc 驱动程序的问题吗?还是问题出在 eMMC 上的固件上?