SD2.0 Specification之CRC(Cyclic Redundancy Code)

10 篇文章 0 订阅

文章目录

本文章主要讲解关于SD2.0中的CRC应用,其它基础概念和其它内容请参考以下文章。
SD2.0 Specification简述

CRC全称为Cyclic Redundancy Code,中文名称是循环冗余校验,该方法通过附加冗余数据来保证数据的完整性,即用于检测数据是否发生错误,但不能用于纠正错误。

在SD2.0中使用CRC7和CRC16两种。

  • CRC7
    所用命令都会使用CRC7生成检验码并附在命令参数后面,而对于Response,除了R2和R3特殊,其它CRC7使用方式都跟命令一样。如下图所示,R2只对CID和CSD的内容进行CRC7的检验码计算,而R3则没有校验码。
    R2
    R3
  • CRC16
    CRC16是针对在DAT线上传输的数据做CRC计算,如果使用4根DAT线传输数据,则每根DAT线是独立计算CRC的。

当SD卡接收命令时使用CRC校验发现命令数据出错了,那SD卡不会执行该命令,也不会回Response,而是在状态寄存器里标记有CRC错误。

CRC (循环冗余检测) 是一种在数据传输中常用的错误检测机制。它的工作原理是通过生成校验码来检测数据传输过程中是否出现了错误或者损坏。 举个例子来说明CRC的工作原理:假设我们要传输一串二进制数据:10111001。CRC的工作原理是在发送数据之前,通过特定的算法生成一个校验码。 首先,我们选择一个生成多项式,常用的有CRC-8、CRC-16CRC-32等。假设我们选择的是CRC-8,那么我们需要一个8位的生成多项式。比如说,我们选择的生成多项式是11001101。 接下来,我们将数据位数和生成多项式的位数相加,得到的结果就是校验码(Remainder)。对于这个例子来说,我们的数据位数是8位,生成多项式的位数也是8位,所以校验码的位数也是8位。 然后,我们在数据后面加上这个校验码。比如说,我们的数据是10111001,生成的校验码是1101,那么我们就将这两部分连接起来,得到101110011101。这个就是我们要发送的数据包,包括数据和校验码。 在接收端,当数据包传输完成后,接收端会使用同样的生成多项式来计算接收到的数据包是否存在错误。如果计算得到的校验码和接收到的校验码一致,就说明数据传输过程中没有出现错误。如果不一致,就说明数据包存在错误。 通过CRC,我们可以有效地检测到数据传输过程中可能出现的错误。这是因为CRC具有检测到单比特错误、双比特错误和多比特错误的能力。通过选择合适的生成多项式,CRC可以提供很高的错误检测能力,成为数据传输中常用的错误检测机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值