SD卡

2024-05-26

SD卡(精选11篇)

SD卡 篇1

SD卡在现在的日常生活与工作中使用非常广泛, 时下已经成为最为通用的数据存储卡。在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。SD卡之所以得到如此广泛的使用, 是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。既然它有着这么多优点, 那么如果将它加入到单片机应用开发系统中来, 将使系统变得更加出色。这就要求对SD卡的硬件与读写时序进行研究。对于SD卡的硬件结构, 在官方的文档上有很详细的介绍, 如SD卡内的存储器结构、存储单元组织方式等内容。

1 SD卡标准

SD卡标准是SD卡协会针对可移动存储设备设计专利并授权的一种标准, 主要用于制定卡的外形尺寸、电气接口和通信协议。

1.1 SD卡引脚功能

SD卡的外形如图1所示, 引脚功能如表1所列。SD卡的引脚具有双重功能, 既可工作在SD模式, 也可工作在SPI模式。不同的模式下, 引脚的功能不同。

SD模式多用于对SD卡读写速度要求较高的场合, SPI模式则是以牺牲读写速度换取更好的硬件接口兼容性。由于SPI协议是目前广泛流行的通信协议, 大多数高性能单片机都配备了SPI硬件接口, 硬件连接相对简单, 因此, 在对SD卡读写速度要求不高的情况下, 采用SPI模式无疑是一个不错的选择。

1.2 SPI模式

SPI模式是一种简单的命令响应协议, 主控制器发出命令后, SD卡针对不S同的命令返回对应的响应。

SD卡的命令列表都是以CMD和ACMD开头, 分别指通用命令和专用命令, 后面接命令的编号。例如, CMD17就是一个通用命令, 用来读单块数据。

在SPI模式中, 命令都是以如表2的6字节形式发送的。

每帧命令都以“01”开头, 然后是6位命令号和4字节的参数 (高位在前, 低位在后) , 最后是7位CRC校验和1位停止位“1”。

SD卡的每条命令都会返回对应的响应类型。在SPI模式下, 共有3种响应类型:R1、R2和R3, 分别占1、2和3个字节。这里仅列出了R1响应的格式, 如表3所示。当出现表中所描述的状态时, 相应的位置1。R2和R3的第1个字节格式与R1完全一样, 详细内容请参考SD卡标准。

2 硬件设计

使用最简单的51单片机STC89C52实现了对SD卡的读写数据操作, 使用的是SPI协议与单片机通信, 只用4根线与单片机的P14, P15, P16, P17引脚相连。由于51单片机是5V电压, 而SD卡是3.3V供电, 所以采用了分压电路来进行了电压的隔离。SD卡的第7脚DO由于是数据输出, 3.3V可以直接被51单片机识别的高电平, 所以可以与单片机引脚直接相连。具体连线方法如图2所示。

3 软件实现

软件部分主要实现底层SPI通信, SD卡的复位, SD卡的初始化、以及SD卡的通用写命令和单块数据的读写等功能。

3.1 底层SPI通信函数

3.2 SD卡的通用写命令

由于SD卡的命令具有统一的格式, 因此可以用一个通用的写命令函数来实现所有命令的发送。另外, 考虑到多数命令的响应类型都是R1, 这里的通用写命令函数所接收的响应类型默认为R1。

3.3 SD卡的初始化

SD卡的初始化要遵循一定的步骤。首先将SPI时钟降低到400 k Hz, 等待至少74个时钟周期。接着拉低片选信号, 并发送CMD0命令, 对SD卡进行复位并使其进入SPI模式, 这里需要正确的CRC校验, 校验字节为0x95。若SD卡进入空闲状态 (即接收响应为0x01时) , 则发送CMD1命令, 激活卡的初始化过程, 此时响应为0x00。然后设置块的长度, 一般为512字节。最后将片选拉高并将SPI时钟设为最大值, 以保证最大的读写速度。SD卡初始化过程如图3所示。

SD卡复位代码如下:

SD卡的初始化函数如下:

3.4 SD卡单块数据读写

SPI模式支持单块和多块数据的读写操作, 可通过发送相应的命令来实现。读单块数据的操作过程如图4所示。拉低片选后, 首先由主控制器MCF51QE128发送读单块数据命令CMD17, 然后等待SD卡的响应。当收到数据块开始标志0xfe后, 开始从SD卡读取512字节的数据, 最后读取2字节的CRC校验位。

读单块数据的函数代码如下:

写单块数据的操作过程与读操作类似。拉低片选后同样由主控制器MCF51QE128发送写单块数据命令CMD24, SD卡正确响应后发送数据块开始标志0xfe, 接着发送512字节数据块和2字节CRC校验。

写入数据后, SD卡会发送1字节的数据响应来反馈数据写入的情况, 其格式如图5所示。当数据正确写入SD卡后, 数据响应为0x05。最后读数据总线, 写数据忙时等待, 直到总线为高电平。

写单块数据的函数代码如下:

编写了一个测试的主程序, 从SD卡上621扇区开始一个块一个块地读数据, 同时一个块一个块地复制到701扇区, 共复制80个扇区的数据。这些数据是一副图片, 最终在液晶上显示701扇区开始的图片, 结果显示, 图片复制成功。复制数据的代码如下:

最终实验效果图如图6所示。

SD卡 篇2

1你的数据线或连接埠坏了

更换一根数据线试试或用读卡器读一下,

2联机USB口电压不足

不要使用电脑前端面板的USB口,尝试一下后面的USB口,

3电脑系统故障

更换一台电脑试一下或重装一下操作系统。

4操作不正确

部分品牌的相机与电脑联机操作设置比较麻烦(如佳能),应该将相机打到查看档再进行联机.建议再仔细阅读一遍说明书。

有的SD卡兼容性不是很好,或者是有的相机照出来的文件格式兼容性不是很好,再或者是读卡器的兼容性不是很好。

ROM文件复制到外置SD卡 篇3

Q:有一次我在看S5直播的时候,直接复制链接到Edge里面,明显感觉话语的细节更清晰。后来在网页上听歌,也感觉变化明显。不知道是我的心理作用,还是微软使用了什么“黑科技”?

A:微软在它的一篇官方博客中宣布:“Edge浏览器将对HTML5、MSE和EME格式的多媒体内容提供杜比音效支持,从而为H.264视频带来更加出色的画面展现和多声道听觉体验。未来杜比音效将被应用于AVC/H.264视频以及此前宣布的HLS和MPEG DASH Type 1串流服务当中”,原因应该就在这个地方吧。

◆ 如何让Adobe Acrobat瘦身

Q:自从前两年我安装Adobe Acrobat以来,一直随着官方的步骤在不断地更新该程序。结果近来一看该文件夹,已经达到7.6GB的大小了。请问如何让它瘦身啊?

A:现在Adobe Acrobat也和Windows系统一样,通过发布补丁来修复漏洞以及拓展功能。随着补丁文件在文件夹里面的日积月累,当然也就会出现你遇到的这个问题。所以首先在文件夹里面找到“Adobe patch files”这个目录,找到后将其彻底删除就可以了(为了安全起见请先做备份,确定能正常工作后再清除备份即可)。当然不嫌麻烦的话,也可以通过下载新版本的安装包进行升级。

◆ Edge浏览器首页被绑定

Q:最近我每次打开Edge浏览器的时候,主页都变成了百度搜索的页面。我用的是ADM广告屏蔽软件,但是我已经关闭了首页捆绑。请问这是什么原因造成的?

A:这个是因为最近微软公司和百度公司开展了合作,百度成为Edge浏览器默认的主页和搜索引擎,于是也就出现了你所说的情况。不过好在用户可以进行自定义设置,将其修改为自己喜欢的首页信息即可。首先点击右上角的更多操作按钮,在弹出的菜单里面选择“设置”命令,然后在“打开方式”里面进行设置就可以了。

◆ Chrome46无法打开开发者工具

Q:最近谷歌浏览器升级到46以后,按照以前的方法进行操作,结果发现无法打开开发者工具。到底是新版本取消了开发者工具,还是我打开的方式不对啊?

A:通常情况下点击右上角的选项按钮,在弹出的菜单里面点击“工具”命令,接着选择子菜单中的“开发者工具”命令即可。不过据描述猜测问题出现的原因是使用了快捷键,有的版本将快捷键改为Ctrl+Shift+I,按照老方法操作就会有问题。Q:我手上没有现成的SD读卡器,但是需要从电脑中把ZIP或ROM文件复制到手机外置的SD卡上。请问有没有一种软件,可以把手机上的SD卡映射为一个盘符?

A:理论上无论是内置存储卡还是外置存储卡,通过数据线连接到电脑以后就会显示出来。不过需要在状态栏点击“USB计算机连接”,然后点击菜单中的“打开USB存储设备”命令即可。如果这么操作不成功的话,可以先将文件复制到内置存储卡中,然后通过文件管理器剪切到外置存储卡中即可。

SD卡 篇4

