SD卡读卡器实验步骤
15.32、 USB实现SD读卡器实验

USB实现SD读卡器实验z意义与作用神舟IV号开发板资源丰富,本节将介绍,如何通过USB接口访问神舟IV号上插入的SD 卡。
即用STM32处理器实现我们常说的SD卡读卡器功能。
通过本实验,我们将对前一例程中使用的USB接口更进一步的认识,同时,我们还可以对SD卡有一个更深入的了解。
本实验参考ST的Mass_Storage例程,针对神舟IV号的硬件修改代码设计,使用SPI方式来读写SD卡,实现SD读卡器功能。
z实验原理SD卡读卡器实验原理简介:首先程序运行后,初始化实验需要使用的到串口和GPIO管脚,然后初始化访问SD卡要使用的SPI接口与USB接口。
检测SD卡在,待SD卡插入之后,就开始USB的配置,在配置成功之后既可以在电脑上发现可移动磁盘了。
在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等。
更详细的说明请参看USB HID 协议,该协议可从下载。
关于STM32的USB知识可以参考附件的《STM32 USB固件的中文资料.pdf 》和《STM32的USB详解.pdf》等文档。
下图为USB 描述符的层次结构:z硬件设计SD卡读卡器实验要用到的硬件资源有:¾串口1:串口1在本实验中打印程序运行过程中的提示信息。
¾LED指示灯:LED指示灯主要用于指示程序运行状态。
¾SD卡座:神舟IV号最大支持2G的SD卡¾USB接口:使用USB接口与电脑连接,将SD卡插入神舟IV号SD卡座后,运行程序,可以在电脑上检测到一个U盘设备。
并可以进行读写操作。
SD卡读卡器实验使用的资源主要是USB接口和SD卡座两部分:USB 2.0 OTG全速接口作为Device设备注:本实验的USB 2.0 OTG全速接口硬件设计与前面“USB人机交互设备HID实验”对应章节完全相同,此处不再重复,请参考“USB人机交互设备HID实验”对应章节。
microSD卡实验

microSD卡实验1.实验目的(1)掌握串行外设接口(SPI)的功能和应用(2)熟悉Stellaris®同步串行接口(SSI)(3)了解SD/MMC卡的功能和运用(4)了解FatFs文件系统和底层磁盘I/O层2.实验内容(1)Stellaris® SSI的初始化(2)移植FatFs模块和底层磁盘I/O接口函数(3)建立SSI与microSD卡之间的通信和数据交换(4)构建一个命令控制台(5)建立微控制器与PC机之间的通信(6)演示通过上位机发送命令行访问microSD卡的实验3. SSI数据通信原理SSI模块可用于主从式通信网络,图1所示是SSI与外设器件进行同步串行通信的原理图。
用4根接口线就可以完成他们之间的数据通信,这四根接口线分别为时钟线(SCLK)、数据输入线(SDI)、数据输出线(SDO)以及片选线(CS)。
图1 SSI与外设器件同步串行通信原理图SSI支持的同步串行接口格式包括Freescale SPI、Microwire和TI SSI。
图2所示是时钟极性位SPO=0和相位控制位SPH=0时,Freescale SPI帧格式的单次传输信号序列。
SSICLK在SSI空闲时保持不活动状态,只有当数据的发送或接收处于活动状态时,SSICLK才在设置好的频率下工作。
利用SSICLK的空闲状态可提供接收超时指示。
对于SPI和MICROWIRE这两种帧格式,SSIFSS管脚为低电平有效,并在整个帧的传输过程中保持有效。
如果SSI使能并且在发送FIFO中含有有效的数据,则通过将SSIFSS主机信号驱动为低电平表示发送操作开始。
这使得从机数据能够放在主机的接收输入线上。
主机发送输出端口使能。
在半个SSICLK周期之后,有效的主机数据传输到发送管脚。
既然主机和从机数据都已设置好,则在下半个SSICLK周期之后,主机SSICLK管脚变为高电平。
这时,数据在SSICLK信号的上升沿被捕获,在它的下降沿进行传输。
(IC卡读卡器)例行检验和确认检验控制程序

