WinCE 5.0下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设备进行通讯。
Windows 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等。 |
Bus Driver
主要功能如下:
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) 2002 BSQUARE Corporation. All rights reserved. // DO NOT REMOVE --- BEGIN EXTERNALLY DEVELOPED SOURCE CODE ID 40973--- DO NOT REMOVE |
Host Controller Driver
主要功能:
l HCD通知总线驱动卡的插入和拔出
l 给卡上电,SD定义了可接受的初时电压范围。
l 在总线驱动何客户端设置完时钟速度后,打开客户端卡的时钟(80个周期)
l 初始,把总线宽度设置成1。如果有需要的话(4-bit mode),把总线宽度设成4bit
l 传输SD 命令和数据到/来自卡上。
l 负责给槽上电,关电。
l IST 在这里存在
l (可选的)唤醒支持(插入,拔出,SDIO中断)