欢迎来到天天文库
浏览记录
ID:6069310
大小:318.00 KB
页数:13页
时间:2018-01-01
《51单片机读写sd_mmc卡设计报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、51单片机读写SD_MMC卡设计报告杨文斌(qq:292942278)2007-08-20一、总则本文件介绍了在51平台通过SPI方式读写SD/MMC卡,包括软硬件需求,SD/MMC硬件连接,SPI接口软件模拟,SD/MMC上电初始化,写单块,读单块,写多块,读多块,块擦除,上位串口通讯协议,PC上位软件操作说明等。二、软硬件需求a)单片机固件编译环境:KeilC51uVision2b)PC上位软件编译环境:VisualC++6.0c)硬件环境:1)W78E52B一片;2)SD/MMC卡插座一个;3)MAX
2、232一片;4)cross串口线一条;三、SD/MMC硬件连接SD/MMC与51单片机引脚连接如下表1,供参考:51单片机引脚SD/MMC引脚P1_0SPI_CS(PIN1)P1_1SPI_SI(PIN2)P1_2SPI_SCK(PIN5)P1_3SPI_SO(PIN7)PIN4接VDDPIN3/6接GND表1SD/MMC与51单片机引脚连接表注意:SD/MMC引脚除VDD(PIN4)/VSS(PIN3/6)外,其它引脚连接上拉电阻(47k)至3.3v电源。四、SPI接口软件模拟由于W78E52B没有集成硬
3、件SPI接口,所以固件需要通过软件来模拟实现SPI接口;a)SPI接口基本原理:SPI采用HOST/SLAVE结构,HOST与SLAVE以字节为传输单位,支持4种模式;SPI接口定义有4个引脚CS,SI,SO,SCK;SDSPI接口工作于模式0,各引脚功能分别描述如下:1)CS为片选引脚,低电平为有效;2)SI为Host输出Slave输入引脚,空闲为高电平,SCK上升有效,;3)SO为Slave输出Host输入引脚,SCK下降有效;4)SCK为同步时钟;b)SPIHAL:包括4个函数,上层软件通过调用这4个
4、函数,来实现与SD/MMC以SPI方式进行数据交换。1)SPI_SendByte(INT8Uonebyte)――以SPI方式向SD/MMC发送一个字节2)INT8USPI_RecByte(void)――以SPI方式从SD/MMC接收一个字节3)SPI_CS_Assert(void)――将CS引脚置为低电平有效4)SPI_CS_Deassert(void)――将CS引脚置为高电平无效a)通过SPIHAL发送的RESET命令CMD0波形图,如下图1,以供参考:图1-RESET命令CMD0波形图一、SD/MMC上
5、电初始化当SD/MMC卡上电后,单片机需要对其进行上电初始化,上电初始化步骤顺序所列如下:1)置CS为低,至少延时74个CLK,延时波形图,如图2,以供参考:图2-延时波形图2)发送RESET命令CMD0,其波形图参考图1:3)发送命令CMD1(SD卡使用命令ACMD41)激活SD/MMC卡,固件需重复发送命令CMD1直到R1idlestate位为0。4)发送命令CMD58,读卡OCR寄存器。5)发送命令CMD9,读卡CSD寄存器,获得SD/MMC的基本参数:1)块最大的长度;2)卡中块的个数;等二、写单块
6、1)发送命令CMD24。2)接收R1响应。3)发送DataTokens(SingleBlockWrite:0xfe)。4)发送一个block(一般为512个字节)。5)发送两个CRC16码。6)循环接收数据,等待写完成,直到写完成接收到0xff。三、读单块1)发送命令CMD17。2)接收R1响应。3)等待DataTokens(SingleBlockRead:0xfe)。4)接收一个block(一般为512个字节)。5)接收两个字节CRC16码。四、写多块(Openended)1)发送命令CMD25。2)接收
7、R1b响应。1)发送DataTokens(SingleBlockWrite:0xfe)。2)发送一个block(一般为512个字节)。3)发送两个字节CRC16码。4)循环接收数据,等待写完成,直到写完成接收到0xff。5)重复步骤3,继续发送下一个数据包,直到所有数据包发送完成,至步骤8继续。6)发送命令CMD12,数据传输结束。7)接收R1b响应。一、读多块(Openended)1)发送命令CMD17。2)接收R1响应。3)等待DataTokens(SingleBlockRead:0xfe)。4)接收一
8、个block(一般为512个字节)。5)接收两个字节CRC16码。6)重复步骤3,继续接收下一个数据包,直到接收所有数据包完成后,至步骤7继续。7)发送命令CMD12,数据传输结束。8)接收R1b响应。二、多块擦除SD/MMC最大支持一次删除一个EraseGroup大小的连续块,SD/MMC的EraseGroup大小不是固定的,其大小指定在SD/MMC卡的CSD寄存器内,在上电初始化阶段,HOST可以使用命令CM
此文档下载收益归作者所有