分类: WINDOWS
2011-03-29 22:02:34
规格
主要特点:
1.精巧而且超薄
SD记忆卡的尺寸只有24毫米x 32毫米x 2.1毫米。作为“桥梁媒体”的重要特征,它精致小巧,方便您在不同设备上使用。兼容SD记忆卡的设备可以采用解码器来播放音乐、影像短片以及更多其他类型的内容,无需像CD播放机或DVD播放机那样采用装置。从而使设备的外形更加精巧,同时也赋予了产品者发挥自由创意的全新空间。由于消除了播放音乐时的跳音现象,提高了播放的稳定性。
2.大容量栽体
目前,SD记忆卡已经具备各种容量可供,同时,2GB、4GB和8GB的SDHC也出现了。
3.高速数据传输
为了提供快速响应和容易处理数字内容,SD记忆卡可以用每秒10MB的速率写入和读取数据。当其能够用于远程通信终端,直接下载内容时,记忆卡的高速传送能力将可使存取时间和通信成本降至最低,同时可减轻压力。
4.拥有版权保护功能
先进的数码技术使高保真音乐和其他高质量内容的录制成为现实。日新月异的数码技术,借助因特网,实现了全球范围的信息快速共享。这一进步也带来了对原版内容的大量复制,因此,作为21世纪的一种切实可行的记忆载体就必须具备高水平的版权保护技术,这样才能保护大量高质的数码数据。SD记忆卡可以自由复制各种数码数据,并采用独特的内置CPRM技术保存和转移版权所有的内容,这也是建立一个全新的音乐及其他商业媒体的发布体系的关键所在。
硬件结构
(参看附录中SD卡和其他卡的一个对比表)
SDIO卡
SDIO(输入/输出)卡是一种扩展带SD卡插孔设备之功能的接口。正在开发各种SDIO卡,如相机、Bluetooth、GPS和802.11b等。
如果编写以上设备的驱动,当然前提是有一个合格的SD Host Controller。如同编写USB STORAGE/HID设备的驱动一样,需要USB HCD支持。MX31的ADS支持基于SDIO的LP1070 SDIO WLAN Card(在 5.0的SD卡驱动模型里,这种驱动称为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 driver和client drivers,现分别介绍:
1 Bus Driver
顾名思义,总线,连接client driver和host controller driver之间的一个层。这部分已经写好了,也就是说定义好了client和host之间的接口。(是不是可以这么说:编写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 driver和SD设备进行通讯。
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事件时,它会调用HCD的init函数(pContext->pInitHandler)(见SDHCDRegisterHostController__X函数)
6. 在初始化里,HCD还应该完成硬件和资源的初始化(IST等)
下面代码抄自MX31 BSP中SDHC驱动的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 &