1.目的:为了保证本工厂获证产品在生产时有可靠性、安全性及与获证产品的一致性,并为满足客户要求特制定本程序。
2.定义:
3.适用范围:本公司生产的IC卡读卡器均适用。
例行检验是在生产线的最终阶段对生产线上的产品进行100%检验,通常检验后,除包装和加贴标签外,不再进一步加工。
确认检验是为验证产品持续符合标准要求进行的抽样检验,确认实验应按标准的规定进行;
4.职责:
4.1 生产部:负责IC卡读卡器生产。
4.2品管部:负责IC卡读卡器的功能及外观等检验。
4.3工程部:负责IC卡读卡器的确认检验。
5.程序内容
5.1例行检验。
5.1.1 IC卡读卡器成品经组装成品后,送品管部测试,若测试OK则流入下一工序进
行一致性、功能、外观、标识,并填写《品质检验报告》。
5.1.2以上任一工序检验不通过,该工序检验员及时将其隔离并通知生产部进行返工
查至检验OK为止。
5.2确认检验
5.2.1工程部按《电气电子产品强制性认证实施规则——信息技术》中确认检验项目、时间、频次进行确认检验,并保存确认检验记录。
5.2.2对于本厂无能力确认检验项目,由工程部送国家认可检测机构检验,并保持检验记录。
5.3.3确认检验详见下表
产品确认检验表
6.0参考文件
6.1《电气电子产品强制性认证实施规则——信息技术》7.0相关表单
7.1《QC检验日报》。
arduino学习笔记18---SD卡读写实验教程文件

a r d u i n o学习笔记18---S D卡读写实验本次实验使用arduino驱动SD卡,在SD卡中进行文件读写。
需要说明的是arduino的SD库文件,目前对2G以上的卡支持不是很好,所以推荐大家使用2G包含2G以下的,文件格式使用FAT格式。
这次我是用的是kingmax2G的MicroSD卡。
先看一下硬件连接图把下面代码下载进arduino控制板/*此例子展示如果记录三个模拟引脚数值到SD卡,使用SD库。
电路部分* 模拟引脚使用模拟口0,1,2大家可以根据情况接入模拟传感器,如果没有,也可以完成此实验,只不过数值是不停跳动的干扰源。
* SD卡与arduino控制板使用SPI总线连接** MOSI - pin 11** MISO - pin 12** CLK - pin 13** CS - pin 4*/#include <SD.h>// CS引脚为pin4,这里也沿用官方默认设置const int chipSelect = 4; //设定CS接口void setup(){Serial.begin(9600); //设置串口通信波特率为9600Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card...pinMode(10, OUTPUT);if (!SD.begin(chipSelect)) { //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not presentSerial.println("Card failed, or not present");return;}Serial.println("card initialized."); //与SD卡通信成功,串口输出信息card initialized.}void loop(){// 定义数组String dataString = "";// 读取三个传感器值,写入数组for (int analogPin = 0; analogPin < 3; analogPin++) {int sensor = analogRead(analogPin);dataString += String(sensor);if (analogPin < 2) {dataString += ",";}}// 打开文件,注意在同一时间只能有一个文件被打开// 如果你要打开另一个文件,就需要先关闭前一个File dataFile = SD.open("datalog.txt", FILE_WRITE);// 打开datalog.txt文件,读写状态,位置在文件末尾。
读卡器课程设计

读卡器课程设计一、课程目标知识目标:1. 学生能够理解读卡器的基本概念、功能及工作原理;2. 学生能够掌握与读卡器相关的电子元件、电路图的识别与分析;3. 学生能够了解读卡器在不同领域的应用及其重要性。
技能目标:1. 学生能够运用所学知识,正确组装和调试简单的读卡器电路;2. 学生能够运用读卡器进行数据读取和简单编程操作;3. 学生能够通过实际操作,培养动手能力、观察力和问题解决能力。
情感态度价值观目标:1. 学生对电子技术产生兴趣,树立科技创新意识;2. 学生在学习过程中,培养合作、探究、创新的精神;3. 学生能够认识到读卡器在现代社会中的广泛应用,认识到学习电子技术的重要性。
分析课程性质、学生特点和教学要求,本课程旨在通过理论与实践相结合的方式,使学生掌握读卡器的基本知识,提高学生的动手实践能力和创新能力。
课程目标具体、可衡量,便于学生和教师在教学过程中进行有效评估。
后续教学设计和评估将围绕这些具体学习成果展开。
二、教学内容1. 读卡器基础知识:- 读卡器定义、分类及工作原理;- 常见读卡器芯片及其特性;- 读卡器相关电子元件的识别与作用。
2. 读卡器电路分析与组装:- 电路图分析,理解读卡器电路组成;- 实际操作,正确组装读卡器电路;- 调试与排错,确保读卡器电路正常运行。
3. 读卡器编程与应用:- 读卡器编程基础知识;- 数据读取与写入操作;- 实际应用案例分析与讨论。
4. 读卡器在各领域的应用:- 智能交通、门禁系统、身份认证等领域的应用案例;- 读卡器技术的发展趋势及其对日常生活的影响。
教学内容根据课程目标进行选择和组织,保证科学性和系统性。
教学大纲明确以下安排和进度:第一周:读卡器基础知识学习;第二周:读卡器电路分析与组装;第三周:读卡器编程与应用;第四周:读卡器在各领域的应用及发展趋势。
教学内容与课本章节紧密关联,确保教学实际需求。
三、教学方法针对本章节内容,采用以下多样化的教学方法,以激发学生的学习兴趣和主动性:1. 讲授法:- 在讲解读卡器基础知识、工作原理和相关电子元件等理论部分时,采用讲授法,结合多媒体课件,生动形象地呈现知识点,帮助学生建立基本概念。
sd卡数据读写流程

