当前位置: 首页 新闻资讯 技术问答

SDNAND的SPI模式时序图

SD NAND-贴片式TF卡-贴片式SD卡-免费测试2025-06-0343

SD NAND 在 SPI 模式下的操作时序图是理解其通信的关键。SPI 模式相比原生的 SD 总线模式更简单,只需要 4 根信号线(加上电源和地):

  1. CS (Chip Select / Slave Select - SS): 主机控制,低电平有效,选择 SD 卡。

  2. SCLK (Serial Clock - SCK): 主机产生,提供通信时钟。

  3. MOSI (Master Out Slave In - DI): 主机发送数据到 SD 卡。

  4. MISO (Master In Slave Out - DO): SD 卡发送数据到主机。

核心时序规则 (基于 SD Physical Layer Specification):

  • 字节传输: 数据以字节为单位传输,高位 (MSB) 在前。

  • 时钟极性/相位 (CPOL/CPHA): 模式 0 (CPOL=0, CPHA=0) 是强制要求的。

    • CPOL=0: SCLK 空闲时为低电平。

    • CPHA=0: 数据在 SCLK 的上升沿采样 (锁存),在下降沿切换 (改变)。

  • CS 作用: CS 必须在每个命令/数据块传输开始前拉低,并在传输结束后拉高。CS 为高时,MISO 应处于高阻态 (Hi-Z)。

  • 命令结构: 所有命令都是 6 字节固定长度:

    • Byte 1: 01xxxxxx (起始位 0 + 6位命令号 xxxxxx)

    • Byte 2-5: 32 位参数 (大端序 - MSB first)

    • Byte 6: 7 位 CRC7 + 结束位 1 (注意:在 SPI 模式下,CRC 通常可以禁用,发送 0xFF 或任意值,但初始化命令如 CMD0 的 CRC 可能是强制正确的)

  • 响应: SD 卡在接收到命令后会发送响应。响应类型和长度取决于命令。

  • 数据传输: 读写块数据时,有特定的起始/结束令牌和数据块结构。

关键操作时序图详解:

1. 命令发送与响应 (以 R1 响应为例 - 如 CMD0, CMD17, CMD24 等)

Host (Master)                             SD Card (Slave)
-------                                  -------
CS    ________________________________________/
          |                                |
SCLK  _   |   _   _   _   _   _   _   _    |   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _
      _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ ...
          | C1 | C2 | C3 | C4 | C5 | C6 | | R1 | ...
          |<----------- Command (6 bytes) ------>| |<-- Resp. -->|
MOSI -----X- C1 -X- C2 -X- C3 -X- C4 -X- C5 -X- C6 -X- FF -X- FF -X- ... (Host sends command + dummy bytes)
          |     |     |     |     |     |     |     |     |     |
MISO -----X-----X-----X-----X-----X-----X-----X--R1--X-----X-----X----- ... (SD card sends response after command)
          |     |     |     |     |     |     |     |     |     |
          SAMPLE SAMPLE ... SAMPLE SAMPLE SAMPLE SAMPLE SAMPLE ... (Host samples MISO on rising edge)

  • CS: 在发送命令前拉低,命令和响应传输期间保持低电平。响应结束后(或后续数据传输开始前)可以拉高(图中未完全画出)。

  • SCLK: 主机持续提供时钟。

  • MOSI (主机输出):

    • 主机依次发送命令的 6 个字节 (C1-C6)。

    • 命令发送完毕后,主机通常继续发送 0xFF (MOSI=高电平) 作为哑元字节 (Dummy Bytes),为 SD 卡提供时钟以输出响应数据,同时保持 MOSI 为高(避免干扰 MISO)。

  • MISO (SD卡输出):

    • 在接收命令期间,MISO 通常保持高电平 (Hi-Z 状态被上拉) 或输出无效数据。

    • 命令发送完成后 (第 6 个字节的最后一位发送完),SD 卡开始准备响应。

    • 响应数据 (图中是 R1,1 个字节) 在主机发送的后续 SCLK 下降沿上被 SD 卡放到 MISO 线上。

    • 主机在 SCLK 的上升沿采样 MISO 线,获取响应字节。

  • R1 响应: 1 个字节,最高位 (bit7) 为 0 表示命令执行成功或状态。其他位表示错误或状态标志 (如空闲状态、擦除复位等)。例如 0x00 表示成功且处于空闲状态。

2. 读取数据块 (CMD17 - READ_SINGLE_BLOCK)

Host (Master)                             SD Card (Slave)
-------                                  -------
CS    _______________________________________________________________________________/
          |                                                                 |
