KinetisKSDHC模块对SD设备操作方法详解Word格式文档下载.docx
- 文档编号:14358212
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:17
- 大小:28.12KB
KinetisKSDHC模块对SD设备操作方法详解Word格式文档下载.docx
《KinetisKSDHC模块对SD设备操作方法详解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《KinetisKSDHC模块对SD设备操作方法详解Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
win7-32位系统,IARSystem6.4,P&
E公司osjtag调试器,龙丘MK60DN512ZVLL10P100.单片机主频200M,SD卡为金士顿512M卡1张,金士顿4G卡(Class-4)1张.
本文所实现的功能为:
使用SDHC模式,基于SD2.0协议对SD卡和SDHC卡进行单扇区进行不连续的读操作和写操作,SD设备波特率为25M,扇区大小为512B,连续写操作最小间隔为1.5ms(最短),2ms(稳定).读写一次的时间约为50~100us.
SD家族介绍
SD设备分为许多类型.SD卡(SecureDigitalMemoryCard)是一种基于半导体闪存工艺的存储卡,1999年,由日本松下、东芝及美国SanDisk公司共同研制完成.2000年,这几家公司发起成立了SD协会(SecureDigitalAssociation简称SDA),阵容强大,吸引了大量厂商参加.其中包括IBM,Microsoft,Motorola,NEC、Samsung等.在这些领导厂商的推动下,SD卡已成为目前消费数码设备中应用最广泛的一种存储卡.
SD卡最初是从MMC(MultimediaCard)卡基础上发展起来的,可以与MMC卡实现兼容;
但SD卡数据传输速率更快,此外,还特别增加了CPRM(ContentprotectionforRecordableMedia)功能,用于卡内数据的授权访问,实现内容保护.
SD卡尺寸为32mmx24mmx2.1mm,相当于邮票大小,这样尺寸的存储卡用在数码相机、DV机中还算合适,但在记录不断被刷新的轻薄手机面前,SD卡显得过分“庞大”.为了满足数码产品不断缩小存储卡体积的要求,SD卡逐渐演变出了MiniSD,MicroSD两种规格.
SD卡背面共有9个引脚,包含4根数据线,支持1bit/4bit两种数据传输宽度,时钟最高频率为25MHZ,故理论最高数据传输速率为12.5MB/S,工作电压为2.7~3.6V.
MiniSD
顾名思义,MiniSD卡相比标准SD卡,外形上更加小巧,仅有标准SD卡40%左右的大小.尽管MiniSD卡的外形大小及接口形状与原来的SD卡有所不同,但接口规范保持不变,确保了兼容性.若将MiniSD插入特定的转接卡中,可当作标准SD卡来使用.
TransFlash(MicroSD)
Transflash卡,也称T-Flash卡,TF或T卡,最早由SanDisk推出.T卡仅有11mmx15mmx1mm大小,仅相当于标准SD卡的1/4,比MiniSD卡还要小巧.
同样,T卡是与标准SD卡功能也是兼容的,将T卡插入特定的转接卡中,可以当作标准SD卡或MiniSD卡来使用.
2005年7月,SDA协会正式发布了MicroSD标准,该标准与TransFlash卡完全兼容,市场上的TransFlash卡和MicroSD卡可以不加区分的使用.这好比TransFlash是卡的小名,等长大了就取了个MicroSD的学名,不过大家还是叫其TransFlash的多!
MiniSD、MicroSD这种小体积SD卡的出现,大大拓展了SD卡的应用范围,这使得SD卡应用在一些小型手机中成为可能.另一方面,MiniSD、MicroSD功能与SD卡功能兼容,只要将其插入特定转接卡中,即可当作标准SD卡来使用,这样,MiniSD、MicroSD便可用于那些使用标准SD卡的数码设备,这加速了MiniSD、MicroSD的市场普及.
前几年,市场上的SD、MiniSD、MicroSD卡遵循的是SDSpecVer1.0或1.1规范,最大可能容量仅为2GB.2006年,SDA协会发布了SDSpecVer2.0规范,符合此新规范的SD卡容量可达4GB或更高.
符合2.0规范的SD卡,称为SDHC(SDhighcapacity)卡.SDHC卡外形维持与SD卡一致,但是文件系统从FAT12、FAT16改为FAT32型;
SDHC卡的最大容量可达32GB.除了SDHC卡外,还有MiniSDHC,MicroSDHC类型的卡.
SDHC卡与标准SD卡不再兼容,必须符合SDSpecVer2.0的设备才能支持SDHC卡,这样的设备都会带有SDHClogo.而支持SDHC卡的设备可以向下兼容标准SD卡.
为了充分发挥SDHC卡的性能,保证兼容性,SDA协会为SDHC卡定义了3个速度等级:
2,4,6;
其含义是各等级分别可以忍受的写速率至少是2MB/S,4MB/S,6MB/S.速度等级定义中使用的是数据写速率,数据读速率要比数据写速率快.现今绝大多数设备上使用的都是SDHC卡和microSDHC卡.小容量的SD卡已经停产并逐渐淘汰(2012年).
SDIO
SDIO(Input/Output)是一种IO接口规范.目前,其最主要用途是为带有SD卡槽的设备进行外设功能扩展.SDIO卡是一种IO外设,而不是Memory.SDIO卡外形与SD卡一致,可直接插入SD卡槽中.
目前市场上有多种SDIO接口的外设,比如SDIO蓝牙,SDIOGPS,SDIO无线网卡,SDIO移动电视卡等.这些卡底部带有和SD卡外形一致的插头,可直接插入SDIO卡槽(即为SD卡槽)的智能手机、PDA中,即可为这些手机、PDA带来丰富的扩展功能.用户可根据实际需要,灵活选择外设扩展的种类、品牌和性能等级.SDIO已为成为数码产品外设功能扩展的标准接口.
SDIO卡插入带有标准SD卡槽的设备后,如果该设备不支持SDIO,SDIO卡不会对SD卡的命令作出响应,处于非激活状态,不影响设备的正常工作;
如果该设备支持SDIO卡,则按照规范的要求激活SDIO卡.
SDIO卡允许设备按IO的方式直接对寄存器进行访问,无须执行FAT文件结构或数据sector等复杂操作.此外,SDIO卡还能向设备发出中断,这是与SDmemory卡的本质区别.
本文针对的是符合SD2.0的microSD进行操作,但测试结果表明一部分SD1.1协议的卡也可以使用【此结果与标准不相符】.
功能描述
K60内有一个SDHC模块,目标引脚为E0--E5.端口具体功能见端口复用表(K60RM10.3.1).
K60的SDHC模块设有二十多个寄存器,我们通过设置这些寄存器设置K60的SDHC的主机,然后通过SDHC主机与SD卡的从机通信,再由SD从机向SD卡写数据.其中设置SDHC模块主要参考K60RM,SDHC模块与SD卡通信过程主要参考SD2.0协议,并且底层通信操作由SDHC模块自动完成,而SD从机向SD卡写数据无需我们关心.
我们通过操作SDHC相关寄存器,可以让SDHC向SD卡发送特定的命令.命令可以带有参数.SD卡从机接收到命令后进行识别和动作,并可能反馈一些响应至SDHC模块寄存器.
基本的操作时序如下:
设置SDHC主机属性
发送命令群以初始化SD卡从机并获取SD卡信息
发送读命令并接收SD卡反馈数据
发送写命令并等待SD卡读取数据
以下为本文所用程序的分析.本文所用程序参照苏州大学嵌入式中心给出的参考代码,并对其做出修正和整理.读者可以同时参考苏大的代码.
本文给出的例程中提出几个接口函数:
intSDHC_On()。
intSDHC_Init(uint32Block_Size)。
intSDHC_Inserted()。
intSDHC_read(uint8cache[],uint32sector)。
intSDHC_write(uint8cache[],uint32sector)。
初始化SDHC主机,此阶段SDHC不与SD卡通信,不进行插卡检测.成功返回0,错误返回1;
初始化SD卡.此阶段未进行任何插卡检测.参数Block_Size表示每次读写扇区大小.但是只能设置为512.成功返回0,错误返回1;
非可支持卡返回-1;
可支持的卡:
SDHC卡,部分SD卡.
插卡检测,检查是否有SD设备连在SDHC上.有卡返回1,错误或无卡返回0;
从SD卡中读取一个扇区的数据,cache[]为数据存放数组,sector为待读取的扇区号.成功返回0,错误返回1;
向SD卡中写入一个扇区的数据,cache[]为数据存放数组,sector为待写入的扇区号.成功返回0,错误返回1;
调用方法:
1调用SDHC_On()。
若初始化成功变量SDHC_Status变为SDHC_ON;
否则为初始值SDHC_OFF;
2进行插卡检测SDHC_Inserted()。
3初始化SD卡SDHC_Init(512)。
若成功SDHC_Status变为SDHC_RW;
4检测SDHC状态,若为SDHC_RW则可进行读写操作.
这是使用SDHC的一个例子.
......
SDHC_On()。
while(!
SDHC_Inserted())。
SDHC_Init(512)。
if(SDHC_Status!
=SDHC_RW){
......
}else{
SDHC_read(Cache,p)。
SDHC_write(Cache,p)。
}
注意:
程序中不可将PORTE0-E5用作其他用途;
SDHC_write操作不能连续调用.中间至少要有1.5ms(最短)/2ms(稳定)的延时.
SDHC_read操作无此限制.
SDHC_On、SDHC_Init、SDHC_read、intSDHC_write均不进行插卡检测,用户需要自行调用SDHC_Inserted进行插卡检测.
插卡检测仅检测SD卡槽(E口)是否有设备连接,不检测设备是否可以识别.
代码分析
本文将几个主要的函数列出如下,本例程只保留最基本的功能,其它功能关于中断服务和DMA的部分全部注释掉了,其他类型卡检测的部分完全去除.附件中有一份精简干净的和一份带注释的备用.下文引用的是例程中精简版的那一份.
intSDHC_On(){//此函数的步骤参照苏大代码.
uint32pres,div。
//SD波特率预分频、分频系数;
uint32i。
uint32error=0。
SIM_SCGC3|=SIM_SCGC3_SDHC_MASK。
//OpenClockforSDHCmodule
GPIO_On(PORTE)。
//OpenPORTE
//-----SetMutiplexingofE0-E5----//
for(i=0。
i<
=5。
i++)PORT_PCR_REG(PORTE_BASE_PTR,i)=(PORT_PCR_MUX(4)|PORT_PCR_PE_MASK|PORT_PCR_PS_MASK|PORT_PCR_DSE_MASK)。
PORT_PCR_REG(PORTE_BASE_PTR,2)=PORT_PCR_MUX(4)|PORT_PCR_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- KinetisKSDHC 模块 SD 设备 操作方法 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)