主题中讨论的其他器件:TDA2
工具/软件:Code Composer Studio
你(们)好
SDIO 交换数据时出现问题。
当我从 SD 卡读取数据时、数据会正常运行。 在读取事务之前、我正在等待 MMC_STAT 的 BRR 标志、当它设置为1时、我进行读取、
但是、当我尝试将一些数据写入 SD 卡块时、会出现问题。 当我等待 BWR 时、它不会设置为1。 它始终等于0。
出什么问题了?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
伊万
我很确定。 TDA3中的 MMC 模块 从一开始就仅限于 SDIO。 实际上、这是在 TDA2和 DRA75x 等早期 SoC 中称为 SDIO 接口的 MMC4模块。
MMC1用于 eMMC、而 MMC2专用于 MMC/SD 卡、并不完全受支持。
您是对的 -数据表显示 SD、MMC 卡将在内部与团队一起检查。 这很可能是文档错误。
实际上、SDIO 卡使用与 SD 卡相同的协议(如果我错了、请更正我)、因此 SD 卡可能可以正常工作。 需要解决的问题之一是处理 TDA3上缺失的写保护和卡检测引脚(例如通过 GPIO)。 目前、在您的情况下 、软件驱动程序可能会"认为" SD 卡具有写保护功能。
但是、请注意、由于 TDA3上的 SD 卡未经过测试和验证、TI 将无法进一步为您提供帮助。
此致、
STAN
您好、Stan
我将尝试描述我 偶尔如何将数据写入 SD 卡(在我询问此主题上的此问题之前)
编写过程包括一些步骤(一般情况下):
(1)准备 MMC_IE 寄存器中的 BWR 位
->(2)使用 CMD 线路发送命令
->(3)等待 MMC_STAT 寄存器中的 Bwe
->(4)发送数据。
因此、此函数未起作用、但... 当我在步骤(1)和(2)之间设置断点时、它已经起作用。
执行此操作后、我在没有断点的情况下重复执行此函数、但它仍然有效。
然后、当我重新启动 TDA3器件时、我需要使用断点重复该操作。
然后、我决定执行读取功能。 我对其进行了测试、然后我的写入函数开始不正确工作(现在它不工作)
断点操作如何影响写入函数?
您好、Stan
我使用的是评估板(我忘记注意到、它可能很有名)
但是
我发现了这个错误!
如图所示、我需要轮询 MMC_STAT 寄存器中的 BWR 位以将数据写入缓冲器。 但是、在 MMC_IE 寄存器中准备 BWR 位并发送 CMD 后、该位始终为零。
根据参考手册、在我发送 CMD 后、在 MMC_PSTATE 中 WTA 位和 Bwe 位都变为1
但 MMC_STAT 中的 BWR 位仍然为0。
当我从 PDK 驱动程序中学习示例时、我看到软件也轮询 BWR 位 MMC_STAT。
因此、我决定轮询 MMC_PSTATE 中的 Bwe 位(而不是 MMC_STAT 中的 BWR 位)、它开始工作。 它真的很有效!
参考手册或/和 PDK 中是否有错误?
您好、Ivan、
很高兴听到您使写操作正常!
由于控制器被配置为 DMA 模式、因此您看到 BWR 始终为0的原因可能是原因。 请参阅 TRM 中的以下注意事项:
缓冲区写入准备就绪
注:如果 DMA 发送模式被启用、该位为
从不置位、而是 DMA 向主器件发送请求
生成系统的 DMA 控制器。
通常、此类外设在 DMA 模式下使用、因此在初始化期间、MMC 驱动程序已将 SDIO 模块配置为 DMA。
此致、
STAN