求助,micro sd卡写保护和大的SD的电路有区别吗

君,已阅读到文档的结尾了呢~~
ATmega128L单片机的Micro SD卡读写
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
ATmega128L单片机的Micro SD卡读写
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口sd卡tf卡进入spi模式 - 单片机干货 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
sd卡tf卡进入spi模式
助理工程师
11:35:19  
11550&查看
现在我们手机的内存卡多为Micro SD卡,又叫TF卡,所以Micro SD卡比SD卡常见。自己曾经也想写写SD卡的读取程序,但又不想特地再去买个SD卡,这时想起手机内存卡不是和SD卡很像吗?在网上查了以后发现SD卡和Micro SD卡其实也就大小和引脚不一样,它们的操作其实是一样的,所以网上的SD卡读写代码其实可以直接拿来用。关于SD卡和Micro SD卡的引脚定义和不同可见下两表:
注:1.&&S:电源;I:输入;O:推挽输出;PP:推挽I/O。
& && & 2.&&扩展的DAT线(DAT1 ~ DAT3)在上电后处于输入状态。它们在执行SET_BUS_WIDTH命令后作为DAT线操作。当不使用DAT1 ~ DAT3 线时,主机应使自己的DAT1~DAT3线处于输入模式。这样定义是为了与MMC卡保持兼容。& && &3.&&上电后,这条线为带 50KOhm上拉电阻的输入线(可以用于检测卡是否存在或选择 SPI 模式) 。用户可以在正常的数据传输中用 SET_CLR_CARD_DETECT(ACMD42)命令断开上拉电阻的连接。MMC卡的该引脚在SD模式下为保留引脚,在SD模式下无任何作用。
4.&&MMC卡在SD模式下为:I/O/PP/OD。
5.&&MMC卡在SPI模式下为:I/PP。
& & 我们可以发现Micro SD卡只有8个引脚是因为比SD卡少了一个Vss。当然你也可以买个卡套套在Micro SD卡上,这样一来大小就和SD卡一样大,这时候卡套上的9个引脚就和SD卡一样了,你可以完全当做SD卡来操作。& & spi下电路的连接非常简单,接上电源线Vdd和地线Vss,再接上spi的CS,SCLK,DI(MOSI)和DO(MISO)就可以了,其他引脚可以放空。注意SD卡的电源和操作电压都为2.7-3.6V,5V的单片机要进行电平转换或串电阻限流。还有记得SD卡的CS,SCLKh和DI要用10~100K的电阻上拉。我是套了卡套接的电路,因为Micro SD卡的引脚太密了,不好焊接,SD卡相对引脚好焊。因为没有卡座,而且也没专门的PCB我就直接焊到卡套上,诶牺牲了一个卡套。下面是我自己画的电路图:
& & 以NXP的LPC2210 ARM7MCU为例,下图是周立功开发的实现板电路这里,将LPC2210MCU的SPI0用于SD卡的控制和数据读写。对SPI0的两个数据线加了上拉电阻以便于MMC卡兼容。卡供电采用了可控方式,通过GPIO口控制MOS管对其进行供电。卡检测电路也使用GPIO口实现。通过读GPIO口数据,检查卡是否写保护和完全插入。具体内容可以参考周立功的说明书,百度文库里边有
下面我们讲讲Micro SD卡的软件驱动和指令集。SD卡的命令格式如下,6字节共48位,传输时最高位(MSB)先传输:
& & SD卡的command(命令)占6 bit,一般叫CMDx或ACMDx,比如CMD1就是1,CMD13就是13,ACMD41就是41,依此类推。Command Argument(命令参数)占4 byte,并不是所有命令都有参数,没有参数的话该位一般就用置0。最后一个字节由7 bit CRC校验位和1 bit停止位组成。在SPI模式下,CRC是被忽略的,可以都置1或置0.但是发送CMD0时要记得加上CRC,即最后1字节为0x95(因为发送CMD0时还未进入SPI模式,PS:CMD8也要,但一般大家都把发送CMD8省略了)。& & 每次发送完一次命令后,SD卡都会有回应。SD卡的回应有多种格式,1字节的R1,2字节的R2等,不过一般在SPI模式中我们只用到R1,下面介绍R1的格式:
& & 关于SD卡SPI和command的发送要注意以下几点:
& & 1.SD卡的SPI总线,在读入数据时SD卡的SPI是CLK的上升沿输入锁存,输出数据也是在上升沿。
& & 2.向SD卡写入一个CMD或者ACMD指令的过程是这样的: 首先使CS为低电平,SD卡使能;其次在SD卡的Din写入指令;写入指令后还要附加8个填充时钟,是SD卡完成内部操作;之后在SD卡的Dout上接受回应;回应接受完毕使CS为低电平,再附加8个填充时钟。
& & 3.在SD卡的Din没有数据写入时,应使Din保持高电平。关于这一点我可吃透了苦头,本来也记得要保持高电平的,结果不知怎的鬼使神差的置0拉低了。结果程序出现了各种奇怪的貌似偶然的错误,比如连续两次复位会有一次失败,单步调试成功全速运行又会失败。总之在这个过程中我对时序进行各种改变,每次解决一个问题后又会有新的问题出现,多少次动摇了我对MicroSD卡和SD卡的操作是一样的这个看法。因为这个低级的错误耽误了我三四天,看来细心很重要啊!我已经不止一次因为不细心浪费大量时间了,希望大家也引以为戒。
好了,现在SD卡的命令和回应清楚了,我们下面讲讲SD卡的复位,初始化和读写方法。1、SD卡的SPI工作模式
SD 卡在上电初期自动进入SD 总线模式,在此模式下向 SD 卡发送复位命令CMD0 。如果SD卡在接收复位命令过程中CS低电平有效,则进入SPI模式,否则工作在SD 总线模式。
在复位成功之后可以通过CMD55和ACMD41 判断当前电压是否在工作范围内 主机还可以继续通过CMD10读取SD 卡的CID寄存器,通过CMD16 设置数据 Block长度,通过CMD9 读取卡的 CSD寄存器 从CSD 寄存器中,主机可获知卡容量,支持的命令集等重要参数。2、初始化(1)使用CMD1& & 发送CMD1,收到0x00表示成功& & 时序图如下:
& & (2)使用CMD55+ACMD41& & 1.发送CMD55(表示使用ACMDx类命令),收到0x01& & 2.发送ACMD41,收到0x00表示成功& & 记住SD卡的初始化速度不能大于400kHz,所以一开始复位和初始化时spi的速率要设置低一点。
3、数据块的读写完成SD 卡的初始化之后即可进行它的读写操作 SD卡的读写操作都是通过发送 SD 卡命令完成的SPI总线模式支持单块(CMD24)和多块(CMD25)写操作,多块操作是指从指定位置开始写下去,直到SD 卡收到一个停止命令CMD12才停止 单块写操作的数据块长度只能是512 字节 单块写入时,命令为CMD24,当应答为0时说明可以写入数据,大小为512 字节 SD 卡对每个发送给自己的数据块都通过一个应答命令确认,它为1个字节长,当低 5位为00101 时,表明数据块被正确写入SD 卡&&
&&在需要读取SD 卡中数据的时候,读SD卡的命令字为CMD17,接收正确的第一个响应命令字节为0xFE,随后是512 个字节的用户数据块,最后为2 个字节的CRC验证码& & 可见,读写SD 卡的操作都是在初始化后基于 SD 卡命令和响应完成操作的,写、读 SD 卡的程序流程图如下所示&&:(1)写SD卡流程(2)读SD卡流程
4、读单块和读多块
& & SD卡读单块和多块的命令分别为CMD17和CMD18,他们的参数即要读的区域的开始地址。因为考虑到一般SD卡的读写要求地址对齐,所以一般我们都将地址转为块,并以扇区(块)(512Byte)为单位进行读写,比如读扇区0参数就为0,读扇区1参数就为1&&9(即地址512),读扇区2参数就为2&&9(即地址1024),依此类推。
& & 读单块方法:& & 1.发送CMD17,收到0x00表示成功& & 2.连续读直到读到开始字节0xFE& & 3.读512个字节& & 4.读两个CRC字节& & 读单块时序图:
& & 读多块方法:& & 1.发送CMD18读,收到0x00表示成功& & 2.连续读直到读到开始字节0xFE& & 3.读512字节& & 4.读两个CRC字节& & 5.如果还想读下一扇区,重复2-4& & 6.发送CMD12来停止读多块操作
5、写单块和多块:& & SD卡用CMD24和CMD25来写单块和多块,参数的定义和读操作是一样的。
& & 写单块方法:& & 1.发送CMD24,收到0x00表示成功& & 2.发送若干时钟& & 3.发送写单块开始字节0xFE& & 4.发送512个字节数据& & 5.发送2字节CRC(可以均为0xff)& & 6.连续读直到读到XXX00101表示数据写入成功& & 7.继续读进行忙检测(读到0x00表示SD卡正忙),当读到0xff表示写操作完成& & 写单块时序图: 写多块方法:& & 1.发送CMD25,收到0x00表示成功& & 2.发送若干时钟& & 3.发送写多块开始字节0xFC& & 4.发送512字节数据& & 5.发送两个CRC(可以均为0xff)& & 6.连续读直到读到XXX00101表示数据写入成功
& & 7.继续读进行忙检测,直到读到0xFF表示写操作完成& & 8.如果想读下一扇区重复2-7步骤& & 9.发送写多块停止字节0xFD来停止写操作& & 10.进行忙检测直到读到0xFF
/* 命令响应定义 define command's response */
#define R1 1
#define R1B 2
#define R2 3
#define R3 4
/**********************************************
& &&&SD卡SPI模式下命令集
**********************************************/
/******************************** 基本命令集 Basic command set **************************/
/* 复位SD 卡 Reset cards to idle state */
#define CMD0 0
#define CMD0_R R1
/* 读OCR寄存器 Read the OCR (MMC mode, do not use for SD cards) */
#define CMD1 1
#define CMD1_R R1
/* 读CSD寄存器 Card sends the CSD */
#define CMD9 9
#define CMD9_R R1
/* 读CID寄存器 Card sends CID */
#define CMD10 10
#define CMD10_R R1
/* 停止读多块时的数据传输 Stop a multiple block (stream) read/write operation */
#define CMD12 12
#define CMD12_R R1B
/* 读 Card_Status 寄存器 Get the addressed card's status register */
#define CMD13 13
#define CMD13_R R2
/***************************** 块读命令集 Block read commands **************************/
/* 设置块的长度 Set the block length */
#define CMD16 16
#define CMD16_R R1
/* 读单块 Read a single block */
#define CMD17 17
#define CMD17_R R1
/* 读多块,直至主机发送CMD12为止 Read multiple blocks until a CMD12 */
#define CMD18 18
#define CMD18_R R1
/***************************** 块写命令集 Block write commands *************************/
/* 写单块 Write a block of the size selected with CMD16 */
#define CMD24 24
#define CMD24_R R1
/* 写多块 Multiple block write until a CMD12 */
#define CMD25 25
#define CMD25_R R1
/* 写CSD寄存器 Program the programmable bits of the CSD */
#define CMD27 27
#define CMD27_R R1
/***************************** 写保护 Write protection *****************************/
/* Set the write protection bit of the addressed group */
#define CMD28 28
#define CMD28_R R1B
/* Clear the write protection bit of the addressed group */
#define CMD29 29
#define CMD29_R R1B
/* Ask the card for the status of the write protection bits */
#define CMD30 30
#define CMD30_R R1
/***************************** 擦除命令 Erase commands *******************************/
/* 设置擦除块的起始地址(只用于SD卡) Set the address of the first write block to be erased(only for SD) */
#define CMD32 32
#define CMD32_R R1
/* 设置擦除块的终止地址(只用于SD卡) Set the address of the last write block to be erased(only for SD) */
#define CMD33 33
#define CMD33_R R1
/* 设置擦除块的起始地址(只用于MMC卡) Set the address of the first write block to be erased(only for MMC) */
#define CMD35 35
#define CMD35_R R1
/* 设置擦除块的终止地址(只用于MMC卡) Set the address of the last write block to be erased(only for MMC) */
#define CMD36 36
#define CMD36_R R1
/* 擦除所选择的块 Erase the selected write blocks */
#define CMD38 38
#define CMD38_R R1B
/***************************** 锁卡命令 Lock Card commands ***************************/
/* 设置/复位密码或上锁/解锁卡 Set/reset the password or lock/unlock the card */
#define CMD42 42
#define CMD42_R& & & & R1B
/* Commands from 42 to 54, not defined here */
/***************************** 应用命令 Application-specific commands ****************/
/* 禁止下一个命令为应用命令&&Flag that the next command is application-specific */
#define CMD55 55
#define CMD55_R R1
/* 应用命令的通用I/O&&General purpose I/O for application-specific commands */
#define CMD56 56
#define CMD56_R R1
/* 读OCR寄存器&&Read the OCR (SPI mode only) */
#define CMD58 58
#define CMD58_R R3
/* 使能或禁止 CRC Turn CRC on or off */
#define CMD59 59
#define CMD59_R R1
/***************************** 应用命令 Application-specific commands ***************/
/* 获取 SD Status寄存器 Get the SD card's status */
#define ACMD13 13
#define ACMD13_R R2
/* 得到已写入卡中的块的个数 Get the number of written write blocks (Minus errors ) */
#define ACMD22 22
#define ACMD22_R R1
/* 在写之前,设置预先擦除的块的个数 Set the number of write blocks to be pre-erased before writing */
#define ACMD23 23
#define ACMD23_R R1
/* 读取OCR寄存器 Get the card's OCR (SD mode) */
#define ACMD41 41
#define ACMD41_R R1
/* 连接/断开CD/DATA[3]引脚上的上拉电阻 Connect or disconnect the 50kOhm internal pull-up on CD/DAT[3] */
#define ACMD42 42
#define ACMD42_R R1
/* 读取SCR寄存器 Get the SD configuration register */
#define ACMD51 51
#define ACMD51_R R1
复制代码
17:50:34  
学习。正打算入门
10:36:07  
公司使用SD卡,这篇文章对我深入了解SD卡很有帮助,谢谢分享
19:42:53  
一直在纠结TF卡和SD卡操作有没有区别,你这篇文章解决了我的困惑
13:54:49  
先收藏了,谢谢楼主分享
13:06:23  
楼主 我想问您一个问题:
例如一单反相机和电脑同时读一张SD卡&&是否可以实现?
以下为我测试所遇问题: 当相机单独用SD卡延长线 可以正常用, 如果另一头插上读卡器接电脑就读不到卡,&&相反如果先让电脑读到SD卡&&,相机就读不到卡。&&也就是两个设备无法一起读这一张卡。
求解决方案(报酬可议)
这图片上面我是用了两个TF卡接口来替换,接相机线和接电脑的线我可以合到一起,
QQ图片51.jpg (614.8 KB, 下载次数: 2)
13:07 上传
14:07:34  
等待验证会员
18:41:45  
特别感谢楼主!
16:37:14  
楼主好厉害,好想像楼主一样厉害
08:51:50  
深入了解SD卡很有帮助,谢谢分享
等待验证会员
21:51:20  
在做智能车调试的时候用到了TF卡,入门学到很多
等待验证会员
22:33:49  
学习了,谢谢分享
18:57:46  
您好&&我也是按照这样来到可是为什么写单快时,命令写入成功,512字节写不进去,应答命令低5位不是00101!这是什么原因呢?复位SPI模式和初始化返回都是0x00也就是都正常!
Powered by&主题:micro sd + 适配器 和普通sd卡有性能上的区别吗
泡网分: 3.507
帖子: 3172
注册: 2010年12月
micro sd + 适配器 和普通sd卡有性能上的区别吗
如果一样那岂不是买micro sd就行了
作者相关热贴:
微信扫一扫分享
&浏览:343&&回帖:7 &&
泡网分: 49.011
帖子: 18466
注册: 2008年02月
毕竟多了一样的转换。但是一般使用起来感觉差异不大,甚至感觉不到差异。
泡网分: 12.484
帖子: 3386
注册: 2009年09月
TF卡速度慢一点,价钱也便宜一点,对速度要求不高就买带SD卡套的用合算
本帖由 nubia NX503A 客户端发布
泡网分: 2.115
帖子: 1941
注册: 2013年06月
micro sd&&速度比SD卡大概慢一半(同等级的情况)
稳定性也比SD卡略差 写入读取速度是 micro sd的缺点
但是一般旅游 家用是没有问题的
泡网分: 23.265
帖子: 1796
注册: 2005年01月
预备几个好点儿的卡套,这个影响倒比较大
本帖由 Windows Phone_1.0.7.0 客户端发布
泡网分: 29.247
帖子: 1866
注册: 2003年08月
micro SD速度相对慢一些。
本帖由安卓客户端发布
泡网分: 3.507
帖子: 3172
注册: 2010年12月
scottean 发表于
我用过,我去旅游时相机里的SD满了,临时用手机里的TF+套顶上了,没有感觉到任何区别。
PS:Micro-SD和SD价钱几乎一样,您这样用是为什么呢??Micro-SD 可以插在sd的位置,反之不行阿
泡网分: 0.817
注册: 2005年01月
我用过,我去旅游时相机里的SD满了,临时用手机里的TF+套顶上了,没有感觉到任何区别。
PS:Micro-SD和SD价钱几乎一样,您这样用是为什么呢??
&版权所有:&&桂ICP备号&增值电信业务经营许可证sd卡电路_中国百科网
专题字母分类:  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  
您现在的位置: >
> 专题内容:
    一般都不这样设置,因为这样设置的话市场不怎么好卖 除非自己再画电路,而且...就是插入U盘或sd卡可以自动读盘。 要有上一首/下一首/暂停按键功能,要与AUX...摘要:分析了基于STC单片机的SD卡的读写操作,给出了一种基于高速、低功耗、超强抗干扰的新一代STCl2C5A60S2系列IT单片机的SD卡读写方法。 该方法利用串行外围接口总线与SD卡相连,从而实现了对SD卡的数据读写...考虑到SD卡在SPI协议的工作模式下,通讯都是单向的,于是在单片机向SD卡传输数据时采用晶体管加上拉电阻法的方案,基本电路如图1所示。 而在SD卡向单片机传输数据时...摘要:本文详细介绍了SD卡的基本结构、技术特征和FAT16文件系统的原理、组成,开发了一种基于MSP430F449单片机和SD卡的FAT16文件存储系统,对接口电路进行了设计,同时给出了软件系统的设计流程。 该系统成功的应用在电量测量仪中...SD卡有两种工作模式,即SD和SPI模式。 由于LM3S8962具有SPI接口,为此该嵌入式系统采用SPI模式。 SD卡电路如图1所示。 SD卡的信号检测线CARD_INSERT接CPU的PG0端口...SD卡有两种工作模式,即SD和SPI模式。 由于LM3S8962具有SPI接口,为此该嵌入式系统采用SPI模式。 SD卡电路如图1所示。 SD卡的信号检测线CARD_INSERT接CPU的PG0端口...考虑到SD卡在SPI协议的工作模式下,通讯都是单向的,于是在单片机向SD卡传输数据时采用晶体管加上拉电阻法的方案,基本电路如图1所示。 而在SD卡向单片机传输数据时...摘要:基于STM32F103XX微控制器的远程智能心脏检测仪采用MicroSD作为存储介质保存特定的心电信号。 所存Micro SD卡中的存储数据要能够在计算机上直接存取,需要存储的数据以FAT32文件格式写入Micro SD卡。 研究了使用STM32F103XX微...采用SPI模式实现与SD卡的接口。 由于MCF51QE128是一款低功耗的微控制器,工作电压的典型值为3.6 V,与SD卡的工作电压兼容,因而可以直接与SD卡连接,无需电平转换...同时,本设计具有高可移植性,可以方便地移植到其他需要大容量存储器的嵌进式系统中,只需在软件操纵系统嵌进关于访问SD卡的软件程序,无需修改已设计好的硬件电路...由于CAN总线数据传输速率较高,因此本设计采用SD模式的4线高速数据传输功能。 LPC2368与SD卡接口电路如图2所示,使用SD通信协议将SD和LPC2368相连实现数据传输。 CMD...考虑到SsD卡在SPI工作模式下,数据的传输都是单向的,这样可以在单片机向SD卡传输数据时采用晶体管加下拉电阻的方法,基本电路如图1所示。 而在 SD卡向单片机传输...0 引言 当前,人们对大数据量的高速存取需求越来越高。SD卡作为新一代数据存储设备,具有大容量,高速度的特点,很好地满足了市场的具体需求,被广泛用于便携式消费...摘 要:利用ARM处理器LPC2l48与SD卡接口,设计了一种新颖的多参数电能耗用记录仪,用于大容量耗电数据采集。该记录仪采用FAT32文件系统,可将现场各种电能耗用数据...STM32F103VB与SD卡卡座的接口电路如图1所示。 SD卡的最高数据读写速度为10 MB/s,接口电压为2.7~3.6 V,具有9个引脚。 SD卡使用卡座代替传输电缆,减少了环境干扰...摘要:随着嵌入式系统的发展,越来越多的嵌入式设备需要处理大量的数据,使用文件系统将成为这类嵌入式应用的一个必然趋势。 本文基于Freescale公司MCF51QEl28微控制器和SD卡,结合实验数据深入探讨了FATl6文件系统及其存储原则...考虑到SsD卡在SPI工作模式下,数据的传输都是单向的,这样可以在单片机向SD卡传输数据时采用加下拉电阻的方法,基本电路如图1所示。 而在 SD卡向单片机传输数据时...SPI模式下SD卡的引脚定义如表1所示。 在该模式下,SD卡为主机提供了CS、SCLK、DI、DO四线接口。 ATMEGAl28单片机与SD卡的接口电路如图3所示...厂家只需将SD卡取回,把更新后的程序放入SD卡中,然后发放给用户,用户只需把SD卡插入终端设备. 即可达到系统升级的目的。 图1给出厂商与用户之间的交流流程图...

我要回帖

更多关于 micro sd卡量产工具 的文章

 

随机推荐