sd卡spi驱动(2)--SD卡读写块

本文详细介绍了SD卡通过SPI接口进行读写块操作的注意事项和步骤,包括SD卡的字节寻址与块寻址的区别,CMD17和CMD18的单块读取与连续读取,以及CMD24和CMD25的单块写入和连续写入。内容涵盖了操作顺序、时序图和实现代码示例。

读写注意事项

SD 卡的读写要分情况,虽然每次读写都是以块为单位,但是 SD 卡的指令寻址有区分,指令寻址就是命令的参数部分,如下图的 CMD17 命令的 data address 部分

在这里插入图片描述
在这里插入图片描述

从数据手册可以看出,这个寻址方式在 SDSC(<=2GB)上是按字节寻址,在 SDHC(4GB-32GB) 和 SDXC(64GB-2TB) 上是按块寻址,具体是什么类型的卡,可以通过读取 OCR 寄存器的 CCS 位的得知

读写时的每个块的大小可以通过 CMD16 进行设置,默认是 512 字节

SD 卡的读

SD 卡读块分为单块读取和连续读取

单块读(CMD17)和多块读(CMD18)其实操作差不多,时序图如下

在这里插入图片描述

读相关的令牌描述如下

在这里插入图片描述

具体操作顺序如下

  1. 发送读命令
  2. 连续读,等待 SD 卡发送 0xfe
  3. 连续读 512 字节
  4. 读取末尾2字节 CRC
  5. 需要连续读时重复 2-4 步骤,末尾发送 CMD12

具体实现代码如下

void recv_datablock(u8 *data_buf, u32 block_len)
{
   
   
    u32 cnt = 0;
    while (spi_read_byte() != 0xfe);
    while (cnt < block_len) data_buf[cnt++] = spi_read_byte();
    spi_send_clock(2*8);
}

void sd_read_blocks(u8 *data_buf, u32 sector, u32 count)
{
   
   
    u32 tmp_cnt = 0;
    sd_send_cmd_spi_enter
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值