Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2883953
  • 博文数量: 674
  • 博客积分: 17881
  • 博客等级: 上将
  • 技术积分: 4849
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 10:15
文章分类

全部博文(674)

文章存档

2013年(34)

2012年(146)

2011年(197)

2010年(297)

分类: WINDOWS

2011-03-29 22:02:34

SDSecure Digital Card卡的简称,直译成汉语就是安全数字卡,是由日本松下公司、东芝公司和美国SANDISK公司共同研制的全新的存储卡产品。SD存储卡是一个完全开放的标准(),多用于MP3、数码摄像机、数码、图书、AV器材等等,尤其是被广泛在超薄数码相机上。SD卡在外形上同Multimedia Card卡保持一致,大小尺寸比MMC卡略厚,容量也大很多。并且兼容MMC卡规范。不由让人们怀疑SD卡是MMC升级版。另外,SD卡为9引脚,目的是通过把传输方式由串行变成并行,以提高传输速度。它的读写速度比MMC卡要快一些,同时,安全性也更高。SD卡最大的特点就是通过加密功能,可以保证资料的安全保密。它还具备版权保护,所采用的版权保护技术是DVD中使用的CPRM技术(可刻录介质内容保护)。

 

规格


主要特点:

1.精巧而且超薄

SD记忆卡的尺寸只有24毫米x 32毫米x 2.1毫米。作为“桥梁媒体”的重要特征,它精致小巧,方便您在不同设备上使用。兼容SD记忆卡的设备可以采用解码器来播放音乐、影像短片以及更多其他类型的内容,无需像CD播放机或DVD播放机那样采用装置。从而使设备的外形更加精巧,同时也赋予了产品者发挥自由创意的全新空间。由于消除了播放音乐时的跳音现象,提高了播放的稳定性。

2.大容量栽体

目前,SD记忆卡已经具备各种容量可供,同时,2GB4GB8GBSDHC也出现了。

3.高速数据传输

为了提供快速响应和容易处理数字内容,SD记忆卡可以用每秒10MB的速率写入和读取数据。当其能够用于远程通信终端,直接下载内容时,记忆卡的高速传送能力将可使存取时间和通信成本降至最低,同时可减轻压力。

4.拥有版权保护功能

先进的数码技术使高保真音乐和其他高质量内容的录制成为现实。日新月异的数码技术,借助因特网,实现了全球范围的信息快速共享。这一进步也带来了对原版内容的大量复制,因此,作为21世纪的一种切实可行的记忆载体就必须具备高水平的版权保护技术,这样才能保护大量高质的数码数据。SD记忆卡可以自由复制各种数码数据,并采用独特的内置CPRM技术保存和转移版权所有的内容,这也是建立一个全新的音乐及其他商业媒体的发布体系的关键所在。

 

硬件结构


(参看附录中
SD卡和其他卡的一个对比表)

 

SDIO

SDIO(输入/输出)卡是一种扩展带SD卡插孔设备之功能的接口。正在开发各种SDIO卡,如相机、BluetoothGPS802.11b等。




如果编写以上设备的驱动,当然前提是有一个合格的SD Host Controller。如同编写USB STORAGE/HID设备的驱动一样,需要USB HCD支持。MX31ADS支持基于SDIOLP1070 SDIO WLAN Card(在 5.0SD卡驱动模型里,这种驱动称为client driver)。

 

SD_SDIO_SPEC.PDF

SDIO features

l        Targeted for portable and stationary applications

l        Minimal or no modification to SD Physical bus is required

l        Minimal change to memory driver software

l        Extended physical form factor available for specialized applications

l        Plug and play (PnP) support

l        Multi-function support including multiple I/O and combined I/O and memory

l        Up to 7 I/O functions plus one memory supported on one card.

l        Allows card to interrupt host

l        Initialization Voltage: 2.0 to 3.6V

l        Operational Voltage range: 3.1 to 3.5V

 

 

  

 

SD Stack

      一共可以分为3个部分:a bus driver, host controller driverclient drivers,现分别介绍:

1 Bus Driver

      顾名思义,总线,连接client driverhost controller driver之间的一个层。这部分已经写好了,也就是说定义好了clienthost之间的接口。(是不是可以这么说:编写SD WIFI的员可以不用知道是什么SDHC,从而达到驱动的跨硬件性)

参考代码:

D:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\SDCARD\SDBUSDRIVER\

 

2 Host Controller

      控制硬件并且通过上述的BUS driver来和client进行通讯。

参考代码:

D:\WINCE500\PLATFORM\Mx31\Src\Drivers\Sdhc

D:\WINCE500\PUBLIC\COMMON\OAK\CSP\ARM\FREESCALE\Mxarm11\Drivers\Sdhc

 

3 Client Driver

      通过BUS driverSD设备进行通讯。

 

CE 5.0中的SDIO支持如下:

l        动态插入和拔出

l        DMA方式(相关)

l        SDIO中断

l        动态的时钟控制