SCLK  _   |   _   _   _   ...   _   _   _   _   _   ...   _   _   _   _   ...   _   _   _
      _/ _/ ... _/ _/ ... _/ _/ _/ _/ _/ ... _/ _/ _/ _/ ... _/ _/ _/ _/ ...
          |<----- CMD17 (6 bytes) ---->| | R1 | | Token | |<---- Data Block (512 Bytes) ---->| | CRC1 | | CRC2 | ...
          | C1 | C2 | ... | C6 | | R1 | | FE | | D0 | D1 | ... | D511 | | C1 | | C2 | ...
MOSI -----X- C1 -X- C2 -X- ... -X- C6 -X- FF -X- FF -X- ... -X- FF -X- ... -X- FF -X- ... (Host sends command, then continuous dummy bytes (0xFF))
          |     |     |         |     |     |     |         |         |         |     |
MISO -----X-----X-----X-----...-X-----X--R1--X--Token-X- D0 -X- D1 -X- ... -X-D511-X- CRC1 -X- CRC2 -X-... (SD card sends R1, Data Start Token, Data, CRC)
          |     |     |         |     |     |     |     |     |         |         |     |
          SAMPLE ... SAMPLE ... SAMPLE SAMPLE SAMPLE SAMPLE SAMPLE ... SAMPLE ... SAMPLE ... (Host samples MISO on rising edge)

  1. 发送 CMD17: 主机发送带地址参数的 CMD17 命令 (6字节)。

  2. 接收 R1 响应: 主机在发送哑元字节 (0xFF) 的同时,采样 MISO 获取 R1 响应 (1字节)。如果 R1 指示错误,主机应终止读取。

  3. 等待数据令牌: 如果 R1 正常,主机继续发送 0xFF (哑元) 并采样 MISO,等待数据起始令牌 0xFE (图中 Token)。在收到 0xFE 之前可能收到 0xFF (忙)。0xFE 表示数据块即将开始传输。

  4. 接收数据块: 收到 0xFE 后,主机在接下来的 512 个 SCLK 上升沿采样 MISO,获取 512 字节的数据 (D0-D511)。

  5. 接收 CRC 字节: 数据块之后,SD 卡会发送 2 个字节的 CRC 校验码 (CRC1, CRC2)。在 SPI 模式下,主机通常忽略 CRC 校验,但仍需提供足够的时钟让 SD 卡输出它们 (主机继续发送 0xFF 哑元)。

  6. 结束: 数据传输完成后,主机可以拉高 CS。

3. 写入数据块 (CMD24 - WRITE_BLOCK)

Host (Master)                             SD Card (Slave)
-------                                  -------
CS    _____________________________________________________________________________________________________/
          |                                                                                     |
SCLK  _   |   _   _   _   ...   _   _   _   _   _   ...   _   _   _   _   ...   _   _   _   _   ...   _   _
      _/ _/ ... _/ _/ ... _/ _/ _/ _/ _/ ... _/ _/ _/ _/ ... _/ _/ _/ _/ ... _/ _/ _/ _/ ...
          |<----- CMD24 (6 bytes) ---->| | R1 | | Token | |<---- Data Block (512 Bytes) ---->| | CRC1 | | CRC2 | | Resp | | ... (Busy)
          | C1 | C2 | ... | C6 | | R1 | | FE | | D0 | D1 | ... | D511 | | C1 | | C2 | | XXX | | FF | ...
MOSI -----X- C1 -X- C2 -X- ... -X- C6 -X- FF -X- FF -X- TokenX- D0 -X- D1 -X- ... -X-D511-X- CRC1 -X- CRC2 -X- FF -X- FF -X- ... (Host sends cmd, dummy, start token, data, dummy CRC, dummy for response/busy)
          |     |     |         |     |     |     |     |     |         |         |     |     |     |     |     |