sd卡数据读写流程一、概述SD卡是一种常用的存储设备,应用广泛。
在进行SD卡数据读写操作时,需要了解其基本流程及相关细节。
本文将详细介绍SD卡数据读写流程。
二、准备工作1. 确认SD卡类型:根据需求选择合适的SD卡类型,如标准SD卡、Mini SD卡、Micro SD卡等。
2. 准备读写设备:需要使用支持SD卡的读写设备,如读卡器、手机、相机等。
3. 系统环境:根据不同操作系统选择相应的驱动程序和开发工具。
三、初始化SD卡1. 电源接口:将SD卡插入读写设备中,并接通电源。
2. 查找CMD线:通过CMD线查找到SD卡,并发送复位命令。
3. 发送初始化命令:发送初始化命令后,等待SD卡响应并返回状态码。
四、读取CID和CSD寄存器信息1. 发送CMD10命令:通过CMD10命令可以获取CID寄存器信息。
2. 发送CMD9命令:通过CMD9命令可以获取CSD寄存器信息。
五、设置Block长度1. 发送CMD16命令:通过CMD16命令设置Block长度,即每次读取或写入的字节数。
六、数据传输1. 读取数据:发送CMD17命令,指定读取的起始地址和读取的Block数量,等待SD卡响应并返回数据。
2. 写入数据:发送CMD24命令,指定写入的起始地址和写入的Block数量,等待SD卡响应并写入数据。
七、结束操作1. 发送CMD12命令:结束操作前需要发送CMD12命令,以停止多块传输。
2. 断开电源:操作完成后需要断开SD卡电源。
八、注意事项1. SD卡在进行读写操作时需要保持稳定的电压和供电。
2. 操作过程中需要注意各种状态码及其含义。
3. 合理选择Block长度可以提高读写速度。
以上就是SD卡数据读写流程的详细介绍。
在实际应用中,还需要根据具体情况进行合理调整和优化。
实验九 SD卡驱动程序实验

实验九 SD卡驱动程序实验【实验目的】1、了解PXA27X微处理器GPIO的功能2、了解SD卡驱动程序的架构及编程方法3、掌握SD卡的使用方法【实验原理】1、SD/MMC简介SD(Secure Digital Card)卡,由松下、东芝和SanDisk联合推出,1999年8月才首次发布。
SD卡数据传送和物理规范由MMC发展而来,大小和MMC差不多,尺寸为32mm x 24mm x 2.1mm。
长宽和MMC一样,只是厚了0.7mm,以容纳更大容量的存贮单元。
SD卡与MMC卡保持着向上兼容,也就是说,MMC可以被新的SD设备存取,兼容性则取决于应用软件,但SD卡却不可以被MMC设备存取。
(SD卡外型采用了与MMC厚度一样的导轨式设计,以使SD设备可以适合MMC)SD接口除了保留MMC的7针外,还在两边加多了2针作为数据线。
采用了NAND型Flash Memory,基本上和SmartMedia的一样,平均数据传输率能达到2MB/s。
MMC(MultiMediaCard)卡由西门子公司和首推CF的SanDisk于1997年推出。
MMC的发展目标主要是针对数码影像、音乐、手机、PDA、电子书、玩具等产品,号称是目前世界上最小的Flash Memory存贮卡,尺寸只有32mm x 24mm x 1.4mm。
虽然比SmartMedia厚,但整体体积却比SmartMedia小,而且也比SmartMedia轻,只有1.5克。
MMC也是把存贮单元和控制器一同做到了卡上,智能的控制器使得MMC保证兼容性和灵活性。
MMC存贮卡可以分为MMC和SPI(serial peripheral interface)两种工作模式,MMC模式是标准的默认模式,具有MMC的全部特性。
而SPI模式则是MMC存贮卡可选的第二种模式,这个模式是MMC协议的一个子集,主要用于只需要小数量的卡(通常是1个)和低数据传输率(和MMC协议相比)的系统,这个模式可以把设计花费减到最小,但性能就不如MMC。
SD卡读写操作详细说明