嵌入式系统开发一般采用宿主机-目标机的形式,开发人员在宿主机上搭建开发环境完成对目标机的开发和调试。目标机上电后通常会运行一段加载操作系统的程序,称之为Boot Loader。Boot Loader的主要目标就是加载并执行操作系统镜像。Boot Loader加载操作系统镜像可以采用通过以太网、USB线、串口线等媒介下载的方式,也可以采用从FLASH等本地存储设备读取镜像的方式。由于在开发过程中需要频繁地更新目标机上的镜像,所以镜像下载显得尤为重要。考虑到产品应用,目前应用于便携式嵌入式产品的SoC芯片内部基本上都不集成网卡控制器,所以在嵌入式开发中主流的下载方式为串口和USB下载。串口下载连接方式简单,但速度是其最大的缺陷。USB下载的连接方式也很简单,速度上也很好地弥补了串口下载的不足,但由于USB下载方式不但要开发目标机上的驱动而且要开发主机端应用程序。这样不仅开发上增加了难度,还在使用上增加了些许不便。

本文基于东南大学国家专用集成电路系统工程技术研究中心SEP5010处理器平台[1]实现了EBoot下通过SD卡下载操作系统镜像的功能。EBoot为Windows CE平台的Boot Loader。SD卡( Secure Digital Memory Card )是一种基于半导体快闪记忆器的记忆设备。SD卡具有体积小、功耗低、成本低、高可靠、可擦写、非易失性等特点,目前已广泛应用于MP3、数码相机、数码摄像机、手机等消费类电子嵌入式产品。本文提出的SD卡下载方式是EBoot下操作系统镜像下载方式的很好补充,其下载速度可以达到MB/s的量级,并且操作非常简单,只要宿主机上的镜像通过读卡器拷贝到SD卡中,再将SD卡插入到目标机,然后即可运行EBoot进行镜像下载。这种方式不仅给开发带来好处,还给以后用户更新操作系统带来便利。

2 设计背景

2.1 硬件背景

图1所示为基于SEP5010处理器平台的SD卡接口电路。SEP5010的SD控制器与SD卡主要通过6根线相连,SDCMD线传输SD控制器发出的命令信号以及SD卡发出的响应信号;SDCLK线是SD控制器为SD卡提供的时钟信号;SDDAT0,SDDAT1,SDDAT2,SDDAT3号这4根线为SD卡和SD控制器提供数据传输的通道。图1中的VCC3为SD卡提供电源。另外PA3,PD0是SEP5010的2个通用GPIO口,系统可以通过分别读PA3,PD0的电平来获知SD卡有没有插入SD卡槽和写保护。卡插上时PA3的电平为低电平,写保护时PD0的电平为高电平。

2.2 软件背景

2.2.1 EBoot

图2为EBoot的一般执行顺序[2]。在系统上电后EBoot便开始运行:

(1) 进行代码重定位,把EBoot自身代码从不能进行线形访问的存储介质拷贝到可以进行线形访问的存储介质,比如从FLASH ROM拷贝到ROM或RAM中。

(2) 对内存进行配置以满足EBoot的运行需要以及初始化执行高级语言所需要的环境,一般高级语言为C语言。

(3) 将编译器定义的可写的数据段拷贝到RAM中,拷贝的原因为EBoot有时是在只读媒体上执行而不能进行写操作。

(4) 初始化外设的调试端口和一些设备端口并执行自检,在自检过程中会初始化一些硬件设备,以检查它们是否可用。

(5) 自检成功后则下载操作系统镜像到RAM中,最后当操作系统镜像下载成功后,就可跳转到操作系统镜像执行。

2.2.2 FAT文件系统

File Allocation Table(FAT)即文件分配表[3]。目前应用广泛的FAT文件系统为FAT16和FAT32文件系统。FAT文件系统的分区由4个区域组成,具体分布如图3所示。第一块区域为保留区(Reserved Region),这块区域的有效部分主要为BPB(BIOS Parameter Block),这个数据结构主要包含的是该FAT文件系统的基本信息。第二块区域为FAT表区(FATRegion),其作用为将某一文件所占用的所有簇串接起来并通过簇号来映射该FAT分区的数据区。FAT表为规定大小的单元组合,该单元即“簇入口”,该单元在FAT表中的位置跟簇号对应。第三块区域为根目录区域(Root Directory Region),该区域只出现在FAT16分区中,FAT32分区的根目录在数据区中,该区域由32 B大小的文件夹入口构成。文件夹入口的信息包括该文件夹入口的属性。第四块区域为文件和文件夹数据区域(File and Directory Region),该区域是以簇为单元组织。

3 软件设计

SD卡下载方式在原有EBoot的基础上主要完成的工作分为3个部分,第一个部分为SD卡的初始化,这一部分在Eboot中的硬件平台初始化的步骤中完成;第二部分为打开操作系统镜像文件(NK.bin),即获得操作系统镜像文件在SD卡中的具体位置以及大小,这一部分在EBoot中的预下载步骤中完成;第三部分为将操作系统镜像从SD卡中下载到SDRAM指定位置。这一部分在Eboot中的下载步骤中完成。

3.1 SD卡的初始化

SD卡的初始化包括使得SD卡进入数据传输状态以及获得SD卡中的文件系统的基本信息。

使得SD卡进入数据传输状态的主要进行的步骤如图4所示。初始化GPIO(通用输入/输出口)是为了检测SD卡有无插上和有无写保护。发送一系列命令的过程如下[4]。

(1) 发送0号命令,0号命令的作用为重启SD卡,使它进入空闲状态。

(2) 发送41号应用命令,41号应用命令是一个以工作电压范围为参数的命令,如果SD卡的工作电压与该范围不匹配则进入非激活状态,否则继续运行,并将其运行条件寄存器作为响应的一部分发给SD控制器。

(3) 发送2号命令,其作用为命令SD卡发送包含SD卡基本信息的响应。

(4) 发送3号命令,其作用是命令SD卡将其相对地址作为响应的一部份发给SD控制器,然后SD卡进入等待状态。

(5) 发送7号命令,其作用是将SD卡选中,并使其进入数据传输态。

(6) 发送6号应用命令,使得SD卡进入4位传输态,数据通过4根数据线传输。复位SD控制器的收发FIFO是为了清空其中的残留数据,为之后的数据传输做准备。

获得SD卡文件系统的基本信息主要通过读取SD卡的第0扇区(扇区是文件系统中的概念,它就相当于SD卡规格书中的块)来获得,并将其存入到一个全局指针指向的数据结构中。

3.2 打开操作系统镜像文件

打开操作系统镜像即为找到操作系统镜像的具体位置和大小,其具体过程如图5所示。首先根据已获取的SD卡文件系统的基本信息得到文件系统的根目录的在SD卡中的位置;然后在这个根目录中找到与操作系统镜像的第一级路径名匹配的文件夹入口,然后根据该入口信息找到下一目录的位置,从该位置开始再找与第二级路径名匹配的文件夹入口。这样的过程一直重复直到找到与最后一级路径名,也就是操作系统镜像名称匹配的文件夹入口。这样就得到了操作系统镜像的具体位置以及大小并将其存入到一个全局指针指向的数据结构中。

3.3 下载操作系统镜像

目前设计中下载的镜像为BIN格式文件。BIN格式文件组织,如图6所示。它的开头是7个字节的文件类型标识码。标识码之后的4个字为数据被下载到内存后在内存中的起始地址,而后的4个字节为下载到内存中的二进制镜像大小。之后的所有数据由若干块组成,每一块分为4个部分,第一部分为4个字节,表示这一块数据区被下载到内存后在内存中的起始位置;第二部分也为4个字节,表示这一块数据区的大小;第三部分也为4个字节,表示数据区的校验和;第四部分为数据区。将操作系统镜像从SD卡下载到内存中时,程序会根据已获得的操作系统镜像的位置信息和大小来读取操作系统镜像。读取按照下载镜像文件的结构以块为单位读取,然后将块中的数据区写入到内存中相应的位置。

下载SD卡中的文件系统中的操作系统镜像文件到内存中的过程跟读取一般介质上的FAT文件系统中的某一文件的过程本质没有差别。首先根据已获得的操作系统镜像的位置来下载其起始的簇的数据到内存中,下载完该簇后从FAT表中与该簇号对应的位置获得下一簇的簇号来继续下载,这样一直持续到把操作系统镜像的所有数据都下载完。当下载操作系统镜像的最后一簇到内存中时,根据已获得的操作系统镜像的大小,下载完该簇的对应的文件结尾处的数据后就完成了操作系统镜像文件的下载。

3.4 SD卡的读取操作

由于SD卡读取时最小的读取单位是一个块(Block),而文件系统提供给上一级读取的函数的最小读取单位为字节,这将遇到字节数与块数的转换的问题。在本设计,当上一级函数读取数据时,将SD卡中所涉及的Block全部读取到内存中的一个缓存区中,然后再从缓冲区中以字节为单位读取数据。

4 性能比较

本文对串口、USB和SD这3种下载方式在下载速度方面的比较共进行了3次试验,表1为实验数据。在本实验中下载的操作系统镜像的大小为9 431 kB,SD卡的容量为1 Gb,文件系统为FAT16时簇大小为4 kB,文件系统为FAT32时簇大小为16 kB。

从表中可以看出,串口的平均下载速度为8.62 kB/s,USB下载(SEP5010的USB控制器为USB 1.1控制器)的下载速度为695.5 kB/s,SD卡下载时,如果卡中为FAT16文件系统的下载速度为947.8 kB/s,如果是FAT32文件系统,其下载速度为865.2 kB/s。测试结果表明,SD卡下载的速度不仅远远超过本平台上串口的下载速度,而且也超过了本平台上USB 1.1的下载速度。