l        错误恢复

l        唤醒

l        v1.0多功能和组合设备

l        CE Power Manager来处理电源管理

l        MMC

 

下图可以清晰的表达基于WINCE5.0的一个SD STACK模型:

 

安全性

SDA中的SD Memory specification有种机制可以在特定机器上锁定卡里面的内容。WINCE 5里并没有显示的支持该机制。但是可以自己来做,比如一个系统的FILTER等。

 

主要功能如下:

l        枚举板上的卡,并决定他们的类型(MMC, SD Memory or SDIO

l        配置合适的电流给卡。

l        根据注册表的值加载clients

l        把总线要求入队列

l        把来自host controller的异步通知入队列

l        总线要求完成,SDIO中断,设备插入\拔出

l        出错时重试

 

参考代码:

D:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\SDCARD\SDBUSDRIVER

貌似此部分代码非微软原创:

// Copyright (c) 2002BSQUARE Corporation. All rights reserved.

// DO NOT REMOVE --- BEGIN EXTERNALLY DEVELOPED SOURCE CODE ID 40973--- DO NOT REMOVE

 

主要功能:

l        HCD通知总线驱动卡的插入和拔出

l        给卡上电,SD定义了可接受的初时电压范围。

l        在总线驱动何客户端设置完时钟速度后,打开客户端卡的时钟(80个周期)

l        初始,把总线宽度设置成1。如果有需要的话(4-bit mode),把总线宽度设成4bit

l        传输SD命令和数据到/来自卡上。

l        负责给槽上电,关电。

l        IST在这里存在

l        (可选的)唤醒支持(插入,拔出,SDIO中断)

 

初始化

1.        调用HCD’sXXX_Init

2.        调用SDHCDAllocateContext()来分配一段HC的上下文

a)        Context是总线驱动和HCD共享的

3.        HCD使用SDHCDSetXxx宏来填充这个上下文结构

a)        这个步骤是把HC向总线驱动描述一下

b)       包括函数指针,支持的电流,最大时钟,槽数目,SDIO的支持等等。

4.        调用SDHCDRegisterHostController()来把自己向总线驱动注册一下

5.        当总线驱动准备处理SD事件时,它会调用HCDinit函数(pContext->pInitHandler)(见SDHCDRegisterHostController__X函数)

6.        在初始化里,HCD还应该完成硬件和资源的初始化(IST等)

 

下面代码抄自MX31 BSPSDHC驱动的SDH_Init函数中:

DWORDSDH_Init(DWORD dwContext)

{

// allocate the context

 status =SDHCDAllocateContext(SDH_SLOTS, &pHostContext);

。。。。。。

   //Set a unique name for each host controller

   if (pController->ControllerIndex == 1)

   {

       SDHCDSetHCName(pHostContext, TEXT("MXARM11_1"));

   }

   else

   {

       SDHCDSetHCName(pHostContext, TEXT("MXARM11_2"));

   }

// set init handler

   SDHCDSetControllerInitHandler(pHostContext,SDInitialize); 

   // set deinit handler   

   SDHCDSetControllerDeinitHandler(pHostContext, SDDeinitialize);

   // set the bus request handler

   SDHCDSetBusRequestHandler(pHostContext,SDHBusRequestHandler);  

   // set the cancel I/O handler

   SDHCDSetCancelIOHandler(pHostContext, SDHCancelIoHandler);  

   // set the slot option handler

   SDHCDSetSlotOptionHandler(pHostContext, SDHSlotOptionHandler);

   // now register the host controller

   status =SDHCDRegisterHostController(pHostContext);

 

Slot Option Handler

l        总线驱动调用HCD的SlotOptionHandler

n        SDHCDSetSlotPower设置电压

n        SDHCDSetSlotInterface设置时钟和总线宽度

n        SDHCDEnableSDIOInterrupts

n        SDHCDAckSDIOInterrupt

n        SDHCDDisableSDIOInterrupts

l        SDHCDGetWriteProtectStatus– HCD必须查看SD存储卡是否开启写保护

l        SDHCDQueryBlockCapability返回HCD的最大和最小块长度

 

总线要求

l        总线驱动把总线要求放入队列然后把它们传入HCD的BusRequestHandler函数

l        HCD根据要求来做相应的动作—command/read/write, multi-block,.

l        HCD使用某种方式(DMA, PIO, busy-waiting等)来发送命令和数据

l        HCD调用SDHCDIndicateBusRequestComplete()来通知总线驱动完成

l        总线驱动把完成事件入队列并提交下一个要求给HCD

l        总线驱动的调度线程将会通知产生要求的起始源事件完成了。

 

标准的WINCE SDHC驱动支持

l        Standard Host Controller v1.0

n        TokyoElectron Devices – Ellen

n        Toshiba - Pegasus

n        TI PCI 7x21

n        Ricoh R5C811 and R5C841

l        Non-standard hosts

n        Intel PXA-27x SOC (Mainstone II)

n  &

阅读(1498) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~