51单片机读写SD_MMC卡设计报告_第1页
51单片机读写SD_MMC卡设计报告_第2页
51单片机读写SD_MMC卡设计报告_第3页
51单片机读写SD_MMC卡设计报告_第4页
51单片机读写SD_MMC卡设计报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

51单片机读写SD_MMC卡设计报告 杨文斌(qq:292942278) 2007-08-20一、 总则本文件介绍了在51平台通过SPI方式读写SD/MMC卡,包括软硬件需求, SD/MMC硬件连接, SPI接口软件模拟,SD/MMC上电初始化,写单块,读单块,写多块,读多块,块擦除,上位串口通讯协议,PC上位软件操作说明等。二、 软硬件需求a) 单片机固件编译环境:Keil C51 uVision2 b) PC上位软件编译环境:Visual C+ 6.0c) 硬件环境:1)W78E52B一片;2)SD/MMC卡插座一个;3)MAX232一片;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 表1 SD/MMC与51单片机引脚连接表注意:SD/MMC引脚除VDD(PIN4)/VSS(PIN3/6)外,其它引脚连接上拉电阻(47k)至3.3v电源。四、 SPI接口软件模拟由于W78E52B没有集成硬件SPI接口,所以固件需要通过软件来模拟实现SPI接口;a) SPI接口基本原理:SPI采用HOST/SLAVE结构,HOST与SLAVE以字节为传输单位,支持4种模式; SPI接口定义有4个引脚CS,SI,SO,SCK;SD SPI接口工作于模式0,各引脚功能分别描述如下:1) CS为片选引脚,低电平为有效;2) SI为Host输出Slave输入引脚,空闲为高电平,SCK上升有效,;3) SO为Slave输出Host输入引脚,SCK下降有效;4) SCK为同步时钟;b) SPI HAL:包括4个函数,上层软件通过调用这4个函数,来实现与SD/MMC以SPI方式进行数据交换。1) SPI_SendByte(INT8U onebyte)以SPI方式向SD/MMC发送一个字节2) INT8U SPI_RecByte(void)以SPI方式从SD/MMC接收一个字节3) SPI_CS_Assert(void)将CS引脚置为低电平有效4) SPI_CS_Deassert(void)将CS引脚置为高电平无效c) 通过SPI HAL发送的RESET命令CMD0波形图,如下图1,以供参考:图1-RESET命令CMD0波形图五、 SD/MMC上电初始化当SD/MMC卡上电后,单片机需要对其进行上电初始化,上电初始化步骤顺序所列如下:1) 置CS为低,至少延时74个CLK,延时波形图,如图2,以供参考:图2-延时波形图2) 发送RESET命令CMD0,其波形图参考图1:3) 发送命令CMD1(SD卡使用命令ACMD41)激活SD/MMC卡, 固件需重复发送命令CMD1直到R1 idle state位为0。4) 发送命令CMD58,读卡OCR寄存器。5) 发送命令CMD9,读卡CSD寄存器,获得SD/MMC的基本参数:1)块最大的长度;2) 卡中块的个数;等六、 写单块1) 发送命令CMD24。2) 接收R1响应。3) 发送Data Tokens(Single Block Write: 0xfe)。4) 发送一个block(一般为512个字节)。5) 发送两个CRC16码。6) 循环接收数据,等待写完成,直到写完成接收到0xff。七、 读单块1)发送命令CMD17。2)接收R1响应。3)等待Data Tokens(Single Block Read: 0xfe)。4)接收一个block(一般为512个字节)。5)接收两个字节CRC16码。八、 写多块(Open ended)1) 发送命令CMD25。2) 接收R1b响应。3) 发送Data Tokens(Single Block Write: 0xfe)。4) 发送一个block(一般为512个字节)。5) 发送两个字节CRC16码。6) 循环接收数据,等待写完成,直到写完成接收到0xff。7) 重复步骤3,继续发送下一个数据包,直到所有数据包发送完成,至步骤8继续。8) 发送命令CMD12,数据传输结束。9) 接收R1b响应。九、 读多块(Open ended)1) 发送命令CMD17。2) 接收R1响应。3) 等待Data Tokens(Single Block Read: 0xfe)。4) 接收一个block(一般为512个字节)。5) 接收两个字节CRC16码。6) 重复步骤3,继续接收下一个数据包,直到接收所有数据包完成后,至步骤7继续。7) 发送命令CMD12,数据传输结束。8) 接收R1b响应。十、 多块擦除SD/MMC最大支持一次删除一个Erase Group大小的连续块,SD/MMC的Erase Group大小不是固定的,其大小指定在SD/MMC卡的CSD寄存器内,在上电初始化阶段,HOST可以使用命令CMD9来读取SD/MMC卡的CSD寄存器;一般多块删除时,对于上层软件将要删除EraseBlockNum个块,在具体执行删除任务时,开始固件可以逐个Erase Group进行连续删除,最后不足一个Erase Group的连续块,也可以一起删除。总之,删除连续多块(Erase Group或不足一个Erase Group)时使用的是相同的步骤,如下:1) 发送擦除起始块地址命令CMD32。2) 接收R1响应。3) 发送擦除终止块地址命令CMD33。4) 接收R1响应。5) 发送命令CMD38擦除所选的块。6) 循环接收数据,等待删除完成,直到接收到0xff删除完成。十一、 上位串口通讯协议a) 上位串口通讯协议是超锐微电子定义的串口通讯协议, 用于51单片机读写SD/ MMC卡平台与上位软件的通讯;该协议定义了两种设备:1)主设备:上位软件; 2)从设备: 51单片机平台;b) 主设备和从设备都支持上位串口通讯协议,并基于该协议来完成命令处理与数据交换。上位串口通讯协议定义了两个执行阶段,分别是:1) 命令阶段2) 数据交换阶段;c) 一次数据交换必须由主设备于命令阶段开始,主设备向从设备发送命令,从设备响应命令,双方进入数据交换阶段; 数据交换阶段以主设备发送不同命令,执行不同数据传输动作;数据传输动作分为以下三种:1) 主设备向从设备发送数据(如,写单/多块命令);2) 主设备向从设备接收数据(如,读单/多块命令);3) 无数据传输(如,擦除命令);d) 上位串口通讯协议定义了一些命令,它们长度固定,为8个字节,其中第一个字节为命令代码,其后字节为命令参数;命令功能,代码,参数汇总于下表2:命令功能命令代码参数1参数2SD/MMC初始化0x0无无读单块0x1读块号(Byte1-4)无写单块0x2写块号(Byte1-4)无块擦除0x3擦除起始块(Byte1-4)擦除块数量(Byte5-7)数据接收(主/从)0x4Data offset(Byte1-2)无数据发送(主/从)0x5Data offset(Byte1-2)5个字节block有效数据读多块0x6读多块起始块(Byte1-4)读块总数(Byte5-7)写多块0x7写多块起始块(Byte1-4)写块总数(Byte5-7)MMC向量测试0x8无无SD向量测试0x9无无建立连接其它无无 表2命令汇总表e) 主设备与从设备之间进行数据传输,命令不同处理不同,各命令的数据传输分别描述:1) 读单块命令主设备发送读单块命令,命令从设备向SD/MMC卡读取一个数据块,块号指定在命令参数1中,命令被从设备接收后,由从设备向SD/MMC卡读取参数1指定的数据块;主设备通过发送数据接收(主/从)命令向从设备接收数据块有效数据,每发送一条命令,从设备返回8个字节,第0个字节数据接收命令代码,其余7字节为block有效数据。因些,主设备需发送共计(512/7)74条数据接收(主/从)命令,完成接收一个数据块有效数据(512个字节)。2) 写单块命令主设备发送写单块命令,命令从设备写一个数据块去SD/MMC卡,块号指定在命令参数1中,命令被从设备接收后,主设备通过数据发送(主/从)命令向从设备发送block有效数据,每发送一条命令,可以发送5个字节;命令长度为8个字节,其中第0个字节数据接收命令代码,1-2字节为data_offset,其余5字节为block有效数据。因些,主设备需发送(512/5)103条数据接收(主/从)命令,完成向从设备发送一个block有效数据(512个字节)。3) 读多块命令主设备发送读多块命令,命令从设备向SD/MMC卡读取指定的块数,起始块号指定在命令参数1中,参数2指定读块总数;数据块接收以块为单位,每个块有效数据接收使用与读单块命令接收数据块相同的方法,不同的只是需要重复相同的数据块接收步骤,直到参数2指定读块总数全部接收完成。1. 写多块命令主设备发送写多块命令,命令从设备向SD/MMC卡写入指定的块数,起始块号指定在命令参数1中,参数2指定写块总数;数据块发送以块为单位,每个块有效数据发送使用与写单块命令发送数据块相同的方法,不同的只是需要重复相同的数据块发送步骤,直到参数2指定写块总数发送全部完成。4) SD向量测试命令/MMC向量测试命令主设备发送SD/MMC向量测试命令,命令从设备开始对MMC/SD卡进行向量测试,从设备开始向量测试,每完成一个向量(CMDxx)测试,就返回一条向量测试记录给主设备,由主设备将向量测试记录汇总成向量测试报告,汇总后的向量测试报告参考下图3。每条向量测试记录长度51个字节,主设备接收完一条向量测试记录后,需发送一个字节响应,从设备接收到这个字节响应,才继续下一个向量测试。图3向量测试报告5) 其段它命令无数据传输阶段十二、 PC上位软件操作说明a) 用串口线将PC与51单片机平台完成连接,打开单片机电源。b) 双击SD_Host.exe图标,运行PC上位软件。c) PC上位软件运行后,其主界面见下图4,上位软件使用默认串口2,默认波特率38400bps, “连接AT89C52”按钮默认有效: 图4PC上位软件主界面d) 按“连接AT89C52”按钮,完成和51平台的串口连接。连接成功,则“初始化SD卡”按钮变为有效。e) 按“初始化SD卡”按钮,对SD/MMC卡进行上电初始化。初始化SD卡成功,则读写擦框内的一些按钮变为有效,见下图5: 图5f) SD/MMC卡初始化完成,则可以开始写单块,读单块,写多块,读多块等操作,下面对它们的操作步骤分别进行描述:1) 写单块首先在文本框“块地址”内输入块地址,编辑 “数据显示”文本框的数据;按“写单块”按钮将“数据显示”框的数据写入块内。写入成功,则 “执行结果”文本框里显示“SD卡写单块成功!”,参考图6: 图6写单块参考图2) 读单块在 “块地址”文本框输入块地址,按“读单块”按钮读取块数据,读取成功后, “执行结果”文本框显示“SD卡读单块成功!”,“数据显示”框显示读取的数据。参考图7: 图7读单块参考图3) 写多块在 “块地址”文本框输入块地址,在“块数”文本框输入读块总数;编辑 “数据显示”文本框的数据完成后按“写多块”按钮将“数据显示”框的数据写入连续块中。写入成功,则 “执行结果”文本框显示“SD卡写多块成功!”,参考图8: 图8写多块参考图4) 读多块在 “块地址”文本框输入块地址,在“块数”文本框输入写总块数,按“读多块”按钮读取连续多块,读取成功后, 在“执行结果”文本框显示“SD卡读多块成功!”,“数据显示”框内显示读取的数据。参考图9: 图9读多块参考图5) 块擦除按“擦除”按钮,出现对话框如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论