51单片机读写SDMMC卡设计报告Word格式.docx

上传人:b****4 文档编号:18166443 上传时间:2022-12-13 格式:DOCX 页数:14 大小:235.57KB
下载 相关 举报
51单片机读写SDMMC卡设计报告Word格式.docx_第1页
第1页 / 共14页
51单片机读写SDMMC卡设计报告Word格式.docx_第2页
第2页 / 共14页
51单片机读写SDMMC卡设计报告Word格式.docx_第3页
第3页 / 共14页
51单片机读写SDMMC卡设计报告Word格式.docx_第4页
第4页 / 共14页
51单片机读写SDMMC卡设计报告Word格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

51单片机读写SDMMC卡设计报告Word格式.docx

《51单片机读写SDMMC卡设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《51单片机读写SDMMC卡设计报告Word格式.docx(14页珍藏版)》请在冰豆网上搜索。

51单片机读写SDMMC卡设计报告Word格式.docx

SD/MMC引脚

P1_0

SPI_CS(PIN1)

P1_1

SPI_SI(PIN2)

P1_2

SPI_SCK(PIN5)

P1_3

SPI_SO(PIN7)

PIN4接VDD

PIN3/6接GND

表1SD/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;

SDSPI接口工作于模式0,各引脚功能分别描述如下:

1)CS为片选引脚,低电平为有效;

2)SI为Host输出Slave输入引脚,空闲为高电平,SCK上升有效,;

3)SO为Slave输出Host输入引脚,SCK下降有效;

4)SCK为同步时钟;

b)SPIHAL:

包括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引脚置为高电平无效

c)通过SPIHAL发送的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直到R1idlestate位为0。

4)发送命令CMD58,读卡OCR寄存器。

5)发送命令CMD9,读卡CSD寄存器,获得SD/MMC的基本参数:

1)块最大的长度;

2)卡中块的个数;

六、写单块

1)发送命令CMD24。

2)接收R1响应。

3)发送DataTokens(SingleBlockWrite:

0xfe)。

4)发送一个block(一般为512个字节)。

5)发送两个CRC16码。

6)循环接收数据,等待写完成,直到写完成接收到0xff。

七、读单块

1)发送命令CMD17。

2)接收R1响应。

3)等待DataTokens(SingleBlockRead:

4)接收一个block(一般为512个字节)。

5)接收两个字节CRC16码。

八、写多块(Openended)

1)发送命令CMD25。

2)接收R1b响应。

5)发送两个字节CRC16码。

7)重复步骤3,继续发送下一个数据包,直到所有数据包发送完成,至步骤8继续。

8)发送命令CMD12,数据传输结束。

9)接收R1b响应。

九、读多块(Openended)

1)发送命令CMD17。

3)等待DataTokens(SingleBlockRead:

4)接收一个block(一般为512个字节)。

5)接收两个字节CRC16码。

6)重复步骤3,继续接收下一个数据包,直到接收所有数据包完成后,至步骤7继续。

7)发送命令CMD12,数据传输结束。

8)接收R1b响应。

一十、多块擦除

SD/MMC最大支持一次删除一个EraseGroup大小的连续块,SD/MMC的EraseGroup大小不是固定的,其大小指定在SD/MMC卡的CSD寄存器内,在上电初始化阶段,HOST可以使用命令CMD9来读取SD/MMC卡的CSD寄存器;

一般多块删除时,对于上层软件将要删除EraseBlockNum个块,在具体执行删除任务时,开始固件可以逐个EraseGroup进行连续删除,最后不足一个EraseGroup的连续块,也可以一起删除。

总之,删除连续多块(EraseGroup或不足一个EraseGroup)时使用的是相同的步骤,如下:

1)发送擦除起始块地址命令CMD32。

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

参数2

SD/MMC初始化

0x0

读单块

0x1

读块号(Byte1-4)

写单块

0x2

写块号(Byte1-4)

块擦除

0x3

擦除起始块(Byte1-4)

擦除块数量(Byte5-7)

数据接收(主/从)

0x4

Dataoffset(Byte1-2)

数据发送(主/从)

0x5

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”按钮默认有效:

图4—PC上位软件主界面

d)按“连接AT89C52”按钮,完成和51平台的串口连接。

连接成功,则“初始化SD卡”按钮变为有效。

e)按“初始化SD卡”按钮,对SD/MMC卡进行上电初始化。

初始化SD卡成功,则读写擦框内的一些按钮变为有效,见下图5:

图5

f)SD/MMC卡初始化完成,则可以开始写单块,读单块,写多块,读多块等操作,下面对它们的操作步骤分别进行描述:

1)写单块―首先在文本框“块地址”内输入块地址,编辑“数据显示”文本框的数据;

按“写单块”按钮将“数据显示”框的数据写入块内。

写入成功,则“执行结果”文本框里显示“SD卡写单块成功!

”,参考图6:

图6—写单块参考图

2)读单块―在“块地址”文本框输入块地址,按“读单块”按钮读取块数据,读取成功后,“执行结果”文本框显示“SD卡读单块成功!

”,“数据显示”框显示读取的数据。

参考图7:

图7—读单块参考图

3)写多块―在“块地址”文本框输入块地址,在“块数”文本框输入读块总数;

编辑“数据显示”文本框的数据完成后按“写多块”按钮将“数据显示”框的数据写入连续块中。

写入成功,则“执行结果”文本框显示“SD卡写多块成功!

”,参考图8:

图8—写多块参考图

4)读多块―在“块地址”文本框输入块地址,在“块数”文本框输入写总块数,按“读多块”按钮读取连续多块,读取成功后,在“执行结果”文本框显示“SD卡读多块成功!

”,“数据显示”框内显示读取的数据。

参考图9:

图9—读多块参考图

5)块擦除――按“擦除”按钮,出现对话框如图10;

在“起始块地址”文本框输入擦除起始块号,在“块数量”文件框输入擦除块数量,完成后“擦除”按钮开始擦除操作,擦除完成,“执行结果”文本框将显示“SD卡擦除成功!

图10—“擦除”对话框

6)SD/MMC向量测试――按“SD/MMC向量测试”按钮开始SD/MMC向量测试,测试结束,“执行结果”文本框显示“SD/MMC向量测试通过!

”,可以按“保存向量测试报告”按钮,在保存“保存向量测试报告”对话框中输入文件名,按“保存”按钮将“向量测试报告”保存进入文件rep.txt。

图11--“保存向量测试报告”对话框

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1