




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
读写SD卡实验“第七章《GD32F3开发进阶教程——基于GD32F303ZET6》01实验内容本章的主要内容是学习SDIO结构、协议等内容,包括SD卡及其内部结构、SD卡与微控制器传输方面的内容、SD卡有关的状态位、SD卡的操作模式、SDIO接传输数据的格式。最后基于GD32F3苹果派开发板设计一个读写SD卡实验,通过LCD显示屏上的GUI界面,实现读写SD卡。实验内容02实验原理SDIO是SecureDigitalImputandOutput的缩写,即安全的数字输入/输出接口。它是在SD卡协议基础上发展而来的一种I/0接口,该接口提供AHB系统总线与SD存储卡、SDIO卡MMC卡等类型设备和CE-ATA设备之间的数据传输。SDIO模块SDIO模块GD32F3苹果派开发板具有SDIO接口通过该接口可实现微控制器与SD存储卡设备之间的数据传输。开发板上的TF卡座电路原理图如图7-1所示。SDIO结构框图SDIO结构框图如图7-2所示,GD32F3果派开发板的SDIO控制器由AHB接口和SDIO适配器组成。SDIO与SD卡之间通过6条线进行通信,分别为1条时钟线、1条命令线和4条数据线如图7-2的右侧部分所示。其中,时钟线上传输SDIO发出的时钟信号,根据传输协议,数据传输在CLK时钟线的上升沿有效。命令线上传输SDIO发送至SD卡的命令,以及SD卡发送至主机的响应。SDIO协议用于数据传输的数据线的数目分为1条、4条和8条,本实验使用的数据线数目为4条。SDIO结构框图SD卡结构框图SD卡结构框图如图7-3所示。包括5个部分:存储单元用于存储数据,SD卡读写以块为单位,一个块的大小为512字节,存储空间为64MB的SD卡共有64x1024x1024/512=131072块:存储单元接口是存储单元与卡控制单元进行数据传输的通道,电源检测用于保证SD卡在合适的电压下工作,在加电时复位控制单元和存储单元接口;卡及接口控制单元通过8个寄存器控制并记录SD卡的运行状态;接口驱动器被接口控制单元控制,完成SD卡引脚的输入/输出。SD卡结构框图SD卡结构框图卡及接口控制单元包含8个寄存器,对各个寄存器的描述如表7-1所示。寄存器各个位的具体描述可参见文档《SD2.0协议标准完整版》(位于本书配套资料包“09.参考资料07.读写SD卡实验参考资料”文件夹下)中的第5章。SDIO传输内容1.命令SDI发送至SD卡的命可根据发送范围及是否接收响应分为4种类型如表7-2所示。命令可分为通用命令(CMD)和应用命令(ACMD),应用命令是SD卡制造商特定的命令,发送应用命令的方法为先通过CMD线发送CMD55命令,再发送CMDx命令,此时SD卡将其视为SDIO的ACMDx命令。SDIO传输内容SDIO传输内容主机发送至SD卡的命令在CMD线上行传输,传输格式如图7-4所示。SDIO传输内容2、响应SD卡发送至主机的响应分为7种类型,如表7-3所示。SD卡状态信息卡状态在响应R1(普通命令响应)中标识,卡状态标志位储存于如图7-4所示的大小为32位的参数项中,当发送的命令要求R1响应时,卡状态标志位会随着响应发出。部分卡状态标志位如表7-4所示。SD卡状态信息其中,类型和清除条件的缩写说明如表7-5和表7-6所示。SD卡状态信息SD状态中包含与SD卡属性功能相关的状态位,该状态位大小为512字节,储存于SSR寄存器中。当主机发送ACMD13命令至SD卡后,SD状态会通过DATT3:01线发送给主机。部分SD状态标志位如表7-7所示。SD卡从插入开发板上的卡槽到结束传输数据共经过两种模式:卡识别模式和数据传输模式。卡识别模式包含卡从空闲状态到待机状态的过程。当SD卡插入主机并上电时,首先处于空闲状态,主机通过不同命令检测SD卡的相应参数,并根据参数使SD卡最终处于待机状态或无效状态。卡识别模式阶段的时钟频率用FOD表示,最高为400kHz,其状态转换图如图7-5所示。SD卡操作模式SD卡操作模式SD卡操作模式卡识别模式状态的说明如表7-8所示。SD卡操作模式数据传输模式的状态转换图如图7-6所示。SD卡操作模式数据传输模式的状态说明如表7-9所示。SDIO总线协议SDIO总线协议如图7-7所示,SDIO接口间的通信通常由主机发送命令,从机接收后执行相应动作并做出响应。SDIO数据包格式SDIO数据包有两种格式:常规数据包格式和宽位数据包格式。一般数据块的发送采用常规数据包格式,如图7-8所示,先发送高字节再发送低字节,先发高位字节再发低位字节,通过4根数据线,按照DAT3~DATO的顺序同步传输。SDIO数据包格式宽位数据包格式应用于发送SD卡的SSR寄存器512字节时在接收ACMD13命令后,SD卡将该寄存器的内容通过宽位数据包格式发送,如图7-9所示4根数据线按DAT3~DAT的顺序将寄存器的512字节数据按从高位到低位的顺序发送。03实验代码解析0102ReadWriteSDCard.h文件:在ReadWriteSDCardh文件的“API函数声明”区,声明了2个API函数。ReadWriteSDCard.c文件:在ReadWriteSDCard.c文件的“包含头文件”区,包含了SDCardh和LCD.h等头文件SDCard.c文件包含对SD卡的块进行读写的函数,ReadWriteSDCard.c文件需要通过调用这些函数完成对SD卡的读写,因此需要包含SDCard.h头文件。由于地址、数据等信息都通过LCD屏显示,因此,还需要包含LCD.h头文件。ReadWriteSDCard文件对下面按照顺序解释说明Read函数中的语句。(1)第8至13行代码:由于SD卡是通过块读写传输数据的,因此Read函数首先通过while语句获得读取地址相对应的数据块的首地址及相应的偏移地址。(2)第16至38行代码:设置数据保存的缓冲区bu,并根据偏移地址计算需要读取的长度len,通过while语句,先计算剩余读取长度,再将当前读取地址对应的数据块通过sdblockread函数读取至数据缓冲区buff。ReadWriteSDCard文件对下面按照顺序解释说明Write函数中的语句。(1)第7至11行代码:通过while语获得写入地址相应的数据块的首地址和偏移地址。(2)第14至20行代码:调用sdblockread函数将入地址对应的数据块读出,并存入缓冲区,修改写入地址对应的数据后,将整个数据块重新写入。ReadWriteSDCard文件对下面按照顺序解释说明ReadSDCard函数中的语句。(1)第8行代码:根据变量senumSDCardStatus检测SD卡是否插入。(2)第11至31行代码:若SD卡已插入,则校验地址是否位于正常范围,若处于正常范围则显示读取信息后通过Read函数从SD卡中读取相应数据并输出否则将地址错误的信息输出至LCD屏及串口助手。(3)第40至44行代码:若SD卡未插入,则在LCD屏及口助手输出SD卡未插入的提示。ReadWriteSDCard文件对下面按照顺序解释说明IitSDCard函数中的语句。(1)第7至12行代码:通过sdinit函数初始化SD卡,并根据返回值判断初始化结果若初始化失败则执行相应函数体后重新初始化,直到初始化成功,输出初始化成功的信息至串口助手。(2)第15至18行代码:获取并输出SD卡信息。(3)第21至34行代码:选中准备读写的SD卡并检测其是否被锁死若SD卡被锁死则输出“SDcardislocked!”并执行相应函数。(4)第37至43行代码:若未锁死则设置SD卡传输模式为4线模式及DMA传输模式并使能SDIO的中断以保证SD卡正常的数据传输。ReadWriteSDCard文件对下面按照顺序解释说明InitReadWriteSDCard函数中的语句。(1)第4至13行代码:调用内部函数InitSDCard初始化SD卡,并对SD卡首地址、结束地址等变量赋值。(2)第16至19行代码:将SD卡读写函数的地址赋给GUI结构体sstructGUIDev中的成员变量writeCallback和readCallback,此时,微控制器可根据GUI的操作,调用相应的回调函数完成SD卡的读写。(3)第22至30行代码:通过IitGUI函数初始化GUI界面和相应的界面参数并将SD卡读写地址范围显示在LCD屏及串口助手上。ReadWriteSDCard文件对下面按照顺序解释说明ReadWriteSDCardTask函数中的语句。(1)第8至14行代码:每隔1s调用一次sddetect函数检查卡是否正常插入。(2)第17至28行代码:根据标志位status判断上一次检测到SD卡未正常插入,而此次检测为正常插入,即SD卡被重新插入的情况是否出现,若出现该情况则等待SD卡插入稳定后,再调用InitSDCard函数初始化SD卡。(3)第29行代码:若检测失败,即SD卡未正常插入,则将失败标志位赋给变量senumSDCardStatus后继续执行读写SD卡任务,此时单击LCD屏上的write或read按钮显示“Write:SDcardnotinserted”或“Read:SDcardnotinserted”等信息。ReadWriteSDCard文件对010203sd_init函数用于完成SD卡的卡识别模式。sd_card_init函数用于取卡信息和卡识别状态,即CID信息和CSD信息。sd_power_on函数用于完成基本的SD卡识别。SDCard.c文件010203sd_block_reaad函数用于对SD卡读出一个块,即512字节的数据。sd_card_write函数用于向SD卡写入一个块的数据。sd_erase函数用于擦除SD卡上相应区域。SDCard.c文件Main.c文件Proc2msTask函数的实现代码如程序清单7-10所示调用了ReadWriteSDCardTask函数ReadWriteSDCardTask函数每40ms检测一次SD卡和GUI界面,以实现读写SD卡。实验结果将SD卡插入GD32F3苹果派开发板的TF卡座,下载程序并进行复位。可以观察到开发板上的LCD屏显示如图7-10所示的GUI界面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 6《比例尺》大单元整体设计(教学设计)-2024-2025学年六年级上册数学冀教版
- 2023二年级数学上册 七 分一分与除法第4课时 分香蕉配套教学设计 北师大版
- 2023三年级数学上册 二 观察物体第1课时 看一看(一)教学设计 北师大版
- 毕业论文课题答辩汇报
- 7 中华民族一家亲 第一课时 (教学设计)-部编版道德与法治五年级上册
- Unit5 Drink Lesson 1(教学设计)-2023-2024学年人教新起点版英语一年级下册
- 胰体尾脾切除护理
- Unit 3 Lesson 2教学设计 2024-2025学年冀教版(2024)七年级英语上册
- 2024秋九年级化学上册 第三单元 物质构成的奥秘 课题2 原子的结构第2课时 原子核外电子的排布 离子教学设计(新版)新人教版
- 6《骑鹅旅行记(节选)》教学设计-2023-2024学年统编版语文六年级下册
- SY∕T 7298-2016 陆上石油天然气开采钻井废物处置污染控制技术要求
- 电梯门系统教学课件
- 四年级下册数学课件-第四单元小数点移动引起小数大小的变化 课时(2)人教新课标 (共20张PPT)
- 核科普知识学习考试题库(400题)
- 六年级数学试卷讲评课教学设计(共16篇)
- 线面平行判定定理
- 轮扣式模板支撑架专项施工方案
- abb继电保护615系列操作手册
- 甘肃省审图机构
- 挖掘机部件英语对照表
- 办公室口号大全
评论
0/150
提交评论