从表1中还可以看出,相对于FAT32,SD卡中的文件系统为FAT16时的下载速度要更快。这是由于在代码中文件是按簇来读取的,当一个簇读完时,在读下一个簇之前会存在一个寻找下一簇的时间。对于一个远大于簇大小的文件,在本设计中其在FAT32文件系统占用簇的数量大约是其在FAT16文件系统占用簇的数量4倍。则程序在FAT32文件系统中读取该文件时,其占用的寻找下一簇的总时间也大约是其在FAT16文件系统中读取该文件时占用的响应时间的4倍。所以在本设计中,相同的文件从FAT16文件系统中读取所消耗时间少于从FAT32文件系统中读取的时间。

5 结 语

本文在SEP5010处理器平台上实现了在EBoot下通过SD卡下载镜像文件方式。在该平台上相对于其他下载方式,SD卡下载方式不仅在速度上有优势,而且操作也相对简单。操作的相对简单不但给开发调试带来便利,而且降低了在后续产品的软件升级的门槛,方便了客服人员及用户。

摘要:在基于WinCE构建的嵌入式系统中,EBoot下载操作系统镜像时主要为以太网、USB线、串口下载的方式。由于目前SD卡的广泛应用,通过SD卡下载操作系统镜像则成为EBoot操作系统镜像下载方式的很好的补充。这里基于东南大学国家专用集成电路系统工程技术研究中心SEP5010处理器平台实现了EBoot下SD卡下载的功能。镜像数据在SD卡中以文件系统文件的方式存在,方便了从开发工作站下载镜像。实验结果表明,该方案可以达到948 kB/s的数据平均下载速度。

关键词:SD卡,SEP5010,镜像下载,EBoot,FAT文件系统

参考文献

[1]国家专用集成电路系统工程技术研究中心.SEP5010用户手册[Z].2007.

[2]何宗健.Windows CE嵌入式系统[M].北京:北京航空航天大学出版社,2006.

[3]SD Group.SD Memory Card Specifications[S].Version 1.0,2000.

[4]Microsoft Corporation.Microsoft Extensible Firmware InitiativeFAT 32 File System Specification[S].Version 1.03,2000.

[5]张冬泉.Windows CE实用开发技术[M].北京:电子工业出版社,2006.

[6]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003.

[7][英]Steve Furber.ARM SoC体系结构[M].田泽,译.北京:北京航空航天大学出版社,2002.

[8]微软公司.Microsoft Windows CE设备驱动程序开发指南[M].北京:北京希望电子出版社,1999.

[9]尤晋元,史美林.Windows操作系统原理[M].北京:机械工业出版社,2001.

SD卡 篇5

存储性能优异

东芝极至超速N401系列SD卡作为EXCERlA UHS-I SDHC卡的升级产品,拥有优异的传输速度,最高读取速度为95MB/s*,写入速度为75MB/s*,比前代产品的60MB/s的写入速度有大幅提升。拥有Class10速度等级和UHSSpeed Class 3速度等级,出众的性能可针对4K视频、高分辨率照片等中高端微单、单反、摄像机进行读写优化,以支持不间断高清连拍,和4K极清视频拍摄,防止拍摄时出现丢帧、断片等现象。

拍照效果不俗

在实际使用中,我们使用该存储卡搭配具有高速连拍功能的的数码相机进行拍摄测试,存储格式选为最大的RAW+uPG格式,从实际的使用效果上看,在连拍几十张的情况下,该存储卡完全可以满足高端单反相机拍摄时巨大的数据传输需求。

为了测试该存储卡对4K视频的支持情况,在本次实际使用中,我们使用具有4K视频拍摄功能的相机进行录制。从写入速度到后期回放时的读写速度上看,都非常的顺畅。无论录制或是回放均没有出现卡顿、跳帧等现象。而后期配合USB3.0读卡器使用也可以快速的将数据存储到电脑中。是商业摄影师、视频工作者不可错过的存储卡。

51单片机SD卡SPI模式操作 篇6

关键词:sd卡,spi接口,时序

sd卡以其大容量、低成本、携带方便、存储数据简单和安全可靠性高被大量应用于数码电子设备中, 比如数码相机、数码摄像机、mp3、pda、电子学习机、电子图书等。对sd卡的操作有复位、初始化、读写等, 下面以本人掌握的材料对sd卡的操作进行分析。

一、sd卡的结构

sd卡的外形与接口如图1, 它有9个接点与主机相连, 其接口端定义如表1所示。sd卡有两种操作模式, 一种是sd模式, 另一种是spi模式, 不同模式下端口的定义不同。SD模式有一个时钟线、一个命令/反馈线、四根输入/输出信号线、两个电源地和一个电源, 所有九根线都有定义, 数据传输速率较快。SPI模式只用到CS片选、数据输入、数据输出、时钟、电源地及电源六根线。SPI模式较SD模式速度较慢, 但很多单片机都有专用的SPI总线, 可与sd卡直接相连, 使用方便。

SD卡的内部结构如图2所示, 主要有四部分组成, 一是接口电路, 共有九个接口电路, 定义如表1所示。二是接口控制电路, 所有操作都由该控制电路具体去执行。三是内部寄存器组OCR、CID、RCA等。四是存储数据的存储单元。接口电路通过控制电路与内部寄存器组成存储单元交换数据, 其主要操作有写命令、读数据、写数据、读状态等。

二、sd卡的命令格式

sd卡的命令格式固定为6个字节48个位, 其格式如图3所示。

开始位固定为0, 第二位固定为1, 表示主机给sd卡的命令, 然后是6位命令索引号, 索引号的大小与索引号数字相同, 比如cmd0的索引号为000000, 索引号41为101001。紧接着命令索引号是命令参数, 有些命令有参数, 有些命令没有参数, 比如cmd0和cmd1命令参数为32个0, 而命令cmd24、cmd17的命令参数是数据的读写地址。最后是7位CRC校验位和一位停止位1。根据命令索引号可推知sd卡的命令最多不超过64个 (有些命令索引号为保留以后升级用, 没有实际的命令相对应) , sd卡协议把卡的命令分为若干类, 有些命令只有对sd模式起作用, 有些命令只对spi模式起作用, 大部分命令是通用的, 两种模式下具有相同的命令。

三、51单片机与sd卡在spi模式下的连接

由于51单片机内部没有集成spi模块, 使用51单片机与sd卡通讯要用51单片机的IO口模拟spi时序, 原则上51单片机的P0、P1、P2、P3口的任意位都可以与sd卡相连, 但由于P0与P2口常用于单片机的数据与程序存储器扩展, 而P3口又多用于第二功能, 比如串行通讯、计数、外部中断等, 实际上常用P1口与外部设备连接。第二个问题是接口电平的匹配, 像at89s51等大多数单片机都是5v电平, 而sd卡的电平是3.3v, 超过3.6V的电压将可能烧坏sd卡, 所以两者之间要进行电平转换。一种思路是用专用电平转换芯片, 但代价较高, 另一种是用分压的方式或降压的方式进行电平转换, 转换电路如图4所示。

图4中左图是一个分压式电平转换电路, 当输入是5V高电平时, 经分压输入3.3V, 当输入是0V低电平时, 输出端仍然是0V低电平。图4中右图是一二极管降压电路, 当输入为5V时, 经二极管降压, 输出为3.3V, 当输入为0V时, 二极管截止, 输出仍然是0V。两种转换电路都是单向转换, 只能是从5V电平转换为3.3V电平。

单片机与sd卡的连接电路图为图5所示。由单片机到sd卡的信号需要5V电平到3.3V电平的转换, cs片选信号、sd卡的数据输入信号以及sclk时钟信号都进行了分压式电平转换, 并且所有电路都加有上拉电阻。由sd卡到单片机的dout信号线直接接到了单片机的IO端口上, 如果单片机不能确认3.3V为高电平, 从sd卡到单片机的电路也需要进行电平转换。

四、sd卡spi模式下操作时序

1. 复位操作。

sd卡进行正常读写前必须进行复位操作, 复位操作的命令为cmd0, 由0x40, 0x00, 0x00, 0x00, 0x00, 0x95组成, 前两位固定为01索引号为000000, 参数为32位0, CRC校验为1001010, 结束位为1。进行sd卡操作必须满足严格的时序, 其时序图为所6所示。复位操作由5个步骤组成, 首先在片选信号cs为高电平时, 发送至少74个时钟周期;第二片选CS拉低, 发送cmd0命令;第三发送一定数量的时钟信号, 等待复位成功;第四如果收到01h应答信号, 表明复位成功, 如果收到的信号始终是ffh信号, 表明复位失败, 需要重复进行复位操作;第五片选CS拉高并发送8个时钟信号完成整个复位操作。

2. 初始化操作。

进行spi模式操作前, 必须进行spi初始化, 初始化命令为cmd1, 由0x41, 0x00, 0x00, 0x00, 0x00, 0xff组成。前两位固定为01, 命令索引号为000001, 32位参数为0, CRC校验为1111111, 结束标志为1。初始化时序为图7所示。首先把片选CS拉低, 发送cmd1信号;插入一定量的时钟信号, 等待sd在spi模式下的复位;如果收到00h的信号表明初始化成功, 如果收到的信号始终是ffh, 则表明初始化失败, 需要重新初始化操作;拉高片选CS, 并且发送8位时钟信号, 完成整个初始化操作。

3. spi模式下读扇区操作。