MISO -----X-----X-----X-----...-X-----X--R1--X-----X-----X-----X-----...-X-----X-----X-----X-----X--Resp-X- FF -X-... (Busy: 0x00) (SD card sends R1, then accepts data, then sends Data Response Token, then busy)
          |     |     |         |     |     |     |     |     |         |         |     |     |     |     |     |
          SAMPLE ... SAMPLE ... SAMPLE SAMPLE SAMPLE SAMPLE SAMPLE ... SAMPLE ... SAMPLE SAMPLE SAMPLE SAMPLE ... (Host samples MISO)

  1. 发送 CMD24: 主机发送带地址参数的 CMD24 命令 (6字节)。

  2. 接收 R1 响应: 主机在发送哑元字节 (0xFF) 的同时,采样 MISO 获取 R1 响应 (1字节)。如果 R1 指示错误 (如写保护),主机应终止写入。

  3. 发送数据起始令牌: 如果 R1 正常,主机主动发送数据起始令牌 0xFE (图中 Token)。

  4. 发送数据块: 主机紧接着发送要写入的 512 字节数据 (D0-D511)。

  5. 发送哑元 CRC: 主机发送 2 个字节的哑元 CRC (通常为 0xFF 0xFF),因为 SPI 模式通常禁用 CRC 校验。

  6. 接收数据响应令牌: 主机在发送完哑元 CRC 后,继续发送 0xFF (哑元) 并采样 MISO,等待数据响应令牌 (图中 Resp,1字节)。这个令牌的格式是 0bxxx0sss1

    • 010 (0x05): 数据被接受,写入开始。

    • 101 (0x0B): CRC 错误 (即使禁用了也可能发送)。

    • 110 (0x0D): 写错误。

    • 低 3 位 sss 表示状态:

    • 主机需要检查状态位是否为 010 (数据被接受)。

  7. 等待写入完成 (Busy): 收到 010 响应后,SD 卡开始内部编程操作。此时 MISO 线会被 SD 卡拉低 (输出 0x00) 表示忙 (Busy)。主机需要持续发送 0xFF (哑元) 并采样 MISO,直到 MISO 重新变为高电平 (0xFF),表示写入完成。这段时间可能很长 (几毫秒到几百毫秒)。

  8. 结束: 写入完成后,主机可以拉高 CS。

重要注意事项:

  • 初始化: 上电后需要通过 CMD0 (带正确的 CRC)、CMD8、CMD58、CMD55+ACMD41 等命令序列初始化 SD 卡进入 SPI 模式并完成电压检查、OCR 读取、初始化流程。初始化阶段的时序与命令响应时序类似。

  • OCR 读取 (CMD58): 响应是 1 字节 R1 + 4 字节 OCR 寄存器。时序是命令发送 -> R1 -> 4字节 OCR (高位在前) -> 结束。

  • 时钟速度: 初始化阶段必须使用低速时钟 (通常 100-400 kHz)。初始化完成后,可以通过 CMD16 (设置块长度,通常是 512) 和 CMD0 (软复位) 后,再使用 CMD59 (CRC_ON_OFF) 禁用 CRC,最后才能切换到高速 SPI 时钟 (可达 25 MHz 或更高,取决于卡支持)。

  • CRC: SPI 模式下强烈建议使用 CMD59 禁用 CRC (arg=0),以简化操作。初始化命令 CMD0 的 CRC (0x95) 和 CMD8 的 CRC (0x87) 通常是强制要求正确的。

  • 超时: 在等待响应令牌 (如读的 0xFE、写的响应令牌) 和忙状态时,主机必须实现超时机制,避免永久等待。

  • CS 管理: 除了数据传输块期间,CS 可以在命令之间拉高。但在一个命令/数据块传输未完成前,CS 必须保持低电平。

  • 厂商差异: 不同厂家/型号的 SD NAND 在细节上 (如响应延迟、初始化流程细微差别) 可能有差异,务必参考具体芯片的数据手册。

调试建议:

  • 使用逻辑分析仪或示波器抓取 SPI 信号 (CS, SCLK, MOSI, MISO) 是调试 SD NAND SPI 通信最有效的方法。

  • 对照 SD Physical Layer Specification 和具体芯片的数据手册分析波形。

  • 重点检查:CS 时序、SCLK 极性/相位、命令格式、响应内容、数据块起始/结束令牌、忙状态。

理解这些时序图对于成功驱动 SD NAND 在 SPI 模式下工作至关重要。务必仔细阅读你所使用的 SD NAND 的具体规格书。

9d5f6d94ac88380365476edb9c564d3.jpg6603af42673d992bc4d6e5de1e8d922.jpg09e5d20fe3d0963e7dc0247f7e95245.jpg

热门标签:SD NAND FLASH 贴片式TF卡 贴片式SD卡 SD FLASH NAND FLASH


SD NAND-贴片式TF卡-贴片式SD卡-免费测试

深圳市芯存者科技有限公司

售前咨询
售前咨询
售后服务
售后服务
联系我们

电话:176-6539-0767

Q Q:135-0379-986

邮箱:1350379986@qq.com

地址:深圳市南山区蛇口街道后海大道1021号C座C422W8

在线客服 在线客服 QQ客服 微信客服 淘宝店铺 联系我们 返回顶部