使用 SPI 接口初始化 microSD 卡

2024-04-01

我正在使用一个microSD http://en.wikipedia.org/wiki/Secure_Digital#Physical_size卡采用嵌入式设计。该卡使用 SPI 接口连接到微控制器。它适用于我以前使用过的所有卡,但现在我的新卡无法初始化。该卡是 Transcend 2 GB microSD 卡 (TS2GUSD)。

发送初始时钟序列以切换到 SPI 模式后,我执行以下操作:

  1. CMD0(参数 0,CRC 0x95)-> 响应 0x01 -> OK

  2. CMD8(参数 0x000001AA,CRC 0x87) -> 响应 0x01 0x000001AA -> 表示它是 SDC V2+ 卡,支持电压范围 2.7 V - 3.6 V -> OK

然后我应该发送 ACMD41 命令,但是当发送必须在 CMD41 之前的 CMD55(参数 0,CRC 0)时,我得到响应 0x05 -> 非法命令。 我也尝试过发送 CMD1 (对于 MMC 卡),但它给出了类似的非法命令回复。该代码适用于我的 Sandisk 2 GB microSD 卡。

我该如何解决这个问题?


我好像发现问题了。当我计算 CMD55 的正确 CRC 并发送它而不是虚拟 CRC 时,命令被接受(结果 0x01)。如果你看物理层规范 http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf在第 7.2.2 节中,明确指出:

SPI 接口默认在 CRC OFF 模式下初始化。 (命令 CMD0 和 CMD8 除外)。

这一系列的Transcend卡似乎并非如此,因此违反了规范。此外,如果出现 CRC 错误,回复应为 0x09 而不是 0x05。我尝试使用 CMD59 显式关闭 CRC 检查,但这似乎没有帮助。

=> 为(所有?)命令计算正确的 CRC 使卡正常工作。

我正在就此事与 Transcend 支持部门联系。如果我学到一些有用的东西,你就会在这里知道。