对sd卡的操作主要是对存储在sd卡的数据进行读写, spi模式下的读扇区操作时序如图8所示。读扇区命令为cmd17, 由0x51, 32位读地址, 0xff组成。前两位固定为01, 命令索引号为010001, 参数为32位读扇区地址, CRC校验为1111111, 结束标志为1。首先把CS拉低, 发送cmd17, 插入一定量的时钟信号, 等待命令发送成功, 当收到00h信号后表明命令发送成功, 如果始终收到的是FFh则表明发送命令失败, 需要重复发送, 插入一定量的时钟信号, 等待读取扇区数据。当收到0xfe标志后, 表示随后的512字节为接收的数据, 512个字节后是两字节CRC校验位, 但在spi模式下, 并不关心这些位的具体数值。操作结束, 拉高CS位, 并发送8个时钟信号。读取的数据长度可以由cmd16设定, 默认值是512个字节。

4. spi模式下写扇区操作。

对sd卡的操作主要是对存储在sd卡的数据进行读写, spi模式下的写扇区操作时序如图9所示。写扇区命令为cmd24, 由0x58, 32位读地址, 0xff组成。前两位固定为01, 命令索引号为011000, 参数为32位写扇区地址, CRC校验为1111111, 结束标志为1。

spi模式下, 写扇区操作可以分成三部分, 第一是写命令cmd24, 时序与前面的读扇区相同。CS拉低, 写入cmd24, 插入一定量的时钟信号, 当读回的是00h时, 表示命令写入成功, 然后再插入一定量的时钟信号, 如图中1-4部分。第二是向sd卡写入512字节的数据, 同读扇区命令相同, 写入的字节数也可由cmd16设定, 默认是512字节。首先写入扇区开始标志FFh, 紧接着写入512字节的数据, 最后是两字节的CRC校验, 因为spi模式下并不关心CRC校验的数据, CRC校验的数据可以是两个0x FF。发送完数据后可以连续读sd卡, 如果读回的数据的低五位是00101表明写入的512个字节的数据被sd卡所接收, 整个过程如图中5-8部分。第三是将数据存入sd卡相应的flash存储单元中, 这个过程需要一定时间, 在此时间段, sd卡呈现忙状态, 读sd卡数据端数据为00h, 此时间段需要发送一定量的时钟信号;直到读sd卡的数据端读回的数据是FFh, 表示数据写入成功, 拉高CS片选, 插入8个时钟信号。

结语

sd卡的操作还有很多, 比如读内部寄存器CID、CSD等信息, 对sd卡的数据的擦除等等, 其操作大同小异, 只不过使用的命令不同。在sd卡的复位及初始化时期, sd卡时钟信号应该保持低速, 否则就可能引起复位及初始化失败。sd卡在spi模式下, 通信速率较低, 要充分发挥sd卡的优势, sd卡应工作在sd模式下。随着嵌入式技术的发展, sd卡的使用范围越来越广, 掌握sd卡的操作将方便开发需要存储大量数据的智能设备。

参考文献

[1]SD Group.SD Memory Card Specifications.2000.

SD卡 篇7

传统的ARM嵌入式系统大多采用Nor Flash或Nand Flash这2种非易失闪存来存储程序和数据并且引导和启动系统的。而本文采用的是已经普遍应用于数字产品的SD存储卡。

SD卡较传统的Flash具有明显的优势:

首先, 价格便宜, 随着SD卡技术的发展和SD卡生产厂商的不断增加, SD卡的价格不断下降, 已经和Flash的价格相差无几。

其次, 存储容量大, 尤其是SDHC卡的出现, 目前已经能够达到32 GB, 并且增大趋势日益明显。再次, 读写方便, 我们可以通过读卡器读写SD卡, 比起仿真价格便宜, 读写速度快。

最后, 易插拔、更换和携带方便。

从上述分析可知, SD卡在今后ARM嵌入式的应用会逐渐增加, 且很多厂家的芯片已经外扩了SD卡接口。

2 系统组成及启动方式

ARM-Linux嵌入式系统包括硬件平台和软件平台2大部分。我个人在学习和研究ARM-Linux嵌入式系统时使用的平台如下:硬件平台采用Samsung公司的S3C6410处理器、128 M的mobile SDRAM、2 G的SD卡及其他外部接口设备。软件平台系统包括引导程序 (u-boot) 、嵌入式操作系统内核 (Kernel) 、文件系统 (File System) 。由于Linux的开源和使用的广泛性, 我选择了Linux内核。S3C6410是一种兼容性比较好的ARM11处理器。S3C6410的SD/MMC接口模块可以兼容MMC卡4.2协议和SD卡2.0协议。这样目前市场上流行的SD/MMC卡和SDHC卡基本就都可以兼容使用了。

S3C6410启动模式有多种方式, 分别由XSELNAND, OM[4:0], GNP[15:13]管脚控制。图1是系统引导的框图。系统引导的整个过程是先通过OM管脚确定系统通过什么器件启动。当把OM[4:1]设置为1111时, 表明系统从i ROM启动。i ROM启动后要把外围设备的代码拷贝到Stepping Stone中运行。此时GPN[15:13]用于识别设备的类型。当GPN[15:13]设置为111时, 即从SD/MMC (CH1) 设备中拷贝代码。Stepping Stone执行结束后要把BL2中代码拷贝到SDRAM中, 继续执行BL2中的程序。

3 S D卡引导Linux内核过程

3.1 BL1的引导

整个系统上电或复位后, PC指针指向i ROM的起始地址, 即0x08000000位置, 此段程序称为BL0, 大小为32 k B。这段代码是Samsung公司在做芯片的时候固化到芯片中去的。BL0执行最后的工作就是从SD卡中读取8 kB代码到I-RAM (Stepping Stone) 中, 然后PC指针指向I-RAM的起始地址。I-RAM的起始地址为0x0C000000, 此段程序称为BL1, 是用户自己写的代码并且存储到SD卡中的。

对于SD/MMC卡, S3C6410是从SD卡所有扇区的最后18个扇区 (每个扇区512 Bytes) 开始读取8 k B的程序。而对于SDHC卡是从SDHC卡所有扇区的最后1 042个扇区开始读取8 k B的程序。这是由S3C6410芯片中i ROM的代码决定的。因此我们要将程序根据使用卡的种类放到指定的位置上。以下都以SD/MMC为例进行研究, 代码分布结构如表1所示。其中MBR为SD卡分区后的主引导纪录, Kernel是Linux操作系统的内核, User File System是用户的文件系统, BL2是系统第二阶段引导的代码, ENV是Linux系统内核引导时需要的环境变量, BL1是系统第一阶段引导的代码, 最后的1 k B字节为保留使用。

往往研究Linux的时候都会借用很多源代码来进行, 因此我选用u-boot来进行说明。先来分析u-boot生成二进制代码的空间结构, 然后再分析具体内容。

一般而言u-boot生成二进制代码是大于8 k B小于256 k B的u-boot.bin文件。由于BL1只有8 k B, 所以需要把u-boot.bin转换为8 k B的BL1和BL2代码。具体实现可以把u-boot.bin的前8 k B的代码放到SD卡的BL1位置上, 然后把整个u-boot.bin文件写入到SD卡的BL2位置上。到目前为止我们只知道BL1的位置, 其他的位置并不知道, 这是因为其他段的写入位置和u-boot有很大关系。

3.2 BL2的引导

下面分析一下u-boot程序是如何从SD卡中把BL2和ENV引导出来的。

系统在BL1中首先执行的是cpu目录下对应平台的目录中有一个启动文件start.S, 当执行到blmovi_bl2_copy时, 这时PC指针要跳转到当前目录下的movi.c文件中执行movi-bl2-copy程序。movi-bl 2-copy中执行CopyMovitoMem (HSMMC_CHANNEL, MOVI_BL2_POS, MOVI_BL2_BLKCNT, (uint*) BL2_BASE, MOVI_INIT_REQUIRED) 指令。而Copy Movito Mem是i ROM启动后提供给用户的一个函数, 函数的指针在0×0C004008地址中, 包含5个参数。还提供了一个SD/MMC卡总扇区的参数, 存放在0×0C003FFC地址中。参数MOVI_BL2_POS是要从SD/MMC中拷贝的第几个扇区开始, 参数MOVI_BL2_BLKCNT为拷贝扇区的数目, BL2_BASE为拷贝到什么位置上。

从movi.h中可以看出, MOVI_BL2_POS是SD/MMC中的总扇区数减去562个扇区, 如果是SDHC卡则为SDHC的总扇区数减去1 586个扇区。MOVI_BL2_BLKCNT是512个扇区也就是前面说到的256 kB。BL2_BASE是0×C7E00000, 为内存中代码存储的地址, 这个地址是通过MMU把0×57E00000影射到0×C7E00000中的。这样u-boot中就实现了BL2段代码的拷贝。并且也知道了应该把BL2放到SD卡的什么位置上。

同样的道理, 我们可以得到ENV段中的环境变量放在哪里, 只不过这次没有用到i ROM中提供的拷贝函数接口, 而是直接使用BL2中对SD卡读写的函数。这里直接给出ENV放到SD卡中的BL2和BL1中间的32个扇区的位置上。

代码拷贝完后, PC指针是如何跳到BL2中运行的呢?在启动文件start.S中有一条指令为ldrpc, _start_armboot, 而start_armboot是在BL2中的程序, 这样就实现了BL1到BL2的转换过程。但是, PC指针实际是跳到了start_armboot在编译时的地址, 因此在拷贝BL2时是把整个的u-boot.bin搬运到原来设计的地址。这样就保证以后所有的程序都在原本设计的位置开始运行。

