- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二、MMC/SD卡的模型和工作原理 PIN脚、SD卡总线、SD卡结构、SD卡寄存器、上电过程 SD卡寄存器:
?OCR:操作电压寄存器: 只读,32位 第31位:?表示卡上电的状态位?
?CID: 卡身份识别寄存器 只读 128位 生产厂商、产品ID,生产日期和串号等?
?CSD: 部分可写 128位 卡的容量、擦出扇区大小、读写最大数据块的大小、读操作的电流、电压等等
?CSR: 卡配置寄存器 64位 数据位宽?
?RCA: 16位 相关的卡地址寄存器,卡识别过程中主控器和卡协商出来的一个地址?
?三、SD卡命令和响应格式 命令和相应格式 SD卡命令,命令类型,ACMD命令 响应类型、卡类型、卡状态转换表 命令的格式: 48位 起始位0 方向位(host to card: 1, card to host: 0) 内容 CRC7 结束位1·?
响应的格式:48位 或者136位?
卡命令: 命令的类型:
?bc: broadcast without Response?无响应的广播?
?bcr: broadcast with Response?有响应的广播?
?ac: Address(point-to-point) Command:?点对点,DATA0~DATA3数据线上无数据?
?adtc: Adress(point-to-point) Data Transfer Commands 点对点,DATA0~DATA3数据线上有数据
?CMD0, CMD2, CMD3, CMD55, ACMD41 命令可能会导致卡的状态发生变化?
?响应类型: R1,R1b, R2, R3,R6(SD2.0扩展了R7)?
?扩展内容:?
SPI工作模式: 要知道的特点:只支持一个卡,没有RCA,命令只是MMC/SD的基本的子集?
?SDHC:(支持2GB~32GB):理解CMD8的作用,命令格式和响应,了解CSDV2.0寄存器做了扩展 SDIO WIFI: 增加CMD52, CMD53??
CMD8可以通过重新定义先前保留的位,来扩展一些已经存在的命令的新功能。ACMD41扩大到支持高容量SD记忆卡的初始化
上面介绍了一个控制寄存器等信息?
绿色表示sd和mmc的不同点
对于计算卡的容量 要注意
对于sd 卡 可以参考Simplified_Physical_Layer_Spec v2.0.pdf手册上面有
对于mmc ?可以参考JESD84-A441.pdf 注意对于大卡的mmc 是通过发送8号命令 来获取ext_csd ?中的212到215位置来得到的
-S--------------------------------------------------------------------------
-----------------------------------------------------------------
static void sd_init(void)
{
int retries;
u8 *resp;
unsigned int cardaddr;
/
resp = mmc_cmd(2, 0, MSC_CMDAT_RESPONSE_R2, MSC_CMDAT_RESPONSE_R2);
//serial_puts( ?SD carsd CID ?=R2= ?); ?serial_dump_data(resp, 15);
resp = mmc_cmd(3, 0, MSC_CMDAT_RESPONSE_R1, MSC_CMDAT_RESPONSE_R1);
cardaddr = (resp[4] 8) | resp[3]; ?//发生3命令 来或者rca
rca = cardaddr 16;
//serial_puts(rca=); serial_puts_hex(rca);
resp = mmc_cmd(9, rca, MSC_CMDAT_RESPONSE_R2, MSC_CMDAT_RESPONSE_R2);
sd2_0 = (resp[14] 0xc0) 6;
//serial_puts(sd2_0=====); serial_puts_hex(sd2_0);
//serial_puts( ?SD carsd CSD Register =R2= ); ?serial_dump_data(resp, 16);
OUTREG16(A_MSC_CLKRT(0), 0);
resp = mmc_cmd(7, rca, MSC_CMDAT_BUSY | MSC_CMDAT_RESPONSE_R1, MSC_CMDAT_RESPONSE_R1);
resp = mmc_cmd(55, rca, MSC_CMDAT_R
文档评论(0)