请注意,我之前使用过其他 2 GB Transcend 卡,但它们是台湾制造的,而新卡是韩国制造的(似乎是三星卡(MMAGR02GUDCA))。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SPI 接口初始化 microSD 卡 的相关文章

  • 安全存储和访问 EEPROM

    我最近发现需要将不经常更新的配置变量存储在微控制器的 EEPROM 中 向程序添加状态会立即让人担心 检测 EEPROM 中未初始化的数据 即首次启动 转换旧固件版本的数据或使其无效 以及 多个结构的寻址 每个结构都可能在固件更新中增长 广
  • IIR 滤波器的 C 语言实现

    我正在尝试用 C 实现 IIR 滤波器FRDM KL25Z http www freescale com webapp sps site prod summary jsp code FRDM KL25Z木板 我当前的代码如下所示 inclu
  • STM32 上的位置无关代码 - 指针

    我已成功在 STM32 上构建并运行位置无关的代码 向量表和 GOT 已修补 一切正常 但我对这样的代码有问题 double myAdd double x return x 0 1 double ptrmyAdd double myAdd
  • 嵌入式使用的轻量级(解)压缩算法

    我有一个带有图形用户界面的低资源嵌入式系统 该界面需要字体数据 为了节省只读存储器 闪存 需要压缩字体数据 我正在寻找一种用于此目的的算法 要压缩的数据的属性 每个像素 8 位的矩形像素图的透明度数据 字体中通常有大约 200 300 个字
  • 将字符串数据附加(添加)到 Android 应用程序中的 SD 卡文本文件

    这里只是简单说一下 虽然我的代码似乎可以使用写入内部或外部 SD 卡 存储中的 mytext txt 文件的标准技术将字符串数据等存储在新文件中 但对我来说 我的应用程序更有用通过重复允许用户重复该过程 例如用户输入和按钮保存 或关闭应用程
  • Yocto 构建上的 JAVA 安装错误

    我在 Poky Linux 系统上安装 Java 时遇到了很多麻烦 我正在使用 Yocto 构建我的系统 配置如下 本地配置文件 MACHINE intel corei7 64 DISTRO poky PACKAGE CLASSES pac
  • 将 ASM 转换为 C(不是逆向工程)

    我用谷歌搜索 发现数量惊人的轻率回复 基本上都是在嘲笑提出这样问题的提问者 Microchip 免费提供一些源代码 我不想将其发布在这里 以防万一 基本上 谷歌 AN937 单击第一个链接 其中有一个 源代码 链接及其压缩文件 它在 ASM
  • __CC_ARM、__ICCARM__、__GNUC__ 和 __TASKING__ 宏的含义是什么?

    我正在 stm 的 STM32l151rct6a 上工作 我偶然发现了这些宏定义 CC ARM ICCARM GNUC TASKING 有谁知道他们的意思吗 这些是针对 ARM 处理器的不同编译器 可能这些宏用于隐藏可由多个编译器编译的代码
  • 如何在 Eclipse 中为托管 ARM C 项目添加单元测试?

    我有一个托管 Eclipse 项目 它使用 GNU ARM 嵌入式工具链为 ST 微控制器进行编译 我现在想做的是 对该项目中的代码进行单元测试 我想用于单元测试的框架是Google Test 我尝试为单元测试创 建第二个 Eclipse
  • WinForms 中如何处理不可见控件的绘制?

    我正在尝试覆盖OnPaintwindows窗体中的事件 NET 紧凑框架 到目前为止 我已经能够使用渐变 圆角矩形等来绘制控件 而这通常是常规控件无法实现的 但是 当我想让控件不可见时 我遇到了问题 现在 我所做的就是重新绘制除那些不可见控
  • 如何将视图作为图像保存到 SD 卡

    我的应用程序使用表格布局 表格行和文本视图创建一个拼图网格 我希望用户能够将该网格保存到 SD 卡上 以便可以打印 复制或加载到其他设备上 如何保存视图 以便在打印时它看起来就像在 Android 屏幕上一样 None
  • Android - 如何在启动后启动 /sdcard 上的应用程序

    有没有一种方法可以在启动后自动启动Android应用程序 如果它位于Android应用程序上 sdcard 好吧 大概是通过BroadcastReceiver 但哪种行动是正确的呢 ACTION BOOT COMPLETED does no
  • c - 将 uint8_t* 转换为 uint32_t* 行为

    我读过这个问题 将 uint8 转换为 uint32 如何工作 https stackoverflow com questions 28603243 how does casting uint8 to uint32 work但我不确定给出的
  • 如何查找 C++ 中的内存泄漏

    在嵌入式环境中检测 C 内存泄漏的好方法是什么 我尝试重载 new 运算符来记录每个数据分配 但我一定做错了什么 这种方法不起作用 还有其他人遇到过类似的情况吗 这是 new 和 delete 运算符重载的代码 EDIT 完全披露 我正在寻
  • C 嵌入式应用程序中 time() 函数的问题

    我在用time 在 ARM 微控制器上 处理器一到达此函数就会重新启动 奇怪的是 当我处于调试模式时 代码运行得很好 但一旦我想将其应用到独立模式 我就会遇到重置 我是否忽略了什么 这个功能有替代品吗 代码部分是这样的 include
  • 在 SD 卡上安装 Android 应用

    我开发了一个可以安装在 SD 卡或移动内存中的应用程序 我用了android installLocation属性设置为 auto 现在我面临的问题是 当我在设备上运行应用程序时 它显示我已启用 移动到 SD 卡 按钮 但是当我将应用程序上传
  • 创建 32 位计数器时出现全局变量问题

    我正在尝试做正交解码 using 爱特梅尔 Xmega AVR微控制器 Xmega只有16 bit柜台 另外 我已经用完了所有可用的计时器 现在要做32 bit柜台我用过一个16 bit柜台并在其over under flow interr
  • C 中的可移植函数(无汇编)返回其堆栈帧的大小

    用 C 编写一个可移植函数 无需汇编 返回其堆栈帧的大小 int stackframe size 尝试如下解决 该函数在使用 VS 2010 编译时返回 228 字节 有没有办法验证其正确性 int stackframe size int
  • CC2538 的 Contiki UDP 数据包传输持续时间

    有人可以解释一下 Contiki OS 传输 UDP 数据包时发生了什么吗 以下是我的设备使用 CC2538 芯片运行时的详细电流消耗 我的问题是 既然理论上在 250kbps 下 408 位长度的数据包应该在大约 2ms 内传输 为什么要
  • 访问角落里的存储

    我能找到的与文件存储有关的最接近文档的是这个帖子 http nookdeveloper zendesk com entries 20257971 updated what are the size constraints on my app