3.3 Ke rne l的引导

通过上述可以了解到系统从BL0引导BL1, 从BL1引导BL2, 在BL2中获取了ENV中的环境变量。但是对于Linux内核如何引导到内存还一直不清楚。

其实Kernel是通过ENV中设置的环境变量引导的。在BL2中, u-boot会从SD卡读取ENV中的环境变量并且利用crc32来校验环境变量是否正确。如果校验正确则使用ENV中的环境变量。如果错误则使用u-boot中默认的环境变量。

我们以系统默认的环境变量为例来说明, 其中系统默认的环境变量为common目录下的env_common.c中的default_environment。d efault_environment中有这条语句“bootcmd=”CONFIG_BOOT-COMMAND。在include目录下smdk6410.h中又定义了#define CON-FIG_BOOTCOMMAND“movi read 32 0×00800000 0×c0008000;bootm 0×c0008000”。当系统执行到引导内核时, 实际上是执行上面命令中的两个命令:

第一个命令执行的是common目录下的cmd_movi.c中的do_movi函数, read参数是表示读操作的意思, 32参数表示从第32个扇区开始操作, 0×00800000个参数表示操作的大小为0×00800000个字节, 0×c0008000表示操作的目的地址从0×c0008000开始。其功能执行的是从SD/MMC的第32个扇区读取大小为0×00800000多的字节到内存中的0×c0008000开始的地址位置上。

第二个命令执行的是common目录下的cmd_bootm.c中的do_bootm函数, 0×c0008000参数表示执行的虚拟地址。其功能是从0×c0008000这个虚拟地址对应的物理地址0×50008000中开始执行程序。

从上面的介绍现在已经了解到Kernel的代码默认应该放到SD卡的第32个扇区开始的位置上, 大小应该在8 M字节以内。并且也知道了内核的执行默认是从物理地址为0×50008000中开始执行的。因此PC指针最后跳到了这个地址上执行, 并且从这以后u-boot的执行权利就交给了Linux的内核。

4 结语

通过SD卡在Samsung公司的S3C6410上引导Linux内核, 已经成功地把Linux的内核启动起来了。对于BL2和ENV在SD卡的存放位置和大小的改变可以通过修改u-boot代码来完成。对于如何把程序写入到SD卡中相应的位置, 我推荐使用Win Hex软件。Win Hex软件的下载和使用非常方便。

下一个阶段的工作就是如何制作文件系统和在整个系统上做属于自己的应用程序, 这是我今后主要研究的方向。

参考文献

[1]USER'S MANUAL S3C6410X RISC Microprocessor Aug22, 2008REV1.10

SD卡 篇8

SD卡[1](secure digital memory card,安全数码卡)是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。大小犹如一张邮票的SD记忆卡,重量只有2 g,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。

本文正是通过AVR单片机经过软硬结合的设计方案,来读取SD卡上FAT32文件系统中的数据,FAT32是微软公司开发的新一代的文件系统,支持更大的存储容量和长达255个字符的文件名,也可以通过串口转USB接口芯片通过计算机来访问存储器中的数据,从而实现多渠道的立体的访问方式,进一步提升了资源的利用率。

1 文件系统

1.1 FAT文件系统简介

文件配置表(FAT)[2]是一种由微软公司发明的并带有部分专利的文件系统,供MS-DOS使用,也是非NT内核的微软窗口使用的文件系统。FAT文件系统考虑当时计算机效能有限,所以未被复杂化,因而被几乎所有个人计算机的操作系统支持。这些特性使它成为理想的软盘和记忆卡的文件系统。但FAT有一个严重的缺点:当文件被删除并且在同一位置被写入新数据,他们的片段通常是分散的,减慢了读写速度。磁盘碎片重整是一种解决方法,但必须经常重组来保持FAT文件系统的效率。

1.2 FAT文件系统升级版

FAT32实际上是文件分区表采取的一种形式,它是相对于FAT16而言的。它可以大大地节约磁盘空间。文件在磁盘上是以簇的方式存放的,簇里存放了一个文件就不能再存放另外的文件。

FAT32最大的优点是可以支持的磁盘大小达到2 TB(2 048 GB),但是不能支持小于512 MB的分区。由于采用了更小的簇,FAT32文件系统可以更有效率地保存信息。FAT32可以更高效地使用空间。FAT32使用较小的簇(即,对于大小在8 GB以内的驱动器,使用4 KB的簇),这与大的FAT或FAT16驱动器相比,可将磁盘空间的使用率提高10%~15%。

FAT32 更稳定可靠。FAT32 可以重新定位根文件夹,而且它使用文件分配表的备份副本,而不是使用默认副本。此外,FAT32驱动器上的引导记录也得到扩展,包括了关键数据结构的备份副本。因此,与现有的 FAT16 驱动器相比,FAT32 驱动器不容易受单点故障的影响。

FAT32更灵活。FAT32驱动器上的根文件夹是普通的簇链,因此它可以位于驱动器上的任何位置。以前对根文件夹数量的限制不复存在。此外,可以禁用文件分配表镜像,这样就可以让文件分配表的副本而不是让第一个文件分配表处于活动状态。这些功能允许您动态重调 FAT32 分区的大小。

2 硬件设计

2.1 芯片概述