51单片机实现对SD卡的读写SD卡SPI模式下与单片机的连接图:22.23.//获得16位的回应24. Read_Byte_SD(); //read the first byte,ignore it.25.do26. { //读取后8位27. tmp = Read_Byte_SD();28. retry++;29. }30.while((tmp==0xff)&&(retry<100));31.return(tmp);32.}2)初始化SD卡的初始化是非常重要的,只有进行了正确的初始化,才能进行后面的各项操作。
在初始化过程中,SPI的时钟不能太快,否则会造初始化失败。
在初始化成功后,应尽量提高SPI的速率。
在刚开始要先发送至少74个时钟信号,这是必须的。
在很多读者的实验中,很多是因为疏忽了这一点,而使初始化不成功。
随后就是写入两个命令CMD0与CMD1,使SD卡进入SPI模式初始化时序图:初始化例程:1.//--------------------------------------------------------------------------2.初始化SD卡到SPI模式3.//--------------------------------------------------------------------------4.unsigned char SD_Init()5.{6.unsigned char retry,temp;7.unsigned char i;8.unsigned char CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95};9. SD_Port_Init(); //初始化驱动端口10.11. Init_Flag=1; //将初始化标志置112.13.for (i=0;i<0x0f;i++)14. {15. Write_Byte_SD(0xff); //发送至少74个时钟信号16. }17.18.//向SD卡发送CMD019. retry=0;20.do21. { //为了能够成功写入CMD0,在这里写200次22. temp=Write_Command_SD(CMD);23. retry++;24.if(retry==200)25. { //超过200次26.return(INIT_CMD0_ERROR);//CMD0 Error!27. }28. }29.while(temp!=1); //回应01h,停止写入30.31.//发送CMD1到SD卡32. CMD[0] = 0x41; //CMD133. CMD[5] = 0xFF;34. retry=0;35.do36. { //为了能成功写入CMD1,写100次37. temp=Write_Command_SD(CMD);38. retry++;39.if(retry==100)40. { //超过100次41.return(INIT_CMD1_ERROR);//CMD1 Error!4.unsigned char Read_CSD_SD(unsigned char *Buffer)5.{6.//读取CSD寄存器的命令7.unsigned char CMD[] = {0x49,0x00,0x00,0x00,0x00,0xFF};8.unsigned char temp;9. temp=SD_Read_Block(CMD,Buffer,16); //read 16 bytes10.return(temp);11.}4)读取SD卡信息综合上面对CID与CSD寄存器的读取,可以知道很多关于SD卡的信息,以下程序可以获取这些信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第1章SD/MMC卡读卡器实验步骤
(1)从光盘上把整个μC/OS-II模版工程拷贝一份到某个目录下,这里假设为D盘根目录,并把目录名称改改名为SD,工程文件改为SD.uv2,如图1.1所示。
图1.1 SD工程
(2)从《μC/OS-II嵌入式实时操作系统》一书的配套光盘中,把μC/OS-II 2.52版本的所有.C和.H的源码文件,拷贝到D:\SD\uCOS-II\Source目录下,如图1.2所示。
图1.2 拷贝μC/OS-II源码
(3)把D:\SD\User目录下的OS_CFG_V252.H文件的全部内容拷贝到此目录下的os_cfg.h中。
(4)把ZLG/SD软件包SDMMC文件夹拷贝到D:\SD目录下,如图1.3所示。
图1.3 拷贝ZLG/SD软件包
(5)双击SD.uv2工程文件,进入Keil集成开发环境。
进入后,给uC/OS-II Source工程目录加入先前所拷贝的在D:\SD\uCOS-II\Source目录下,除uCOS_II.C的所有.C和.H的文件,如图1.4所示。
图1.4 给工程加入μC/OS-II源码和ZLG/SD软件包
(6)给uC/OS-II Source工程目录添加SDMMC目录,并在该目录下加入先前所拷贝的在D:\SD\SDMMC目录下所有ZLG/SD软件包文件,如图1.4所示。
(7)将 os_cfg.h 中的OS_SEM_EN和OS_MBOX_EN改为1(允许信号量和消息邮箱),OS_MAX_EVENTS改为5(定义最大可用5个信号量),OS_TASK_STAT_EN改为1。
如程序清单1.1所示。
程序清单1.1 修改os_cfg.h
#define
OS_MAX_EVENTS 5
……
#define OS_TASK_STAT_EN 1
……
#define OS_MBOX_EN 1
……
#define OS_SEM_EN 1
(8)创建任务。
首先打开User目录下的Main.H文件,加入如程序清单1.2所示的宏定义,Task_CARD任务的优先级为1,堆栈大小都为64。
程序清单1.2 SD工程任务宏定义
TASK_CARD_PRIO 1
#define
TASK_CARD_STK_SIZE 64
#define
(9)由于程序采用了串口接收中断,所以需要在Startup.S文件的向量表中,先声明Timer0A_ISR()中断服务函数(程序清单1.3(1)),然后在向量表的Timer0A位置加入向量地址(程序清单1.3(2))。
程序清单1.3 串口中断函数的向量
EXTERN uart0_ISR ; 声明函数(1)
__Vectors
……
DCD uart0_ISR ; UART0 ; 串口0的中断向量(2)……
(10)将SD卡实验例程中的User目录下的sd_SPI.h文件拷贝到本工程的User目录下,在工程的User目录下添加sd_SPI.h文件。
可以在sd_SPI.h中改变SPI的工作频率。
(11)在includes.h头文件中添加头文件“#include <ssi.h>”和SD/MMC 模块头文件“#include <sdconfig.h>”、“#include <sddriver.h>”和“#include <sd_SPI.h>”。
如图 1.5所示。
图 1.5 添加头文件
注意:SD/MMC 模块头文件“#include <sdconfig.h>”、“#include <sddriver.h>”要在移植头文件的后面。
如图 1.5所示。
(12)根据实验原理的协议分析,在main.c文件中编写通过串口读、写和擦除SD/MMC 卡的相关函数。
这里可以将实验例程的main.c的内容复制并替换掉工程中的main.c。
(13)点击工具栏中的按钮,打开【Options for Target ‘Target 1’】对话框,点击【C/C++】选项,添加.\Middleware;.\Target;.\uCOS-II\Ports;.\uCOS-II\Source;.\User;.\SDMMC。
如图 1.6所示。
图 1.6 头文件包含路径
(14)将EasyARM8962开发平台上JP2_15~ 21(PE2、PG0、PA4、PA2、PG1、PA5、PA3)中连接SD卡卡座的插针短接。
(15)编译链接工程,在编译通过后将SD/MMC卡插入卡座中。
(16)连接EasyARM8962开发板和ULink2仿真器进行仿真调试,并全速运行程序。
(17)将产品配套光盘中提供的PC机可执行软件SDMMC_Reader.exe复制到硬盘,并运行该软件。
(18)在图1.7中,选择串口号及通信波特率,然后单击“连接目标板”按钮,“执行结果”框中将显示该软件是否能够与目标板成功通信。
图1.7 连接目标板
(19)若打开串口成功,单击“初始化SD/MMC卡”按钮,是否初始化成功将在“执行结果”中显示出来。
如果初始化失败,在“执行结果”将显示出错误代码,显示错误码的含义见错误!未找到引用源。
所列,给出错误码的目的是方便用户调试程序。
(20)SD/MMC卡初始化成功后,在“读写擦”框中填写要读的块地址,然后,单击“读”按钮,读得的块内容在“数据显示”框中显示出来,“执行结果”框中将显示执行结果,如果执行结果有错,将给出错误码。
(21)若想要写某块,则需单击“数据显示”框中的“块数据”区,从键盘输入要写入的数据,然后单击“写”按钮,软件就会将“块数据”框中的512字节写入到SD/MMC卡中,“执行结果”框将显示执行结果。
如图1.8所示。
图1.8 写SD/MMC卡
(22)若想要擦SD/MMC卡,单击“擦除”按钮,将弹出如图1.9所示的擦除对话框,
填写好起始地址和要擦除的块数,然后单击“擦除”按钮。
擦除操作执行结果将在图1.8所示的“执行结果”中显示出来。
擦除限制5000块的目的是防止擦除时间太长导致串行通信超时,并不是说SD/MMC卡一次擦除操作只能擦除5000块。
图1.9 擦除操作对话框
图1.9还提示用户擦除卡的“卡的起始地址”和“块数量”,建议为sds.erase_uint(见ZLG/SD软件包)的整数倍。
这是因为有一些卡擦卡的单位为sds.erase_uint块,也就是说,即使命令卡只擦除“起始块地址”这一块,但SD/MMC卡将擦除“起始块地址”开始的sds.erase_uint块。