随机推荐

  • 如何使用 sql server management studio 将 blob 插入数据库

    如何轻松地将 blob 插入到varbinary MAX field 举个例子 我要插入的是 c picture png该表是我的表该列是 mypictureblob这个地方是recid 1 您可以在 SQL Server Manageme
  • 如何更改 Eclipse for Android 中的 Control+Space 自动完成快捷键

    当我在 Android xml 文件 例如活动菜单 中并输入 android 然后会弹出自动完成功能 我可以选择一个选项 但是 如果我有类似的东西 android showAsAction 将光标放在引号内 然后我不会自动完成引号内的选项
  • 解压大zst文件

    我有一个 16GB 的压缩 zst 文件 我该如何在windows上解压它 我没有内存来处理解压版本 因此需要将其直接写入文件 冒着听起来显而易见的风险 您需要一个支持 zstandard 的 Windows 解压缩器 At the zst
  • 基于 ATL 的链接器错误

    我最近遇到了 atls lib 的链接问题 我用以下内容更新了链接器的附加依赖项行 comctl32 lib C WinDDK 7600 16385 1 lib ATL i386 atls lib C WinDDK 7600 16385 1
  • 如何将十六进制字符串分配给 char[] 变量?

    假设我的十六进制字符串 hexStr aecf 如何将十六进制字符串值分配给unsigned char myChar 如下 谢谢 myChar 0 0xae myChar 1 0xcf 您可以按如下方式转换数据 char hexstr ae
  • 如何创建可以使用 rundll32.exe 运行而无需指定入口点的本机 C++ DLL

    我将如何创建一个可以使用 rundll32 exe 执行的本机 dll不指定入口点 例子 C gt rundll32 exe mydll dll 我在 Visual Studio 上创建了一个 DLL 项目 但我不知道在哪里放置我的代码 V
  • 对 15 个谜题状态进行哈希处理的有效方法的想法

    我正在通过蚁群优化实现一个 15 谜题求解器 并且正在考虑一种有效地将每个状态散列为数字的方法 因此我浪费了最少的字节 状态由 16 个数字的列表表示 从 0 到 15 0 是空洞 Like 1 2 3 4 5 6 7 8 9 10 11
  • Oracle 处理很长的 IN 运算符列表的效率如何

    我有以下查询 这是一个更复杂的查询的简化版本 SELECT FROM TPM TASK WHERE PROJECTID VERSIONID IN 3 1 24 1 4 1 在代码中我将构建它 PROJECTID VERSIONID 以编程方
  • 对 PictureBox 的透明控制

    在我的 C 表单中 我有一个标签 显示下载事件中的下载百分比 this lblprg Text overallpercent ToString 0 Label 控件的 BackColor 属性设置为透明 我希望它显示在 PictureBox
  • Haswell 微架构在性能中没有停滞周期后端

    我在 Haswell CPU Intel Core i7 4790 上安装了 perf 但 性能列表 不包括 stalled cycles frontend 或 stalled cycles backend 我检查了http www int
  • 用底部三角形制作div

    我一直在努力做白色形状与一个div http sircat net joomla sircat mies 2 png http sircat net joomla sircat mies 2 png 如何获得 div 底部的对角线形状 我有
  • 在 JSON.NET 中序列化/反序列化字节数组

    我有一个具有以下属性的简单类 JsonObject MemberSerialization OptIn public class Person JsonProperty PropertyName Photograph public byte
  • 纯Python XSLT 库

    有没有纯Python 的XSLT 库 在我需要支持的某些平台上安装 libxml2 libxslt 或任何类似的 C 库是一个问题 我确实只需要基本的 XSLT 支持 速度不是主要问题 不幸的是 目前还没有纯 python XSLT 处理器
  • 提供语言服务的问题

    我发现了两种在互联网上提供语言服务的方法 第一种方式 http msdn microsoft com fr fr library vstudio bb166498 28v vs 110 29 aspx涉及使用IOleComponentMan
  • 将 Android 应用程序连接到远程数据

    谢什谈论的信息有限 我正在尝试让我的 Android 应用程序连接到在线数据库以访问信息 有相当多的信息 包括地理标签 这些信息将映射到我的应用程序上 开发者网站有非常丰富的信息 您可以使用网络 如果可用 在您自己的基于 Web 的服务上存
  • 将 PDF 表单数据接收到 PHP 中

    所以我在网上寻找了几个小时 我认为这是一个非常简单的答案 但我似乎找不到它 我试图了解 PDF 表单数据提交的工作原理 我的目标是读取从我设置到 PHP 脚本中的 PDF 表单提交的表单数据 我希望我的 PHP 脚本能够解析表单数据并将其插
  • Django 管理错误“WSGIRequest”对象没有属性“用户”

    我正在练习 Django 当我尝试去http localhost admin http localhost admin 我收到以下错误 我已检查 settings py 并且 MIDDLEWARE CLASSES 确实存在 是否还有其他原因
  • Apache NiFi 用于将数据从 RDMBS 导入到 HDFS - 与 SQOOP 的性能比较

    我们正在探索 Apache NiFi 作为满足我们企业需求的通用数据摄取工具 一种典型的数据摄取要求是从 RDBMS 移动数据 系统到 HDFS 我能够使用 NiFi 提供的GenerateTableFetch 和 ExecuteSQL 处
  • 混洗两个 __m128i 的 64 位部分的最佳方法

    我有两个 m128is a and b 我想进行洗牌 以便高 64 位a落在低 64 位dst和低 64 位b落在上64dst i e dst 0 63 a 64 127 dst 64 127 b 0 63 相当于 m128i dst mm
  • 使用 SPI 接口初始化 microSD 卡

    我正在使用一个microSD http en wikipedia org wiki Secure Digital Physical size卡采用嵌入式设计 该卡使用 SPI 接口连接到微控制器 它适用于我以前使用过的所有卡 但现在我的新卡