ATmega32[3]是基于增强的AVR RISC结构的低功耗8 位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega32 的数据吞吐率高达1 MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。 ATmega32 AVR 内核具有丰富的指令集和32 个通用工作寄存器。所有的寄存器都直接与算逻单元(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问2个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC 微控制器最高至10倍的数据吞吐率。

PL2303用于实现USB 和标准RS 232串行端口[4]之间的转换,2个独立的大型缓冲用于两种总线的连接,大型数据缓冲器用于USB 的批量数据传输,自动握手模式可用于串行通讯,因而可以达到远大于标准UART 控制器的波特率。PL2303 支持USB 电源管理和远程唤醒协议。本设计中PL2303芯片主要应用在将主控单元的下载线与供电模块合二为一,大大简化了系统的设计复杂度。

NOKIA 5110液晶显示器,传统的点阵式液晶显示器,不内置英文及汉字字库,因此NOKIA 5110液晶显示的过程,需要单片机把从存储器中读取到的ASCII码值转换成对应的英文及汉字点阵信息,然后通过串口把点阵信息传输到液晶显示器上进行显示。

2.2 硬件设计

硬件单元包括: AVR[5]主控ATmega32单元模块,SD卡接口模块,液晶显示接口模块,串口转USB接口。

2.2.1 主控电路设计

主控电路(如图1所示)主要负责将从输入接口中读到的数据转换成对应的字模码。

2.2.2 存储系统模块及下载接口设计

SD卡接口如图2所示。

2.2.3 液晶显示模块设计

液晶显示接口如图3所示。

2.2.4 USB转换接口模块设计

计算机端串行转USB接口[5]的设计如图4所示。

3 软件设计

系统软件设计主要包括AVR单片机主控程序,中断服务控制子程序, LCD[6]控制子程序,编码转化子程序等几个模块。单片机端程序运行流程如图5所示,计算机端运行程序流程如图6所示。

4 总结及展望

由于本设计中采用的都是一些通用器件,是对通用器件的一次尝试性扩展应用,通过LCD设计的人机接口实现设备的友好操作,能够通过单片机和计算机进行双向立体式的读写,能够实现在线的实时的FAT32[7]文件系统资源管理,因此本系统具有一定社会价值和应用价值。

参考文献

[1]SD Memory Card Specifications.

[2]陈春,徐建华,陈柏润.计算机GBK汉字输入法速查字典[M].北京:科学出版社,2008.

[3]刘海成.AVR单片机原理及测控工程应用[M].北京:北京航空航天大学出版社,2008.

[4][美]安格斯生,精英科技.串行端口大全[M].Jan Axelson,译.北京:中国电力出版社,2001.

[5]张军,宋涛.AVR单片机C语言程序设计实例精粹[M].北京:电子工业出版社,2009.

[6]孙俊喜.LCD驱动电路、驱动程序设计及典型应用[M].北京:人民邮电出版社,2009.

[7]关硕,关济实.FAT16文件系统在单片机存储系统上的实现[J].科技信息,2008(3):24-26.

[8]薛园园,赵建领.USB应用开发实例详解华清远见嵌入式培训中心[M].北京:人民邮电出版社,2009.

[9]廖继海,梁志明,罗广君,等.基于AVR单片机的LED显示屏的灰度设计与实现[J].现代电子技术,2007,30(3):189-191.

SD卡 篇9

当前,人们对大数据量的高速存取需求越来越高。SD卡作为新一代数据存储设备,具有大容量,高速度的特点,很好地满足了市场的具体需求,被广泛用于便携式消费类电子设备,例如手机,数码相机、PDA和各种多媒体播放器等。在工业控制领域,同样有大量数据需要采集,存储,分析。而传统用MCU的GPIO模拟SD卡的时序实现读/写调试复杂、读/写速度慢,已经不能符合大多数应用的需求。利用FPGA自身高速并行的特点,开发一种SD卡读写控制器的IP核,不但可以提高性能,而且可以简单实现IP复用,大大提高开发效率,降低成本,具有极大的应用前景。

可编程的片上系统(System on Programmable Chip,SoPC)最先由Altera公司提出,它将尽可能大而完整的电子系统,主要包括NiosⅡ嵌入式处理器、各种硬件接口、数字信号处理系统、普通数字电路逻辑在单一FPGA芯片中实现。SoPC系统中的各个外设通过Avalon总线相连,可简单实现IP复用,因此,系统在开发周期、体积、功耗、功能、产品升级维护等多方面实现最优化,逐渐成为电子产品设计的趋势。

1 Avalon总线简介

Avalon总线是Altera公司专门为SoPC系统指定的一套总线标准,它定义了主从端口对之间通信的信号类型和时序关系。在结构上不同于传统的共享式总线:它在需要连接的每一个主从端口对之间都有点到点的连接,不同的主从端口对之间可以同时进行通信,所以大大提高了系统的性能。Altera一直在致力于为Avalon总线添加一些极其有用高级特性,简化系统设计的同时提高系统的性能。Avalon总线标准也在不断的升级完善,现在已经包含Avalon-MM接口规范和Avalon-ST接口规范。

在Avalon总线接口的设计中,SoPC Builder提供了直观的图形用户界面,设计人员可以很方便地添加自定义外设,SoPC Builder将自定义外设和其他组件组合起来,生成对这些组件进行例化的单个系统模块,并且自动生成内部总线逻辑,按照设计人员的要求将这些外设与NiosⅡ处理器连接起来,并自动完成外设和存储器的地址映射、中断控制和总线控制等工作。本文主要阐述了SD卡读/写控制器的Avalon-MM总线接口和SD卡读/写控制逻辑的设计,以及NiosⅡIDE中读/写控制程序的编写。

2 SD卡的一般读/写过程

SD卡有两种读/写访问模式:SD模式和SPI模式,其中SD模式又分为1 b和4 b两种。由于DE2开发平台硬件上的原因,该设计采用的是1 b的SD模式实现SD卡的读/写。SD卡在上电初期,卡主控通过检测引脚1(DAT3)的电平来决定使用SD模式还是SPI模式。

SD总线上命令和数据的传输从一个起始位开始,以停止位终止。每个时钟周期传输一个命令或数据位。控制器通过CMD信号线发送命令到SD卡,用于对SD卡进行相应的操作,SD卡接收到命令后,会发送相对应的响应给控制器,这些响应中包含了SD卡的一些基本信息和状态信息等。SD卡初始化完成后,进入数据传输阶段,则可以进行读/写操作。为了避免命令,数据和响应传输的错误,SD规范中采用了CRC技术,在传输命令和响应时,需要进行CRC7效验,而在传输数据时,则需要进行CRC16效验。该控制器主要采用SD的CLK,CMD,DAT0三根信号线完成SD卡的读/写。

3 SD卡读写控制器总体工作过程

该控制器采用Verilog HDL语言编写,在SD卡就绪后,NiosⅡ处理器先向Avalon-MM Slave端口设置相关寄存器。状态控制逻辑根据寄存器中的相关位发送命令到读/写控制逻辑,再由读/写控制逻辑发送相应的命令到SD卡。命令在时钟信号CLK的上升沿经过CRC7校验后通过CMD信号线串行写入SD卡。SD规范中定义了很多命令,但这里仅用到了常用的10个命令就实现了读/写控制的功能,命令都要按一定格式顺序发送到SD卡,命令编号占6 b,每个命令必须填充开始标志,命令的参数以及CRC7校验数据以及结束标志,发送1个完整的命令需要写入48 b。

SD卡在接收到命令后,会根据写入的命令执行相应的操作,并发送相应的Response给控制器,其中Response也分为几种,包含长响应和短响应,Response中的数据包含了卡的一些基本信息以及命令的执行情况等。控制器根据返回的状态的信息决定下一步操作,即发送下一个命令。控制器内部总体结构如图1所示。

控制器上电后自动进行初始化,将SD卡的状态保存到状态寄存器中,在进行读/写前,应先读取SD卡的状态信息,在SD卡进入了读/写就绪状态后,即可向Avalon-MM Slave端口写入读/写控制命令,具体包括要读/写的扇区号,读出数据或写入数据的存放地址。控制器在收到开始读/写命令后,开始读/写指定的扇区,控制器一次性读/写512 B,产生一个读/写完成的中断,即可以开始读/写下一个扇区。进行读操作时,控制器将从SD卡读出的数据通过Avalon-MM Master端口写入所指定的地址处。进行写操作时,控制器通过Avalon-MM Master端口将指定内存地址处的数据写入SD卡。控制器整个读/写过程无需CPU干预,由Master端口主动完成,CPU仅需写入相关控制命令,大大提高了CPU的利用率。

4 Avalon-MM接口设计

为了实现数据在Avalon总线上的传输,必须实现Avalon总线相关信号和时序逻辑,主要包括数据、地址、读/写控制、中断、时钟复位等信号。

Avalon-MM Master端口主要用来将读/写控制逻辑部分读到的数据写入内存,或者将内存中的数据写入读/写控制逻辑,其接口信号如表1所示。

Avalon-MM Slave端口主要用来接收相关控制命令,即通过这个端口实现控制器内部寄存器的访问,其接口信号如表2所示。

该控制器内部有6个寄存器,也可以根据需要实现更多,通过软件设置相关寄存器即可进行读/写SD卡的操作,寄存器功能描述如表3所示。

5 系统硬件设计

为了验证SD卡读写控制器,在DE2开发平台上搭建了最基本的硬件系统,主要包括:NiosⅡ处理器,PLL锁相环,片上RAM,JTAG UART和自定义的SD卡读写控制器。NiosⅡ作为系统主控制器,PLL用来产生SD卡读/写所需的时钟信号,片上RAM用来存储代码和数据,JTAG UART主要用来调试,打印数据到控制台验证写入的数据和读出的数据是否相同。

硬件系统的建立主要利用Altera公司QuartusⅡ开发工具以及其集成的SoPC Builder完成的,关键在于如何用SoPC Builder将SD卡读写控制器添加到元件列表中。在SoPC Builder提供的图形化的界面下,添加控制器Verilog源程序后,设置控制器中各信号在Avalon-MM总线中的信号类型等,图2即为添加好的SD卡读写控制器。

图2中,各引脚的描述如下:

base clock:控制器输入时钟,该设计采用PLL产生的25 MHz时钟信号;

clk to SD:SD卡时钟信号输入;

cmd SD:SD卡命令,响应输入/输出信号;

data SD:SD卡数据信号。

根据SD控制器的寄存器映射,在Nios IDE中编写C程序控制SD卡控制器进行读/写操作,下面代码为写SD卡的一段程序,读SD卡的的过程与其类似。

读/写完一个扇区后,控制器会产生一个中断,此时即可进行下一次读/写操作。由于SD卡读/写有比较复杂的时序要求,命令、响应众多,在设计的初期,采用Modelsim做了各方面的功能仿真,功能仿真完成后采用QuartusⅡ自带的SignalTapⅡ逻辑分析仪来测试分析内部逻辑的工作状态,SignalTapⅡ使用简单方便,更重要的是可以实时观测内部信号变化,而且可以设置触发条件,大大提高了开发的效率。图3是用SignalTapⅡ逻辑分析仪捕捉到的波形。

图3中,status reg为状态寄存器,00000900表明卡已处于就绪状态,control reg为控制寄存器,00000001H表明已经开始了一次对扇区0的写传输,mread的上升沿即开始了Master端口的读传输,这里的读指的是将内存中buf数组中的数据读入控制器,再由控制器写入SD卡中,waitrequest为等待信号,高电平时无法进行数据传输,waitrequest无效后可以很明显地看到000000DFH由Master端口读入控制器,再由读写控制逻辑写入SD卡。

6 结语

该设计采用SoPC技术实现了SD卡读写控制器,通过NiosⅡ处理器控制实现了SD卡读/写。由于该控制器根据Avalon接口规范进行开发,可以很方便以IP核的形式集成到其他SoPC系统中,简单实现SD卡的读/写,大大降低了开发成本和难度。本文所设计的SD卡读写控制器还有一大优点就是具有Master端口,可以自主完成数据的读/写,无需CPU的干预,另外采用了中断,降低了响应延时,提高了读/写速率。该设计满足了大部分数据存储需求,适用于工业监测控制,一般消费类电子产品等。

摘要:介绍Altera公司提出的SoPC技术,根据SoPC系统Avalon总线规范,设计一种同时包含Master和Slave端口的SD卡读写控制器,无需CPU的干预,并且支持中断,大大提高了SD卡的读/写速度。该设计的核心部分为SD卡读/写时序控制以及Avalon-MM总线与NiosⅡ的接口部分。该控制器在友晶科技DE2开发平台上验证通过,实现了大数据量的快速存取,满足了一般消费类电子需求,具有较大的应用前景。

关键词:SoPC,Avalon总线,NiosⅡ,IP核,SD卡

参考文献

[1]李兰英.NiosⅡ嵌入式软核SoPC设计原理及应用[M].北京:北京航空航天大学出版社,2006.

[2]蔡伟刚.NiosⅡ软件架构解析[M].西安:西安电子科技大学出版社,2007.

[3]夏宇闻,黄然.Verilog SoPC高级实验教程[M].北京:北京航空航天大学出版社,2009.

[4]张志刚.FPGA与SoPC设计教程:DE2实践[M].西安:西安电子科技大学出版社,2007.

[5]周立功.SoPC嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2006.

[6]王诚.Altera FPGA/CPLD设计(基础篇)[M].北京:人民邮电出版社,2005.

[7]任爱峰.基于FPGA的嵌入式系统设计[M].西安:西安电子科技大学出版社,2005.

[8]王金明.数字系统设计与Verilog HDL[M].北京:电子工业出版社,2005.

[9]Altera Corporation.DE2 development and education boarduser manual[M].Silicon Valley,California:Altera Corpo-ration,2005.

SD卡 篇10

随着时下人们越来越追求有品位的生活,家庭娱乐硬件的更新换代那也是与时俱进。不仅是大屏幕电视(等离子和液晶)的销量与日俱增,可带来更大画面的投影机产品也已不再是玩家的专利,更多的寻常百姓家也正越来越多的拥有着自己的“电影院”。

五一假期陪着一位刚搞完客厅装修的朋友,特地到投影机市场感受了一把这样的热情。走进店铺林立的投影机专区,无论是商务机还是家庭用机,均可谓是琳琅满目、品种繁多。由于这位仁兄一直对松下品牌情有独钟(家中AV及数码产品几乎全部是松下),所以更是着重在松下层厅亲身体验了一番。

就在我的朋友对松下热门家用机型AE900试看得如醉如痴的时候,我却对旁边松下新上市的一款外观相当精致小巧的商务用机产生了浓厚兴趣。销售人员也是马上不失时机的上前来向我介绍了这款型号为PT-P1SDC的液晶投影机新品。通过销售员的讲解介绍和演示,PT-PISDC的平实灵秀和多用途不禁也深深打动了我,所以在此向各位投影机爱好者作些介绍,希望这款产品也能给大家平日的工作学习以及生活娱乐带来帮助和快乐。

小巧外观

首先说说最先入眼的机器外观。P1SDC小巧可人的机身在众多商务用机型中可谓夺人眼球。因为它仅有70%的A4纸大小,号称是世界同类产品中最小的。重量也仅为1.3公斤,号称世界最轻。

简洁的按键布局、干练的接口配置,是第二眼看过去的舒服感觉。带背光灯显示的电源开关按钮和输入切换键位于底边中央,SD卡操作控制导航键位于旁侧,干干净净。按键的大小比例和位置排放确实感觉非常的舒服,且易于操作使用。

机器背板的接口实属商务用机的标准配置。包括有一组15针电脑输入端口,可接受RGB及色差信号,甚至还可兼容高清HDTV信号。再有就是一组视频/音频输入接口,以及一组S端子视频接口。可谓简洁利索。

机器侧面配置的SD卡插槽,可以说是松下这款PT-P1SDC投影机的一大亮点,也是其最大卖点了。因为虽说松下家用投影机早在三年前的产品上就附带有SD卡插槽,具有照片的播放功能,但是在其商务型机器的应用上,P1SDC可要算是第一款了。而且据介绍这一特色在其同类商务投影机产品中也是不多见的。销售人员用SD卡不仅演示了用数码相机拍摄的照片,还以幻灯片模式演示了包括擦除、淡出、扩展、百叶窗、随机等多种过渡效果的照片播放,播放过程中照片还可实现自动旋转。若是使用松下的Image Creator软件将PowerPoint文件转换成JPEG文件,更是可以无需笔记本电脑就能通过S D 卡在投影机上实现PowerPoint的自动演示。因此P1SDC这款产品在上市后能够倍受业界关注和用户青睐也就不足为怪了。

机器顶端的镜头上方还配有手动变焦和聚焦旋钮,非常适宜即时的画面大小和清晰度调整。机器边缘的几个LED输入信号指示灯,更是会自动搜索当前所连接使用的输入端口并对应点亮,从而让用户对正连接使用着的状态一目了然。

此外,P1SDC所采用的防尘镜头设计,可有效避免灰尘的侵袭,适应在多种场合的使用。耐磨的机壳涂装工艺,更是适应了机器灵活移动使用的特点,甚至可以随意把机器装进普通的公文包或手拎袋而不必担心机身的磨损,更加凸显了产品小巧便于携带的特色。

出色性能

研究完机器外观,让我们再来看看这款产品的“内功”如何。首先当然要看看图像效果啦。就是在商场正常照明的灯光下P1SDC的1500流明亮度所投射出的图像效果也是非常令人满意的,它的画面亮度丝毫不逊于同档次的其它小型机。据销售员介绍,这是因为P1SDC采用了松下特有的DLV(Daylight ViewTechnology)投影技术。这种技术能够大大提高投影机在明亮房间里对色彩的感应度,它可以把因为明亮环境而减弱的颜色分为6色(即红、绿、蓝、黄、青、紫红)分别加以精确的控制,最终能够实现150%的投影效果。通过投影机上的自动感应窗口,就可以根据房间的光线来调整投影图像方式,从而给人眼最直接的感受就是亮度的提高。可以说DLV投影技术的应用将画面质量提高到了一个崭新的层面,使得投影画面的效果和电脑显示屏的画面质量几乎相差无几。这项技术之前可只是应用在松下的高端投影机上。

其次,作为商务用机,机器的启动速度也是非常重要的。因为它能够有效缩短会议前期的准备时间。这在现如今讲究快捷高效的商务社会可是尤显关键。松下这款PT-P1SDC投影机就拥有2秒快速启动的特色。相比于其它产品一般需要1-2分钟甚至更长的开机时间,P1SDC可以在短短的两秒种之内,迅速显示出画面的整体轮廓。在我们调整好画面位置的同时,它也已经随着画面的全部亮起,自动将图像的清晰度和梯形校正调整到了最佳状态。不用一分钟,就可以马上开始我们所要进行的会议、培训、提案、教学以及产品介绍等等各种商务应用。

还想说明一点的是,在投影演示过程中,我们即便是任意调节投影机的仰角以及移动投射的距离,P1SDC都会实时调整自动梯形校正并自动聚焦,从而随时都能够得到最佳的投影效果,简直就是一个智能的小精灵。

PT-P1SDC的散热效果也还不错。采用静音设计,风扇工作噪音也比较低。具有带断电保护的直接关机功能,SD卡钥匙和密码控制锁显示这款产品的安全特性也比较出色。卡式遥控器更是像张扑克牌,携带和操作非常便利。

PT-P1SDC配备的超广角镜头,在0.6米~0.8米的超短距离内就可投射出清晰画面,这在同档产品中也是优势明显,非常适宜狭小空间的会议和娱乐使用。现场也确实只是摆在仅距屏幕2米的位置就投射出了100英寸的大画面。若是在家中使用,想必也是非常的方便。

这边精彩的演示,也着实吸引了旁边朋友的目光。于是我们又接上DVD,当作家庭用机也欣赏了一番,播放电影的效果也是相当的震撼。演示碟中的一段足球画面更是激发了我这位身为球迷的朋友的热情。这要是在家里接上电视信号看世界杯,那会是多么的过瘾啊!

短距离带来大画面、高亮度高品质的图像效果、SD卡的灵活演示播放、快速启动和智能的画面实时调整、最小最轻的小巧机型……松下PT-P1SDC简直就是一个功能超强的便携娱乐平台,万元出头的价位也的确令人心动。(微憾:若是对比度再提高些、配上色差端子,那会是多么完美的商务/家用全能机型啊!)

SD卡 篇11

温湿度记录仪能在无人值守的情况下长时间自动记录环境或被测对象的温湿度,把数据保存在非易失性存储介质中供读取、显示及分析,在实验室、农林业、仓储、货运、医药等方面得到了广泛的应用[1]。

由于受到存储空间及数据分析处理能力的限制,用户一般须周期性地将记录仪存储的数据转存到PC机中作备份及进行复杂的分析处理。常用的实现方法有直接通过通讯口将数据上传到PC机或将数据转存到优盘后再拷贝到PC机[2]。前种方法明显不适用于没有或不便接入PC机的应用场合;后种方法由于涉及到USB主机开发,实现复杂、成本高,且读/写优盘耗电量较大。SD卡(SecureDigitalMemoryCard)体积小、重量轻,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性及很好的安全性,所以其在移动设备比如手机,数码相机等应用中得到了迅速普及,已成为主流移动存储设备。

鉴于便携式温湿度记录仪的现状及SD卡的诸多优点本研究设计以卡为存储载体用于转存记录仪历史数据的便携式温湿度记录仪。

1 硬件设计

基于SD卡存储的便携式温湿度记录仪系统结构如图1所示,它主要由电源监控及管理电路、主控制器、传感器、EEPROM、LCD、键盘、SD卡、USB-UART桥接芯片等构成,由于本研究采用电池供电,所有的器件选择都考虑了低功耗要求。

1.1 主控器MSP 430F 1611

MSP430F1611[3]是TI公司推出的一款16位超低功耗单片机,工作电源电压范围为1.8V~3.6V,通常作为在电池供电下可以有很长使用时间的微控制器首选。其具有16位RISC结构,CPU中的16个寄存器和常数发生器使MSP430微控制器能达到最高的代码效率;灵活的时钟源可以使器件达到最低的功耗;具有5种省电模式,在1MHz的时钟条件下运行,耗电电流(在0.1μA~400μA之间)因工作模式不同而不同;数字控制振荡器(DCO)可使器件从低功耗模式迅速唤醒,在少于6μs的时间内激活到活跃的工作方式;支持串行在系统编程和安全熔丝的程序代码保护,内部具有10KB容量的RAM,可以存放大容量中间数据和变量,满足了记录仪数据记录、LCD显示及SD卡文件存储操作时的大RAM需求。

1.2 温湿度传感器

在传统的模拟信号温湿度测量系统中,需要很好地解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差等问题,才能达到较高的测量精度。另外,模拟温湿度信号易受到各种干扰而产生测量误差,影响测量精度[4]。

SHTxx系列单芯片传感器是由瑞士Sensirion生产的一款含有已校准数字信号输出的温湿度复合传感器。传感器包括一个电容式聚合体测湿元件和一个能隙式测温元件,并与一个14位的A/D转换器以及串行接口电路在同一芯片上实现无缝连接。SHTxx采用串行接口,它的分辨率可以根据对现场的采集速率而进行调整,一般情况下默认的测量分辨率分别为14bit(温度)、12bit(湿度),如果在高速采集中就可分别降至12bit和8bit,对温度的量程范围为-40℃~123.8℃,湿度的量程范围为0~100%RH。它操作比较简单,并提供双向串行总线,共有5条用户命令,分别测量温度(03H)、湿度(05H)、写寄存器状态命令(06H)、读寄存器状态命令(07H)和软启动命令(1EH)。用户只需用一组“启动传输”时序,就能实现传感器数据传输的初始化;同时,在测量和通讯结束后,SHTxx会自动转入休眠模式,大大地减少了功耗。本系统选用了SHT75[5]智能温湿度传感器用于湿度测量。

由于SHT75的温度测量精度不高(在-20℃~+70℃范围内精度为±1℃,超出此范围偏差更大),故本研究选择了新型数字温度传感器DS18B 20用以测量温度。DS18B 20[6]具有体积更小、精度更高、适用电压更宽、采用1-wire总线、可组网等优点,在实际应用中取得了良好的测温效果。其测量温度范围为-55℃~+125℃,在-10℃~+85℃范围内精度为±0.5℃。现场温度直接以1-wire总线的数字方式传输,大大提高了系统的抗干扰性,适用于恶劣环境的现场温度测量

SHT75与微处理器的连接,是通过MSP430F1611的两个I/O口来分别与传感器的SCK引脚和DATA引脚相连,以实现数据的交换;VCC与3.3V电压相连。为避免信号冲突,微处理器应驱动DATA在低电平,所以还必须在I/O电路中,DATA引脚上加上一个上拉电阻将信号提拉至高电平,用一个4.7kΨ的电阻接至3.3V电压。DS18B 20采用1线制通信,其与单片机的一个I/O口相连,DQ端通过1个4.7kΨ的电阻上拉到电源。这两个传感器接口电路如图2所示。

1.3 SD卡接口设计

SD卡的接口支持SD模式和SPI模式[7],主机系统可以选择其中任一模式。SD卡模式允许4线的高速数据传输;SPI模式允许简单通用的SPI通道接口,这种模式相对于SD模式的不足之处是降低了速度,但是SPI接口是当前比较常用的一种接口方式,连线少、操作方便且MSP430F1611不提供SD模式接口但具有SPI模块,所以选择了SPI模式,其接线如图3所示。

1.4 通信接口设计

为便于与PC机进行通信且避免使用体积较大的DB 9接口,本装置采用了USB-UART桥接芯片CP2102。其实现了USB信号与UART之间的转换,这样系统只需一个体积很小的miniUSB接口即可通过USB数据线与PC机进行通信。为降低功耗,CP2102由PC机USB口独立供电,在没有连接PC机时CP2102不消耗电池能量;在PC上安装了驱动后,可直接将其识别为普通的串口,避免了繁杂的USB编程却拥有了USB通信的高速及便捷,其电路如图4所示。

1.5 其他电路

EEPROM采用了MicroChip公司单片存储容量最大的24LC 256,其容量为32KB,具有极小的工作电流。LCD采用了YJ-G 12864P,其为不带字库的128×64点阵液晶,模块尺寸为39mm×29mm,具有尺寸小巧、显示灵活、耗电低等特点。

以上器件都具有极低的功耗特性,适合于便携式记录仪。为最大限度地降低电量消耗,本研究设计了电源管理电路,负责在无须传感器、存储器、LCD等工作时,通过控制关断MOS管彻底地切断它们的供电,此时只有MCU处于供电状态,实现真正的零损耗。

2 软件设计

由于系统由电池供电,为了将系统的功耗降到最低,整个系统软件设计围绕着实现目标和低功耗进行,主要可分为数据记录存储、人机交互程序设计、SD卡文件存储、串行通信程序4部分。软件采用了中断驱动方式,这样系统只有在有中断需要处理时才切换到活跃状态,其他时间都处于休眠状态,最大限度地减少了电池消耗。

系统上电后,读取EEPROM里的记录仪配置信息,然后根据配置信息对记录仪进行初始化,主要包括初始化I/O端口、定时器、LCD、传感器等外围,其流程如图5(a)所示。

数据记录存储程序主要包括的内容有对SHT75、DS18B 20、24LC 256进行读/写操作。实现按照设定的记录间隔、记录方式、记录起讫时间等参数对温湿度进行记录存储,由一个中断间隔为1s的定时器驱动。系统被定时器中断唤醒后,检查各通道的采样时刻是否到来,如果到来则根据EEPROM里的配置信息进行采样及数据处理,如果没有到来则重新进入睡眠状态,其程序流程如图5(b)所示。

人机交互程序设计实现人机交互功能,主要包括按键检测及LCD显示。按键检测结合I/O中断实现,LCD显示包括LCD驱动及应用程序设计。LCD驱动主要包括提取字库信息进行汉字、英文、符号、曲线等的显示;应用程序则主要包括菜单的构架及显示。该部分程序可以实现实时显示温湿度值,指导用户进行记录参数设定、历史数据查询、历史数据转存等操作,由按键中断驱动,其程序流程如图4(c)所示。

SD卡文件存储程序提供了软件接口,当记录仪需要读/写SD卡时,调用接口函数即可。与SD卡的通信通过SPI接口实现,其主要涉及到SD卡寄存器及扇区的读/写、FAT文件系统操作等内容,FAT文件系统操作又包括创建目录、删除目录、写文件、删文件等操作。这些接口在进行人机交互程序中的“历史数据转存”操作时被调用。

串行通信程序用于实现与PC机的通信,PC机与记录仪连接上后可以进行记录参数读/写、历史数据管理等操作。该部分程序基于串口接收中断驱动,其程序流程如图4(d)所示。

用户程序集成了初始化、采集、显示、记录等子程序。初始化单片机与其外围模块、采集程序负责将数字温湿度传感器的脉冲输入转化为温湿度的值、显示程序则将采集到的数据通过液晶显示出来,显示频率可以设置、记录程序将采集的数据写到E 2PROM保存,掉电不丢失,从而要通过I/O口模拟I2C协议实现读/写EEPROM。

3 功耗分析

由于系统整体耗电极低,实际功耗难以测试,下面按系统中各部件生产厂商提供的数据手册中的参数进行功耗估算,结果如表1所示,其中各数据都是在3.3V测试条件下的参数典型值。

其中,SD卡及LCD只有在人为操作时才处于活动模式,其他时间都处于待机模式,所以计算待机时间时仅使用其待机电流。设定记录仪每15min记录一次数据,每次记录数据耗时1s(实际上远小于1s,且不可能所有器件1s内同时处于活跃或操作状态),则可得1小时耗电为:

以普通锂电池1 500mA·h容量计,则可以供系统正常工作:

在以上估计中,“其他”电流值根据经验已经做了最大估算,所以该系统在1 500mA·h电池供电情况下正常待机4个月没有问题,实际测试时设定为每秒记录,系统运行了18小时,大于估算的14.67小时,这可能是由于电池电压跌落导致工作电流变小有关,也符合了其他电流值偏大的设想

4 结束语

围绕着低功耗这个原则,本研究采用集成度高、功耗低的MSP430F1611为核心处理器,通过软、硬件的各种优化,设计出了基于SD卡存储的便携式温湿度记录仪,满足了长时间自动记录温湿度的要求。将SD卡应用到数字温湿度记录仪中,能将数据离线保存在SD卡上,消除了对PC机的依赖,该方法具有很好的扩展性。与基于优盘存储的记录仪相比,具有实现简单、成本低、耗电少等优点,可以大量应用在民用和工业领域中。

参考文献

[1]周乐川,洪沁,叶树明.基于MSP430F149的温度记录仪的低功耗设计[J].仪表技术与传感器,2008(2):94-96.

[2]黄豪佑,卢建刚.USB主机在数字温湿度记录仪系统中的应用[J].机电工程,2006,23(9):58-60.

[3]Texas Instruments Inc..MSP430F1611 Datasheet[EB/OL].[2006-03-05].http://www.ti.com.

[4]宋长亮,任建国.自启动温湿记录仪的设计[J].计量与测试技术,2008,35(8):13-14.

[5]Sensirion Inc..SHT7x Humidity and Temperature SensorDatasheet[EB/OL].[2008-01-02].http://www.sens-irion.com.

[6]Dallas Semiconductor Corporation.DS18B20 ProgrammableResolution 1-wire Digital Thermometer Datasheet[EB/OL].[2007-02-06].http://www.maxim-ic.com.

【SD卡】推荐阅读:

上一篇:风险的特点下一篇:经验主义取向

本站热搜

    相关推荐