工具/软件:
开发环境:
- 微控制器 : MSP430F149
- 软件库 :FatFS(具有自定义磁盘 I/O 层)
- 缩写 :SPI
- 目标 :使用 FatFS 库访问 SD 卡以读取/写入文件。
- 元件 :SD 卡模块(SPI 模式)
问题描述
问题 :FatFS 库无法读取 SD 卡的扇区 0(主引导记录,MBR)。 发出 CMD17(单块读取)时、SD 卡会以 0x00 进行响应(表示命令成功)、但后续的数据读取操作仅返回 0xFF 字节。 既未收到预期的数据令牌 (0xFE)、也未收到错误令牌。
要重现的步骤
- 以 125kHz/SPI/SPI 时钟速度 8MHz 用于 SD 卡初始化时、初始化 MSP430F149 4MHz 模块。
- 执行 SD 卡初始化:
- 在 CS 高电平且 MOSI 高电平 (0xFF) 的情况下发送 74 个以上的时钟周期。
- 发送 CMD0 (GO_IDLE_STATE) 以进入 SPI 模式。
- 发送 CMD8 (SEND_IF_COND) 以验证电压兼容性。
- 发送 ACMD41 (SD_SEND_OP_COND)、直到卡以 0x00 进行响应。
- 发送 CMD17 (READ_SINGLE_BLOCK) 以读取扇区 0 (MBR)。
- 命令格式:0x51、0x00、0x00、0x00、0x00、 [CRC]
- 响应:0x00(成功)。
- 尝试读取 512 个字节的数据:
- 预期一个数据令牌 (0xFE) 后跟 512 字节 MBR 数据和 2 字节 CRC。
- 实际结果:接收到连续 0xFF 字节、无数据令牌或错误令牌。
预期行为
- 发送 CMD17 后、SD 卡应以 0x00(接受命令)进行响应。
- 在合理的超时(例如 100ms)内、SD 卡应发送数据令牌 0xFE、后跟 512 字节的 MBR 数据和 2 字节的 CRC。
实际行为
- CMD17 以 0x00 进行响应、表示命令已被接受。
- 读取数据块时、仅接收 0xFF 字节、表示 SD 卡处于空闲状态或未使用预期的数据令牌 (0xFE) 或错误令牌进行响应。