12/09/2009

【轉】SD card技術瞭解並WINCE下SDHC驅動開發

哎...最近被主管叫去學porting WINCE 6.0...好像真打算把我當全才一樣...

希望我能在大陸那當窗口兼陸幹的軟體leader(其實是因為大陸人聽嘸我們這邊術語兼思維不同很難溝通...)

恩....這大餅看起來似乎滿可口

但通常有80%的機率都是在唬爛

而且感覺公司有點暴風雨前的寧靜...政治的因素搞的越來越大

只好提早做些準備了...嘿嘿

剛好現在在porting freescale的平台:imx31

只是下面文章是用WINCE 5.0,其實WINCE 7.0快出了...據說IE的performance更好,所以不是很多人想跳到6.0,只是大陸市場用6.0的比台灣還多....

=================================================

瞭解SD card

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卡,如相機、Bluetooth GPS802.11b等。




如果編寫以上設備的驅動,當然前提是有一個合格的SD Host Controller。如同編寫USB STORAGE/HID設備的驅動一樣,需要USB HCD支持。MX31ADS支持基於SDIOLP1070 SDIO WLAN Card(在Wince 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

WinCE 5.0SD Stack

一共可以分為3個部分:a bus driver, host controller driver client 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設備進行通訊。

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模型:


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中斷)

初始化

1. 調用HCD's XXX_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函數中:


DWORD SDH_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 Tokyo Electron 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 Samsung SMDK-2410

n Freescale MX series


關於Standard Host Controller

SDA Host Working Group (MSFT executive member)

Defined Standard Host Register Specification to standardize the hardware interface from bus to controller

Currently ratified to v1.0 by SDA executive committee

MSFT strongly advocating this standard to all IHVs, ODMs, OEMs and Silicons



中斷

l HCD包括IST

l IST 決定哪個槽中斷

l IST evaluates interrupt

比如現在拔出SD

IST 會調用Bus Driver's SDHCIndicateSlotStateChange() with DeviceEjected parameter

l Bus Driver calls client's SlotEventCallBack routine with SDCardEjected. (Provides async notification about changes in the slot state.)

l Client performs its deinitialization


如何讓鏡像支持SD STACK

SYSGEN_SDBUS – SD bus driver (sdbus.dll)

SYSGEN_SDHC_STANDARD – Standard host controller (sdhc.dll)

SYSGEN_SD_MEMORY – SD Memory client (sdmemory.dll)

SYSGEN_BTH or SYSGEN_BTH_SDIO_ONLY – SDIO Bluetooth client (bthsdio.dll)

BSP variables will be added for CSP-specific host controllers

Client Driver

目前,WINCE5.0所支持的client driver如下:

l SD Memory Class

l SDIO Bluetooth Class - Type A

l SDIO WiFi (vendor specific)

如果需要自己寫client驅動的話可以參考D:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\SDCARD\SDCLIENTDRIVERS目錄下的微軟自帶的SD client驅動來寫。

example1: SD MEMORY DRIVER UNDER WINCE 5.0

Wince自帶的SD存儲卡client驅動,代碼路徑為:

D:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\SDCARD\SDCLIENTDRIVERS\SDMEMORY

一個SD存儲卡在WINCE裡的驅動架構如下圖所示:
[圖無法插入]

1註冊表和啟動

在註冊表裡告訴Storage Manager

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory]

"Name"="SD Memory Card"

"Folder"="Storage Card"

;"PartitionDriver"="" ; removable storage cannot have partitions

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MMC]

"Name"="MMC Card"

"Folder"="Storage Card"

;"PartitionDriver"="" ; removable storage cannot have partitions

; SD Memory Storage class driver

[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class]

"Dll"="SDMemory.dll"

"Prefix"="DSK"

"BlockTransferSize"=dword:40 ; send no more than 64 blocks of data per bus transfer

;"SingleBlockWrites"=dword:1 ; alternatively force the driver to use single block access

;"IdleTimeout"=dword:7D0 ; 2000 milliseconds

;"IdlePowerState"=dword:2 ; 0 == D0, 1 == D1, etc.

;"DisablePowerManagement"="" ; if value present, then disable (remove value to enable)

"Profile"="SDMemory"

"IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}",

"{A32942B7-920C-486b-B0E6-92A702A99B35}"

; MMC Storage Class Driver

[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\MMC_Class]

"Dll"="SDMemory.dll"

"Prefix"="DSK"

"BlockTransferSize"=dword:40 ; send no more than 64 blocks of data per bus transfer

;"SingleBlockWrites"=dword:1 ; alternatively force the driver to use single block access

;"IdleTimeout"=dword:7D0 ; milliseconds

;"IdlePowerState"=dword:2 ; 0 == D0, 1 == D1, etc.

;"DisablePowerManagement"="" ; if value present, then disable (remove value to enable)

"Profile"="MMC"

"IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}",

"{A32942B7-920C-486b-B0E6-92A702A99B35}"


2 SD命令和總線要求

將所有磁盤的操作轉換成SD的命令和總線要求

NAME SDMEMORY.DLL

EXPORTS

DSK_Close=SMC_Close

DSK_Deinit=SMC_Deinit

DSK_Init=SMC_Init

DSK_IOControl=SMC_IOControl

DSK_Open=SMC_Open

DSK_PowerDown=SMC_PowerDown

DSK_PowerUp=SMC_PowerUp

DSK_Read=SMC_Read

DSK_Seek=SMC_Seek

DSK_Write=SMC_Write



下面為具體的DISK I/O操作函數和CARD I/O操作函數,詳細實現見sdmemdiskio.cppsdmemcardio.cpp

//

// SDDiskIO

//

// SDMemCardConfig - Initialise the memcard structure and card itself

DWORD SDMemCardConfig( PSD_MEMCARD_INFO pMemCard );

// SDMemRead - Read data from card into pSG scatter gather buffers

DWORD SDMemRead( PSD_MEMCARD_INFO pMemCard, PSG_REQ pSG );

// SDMemWrite - Write data to card from pSG scatter gather buffers

DWORD SDMemWrite( PSD_MEMCARD_INFO pMemCard, PSG_REQ pSG );

// SDMemErase - Erase a contiguous set of blocks

DWORD SDMemErase( PSD_MEMCARD_INFO pMemCard, PDELETE_SECTOR_INFO pDSI );

// SDMemEraseAll - Erase all blocks

DWORD SDMemEraseAll( PSD_MEMCARD_INFO pMemCard );

//

// SDCardIO

//

// SDMemDoBusRequest - Perform a bus request, returns Windows Status

DWORD SDMemDoBusRequest( PSD_MEMCARD_INFO pMemcard,

UCHAR Command,

DWORD Argument,

SD_TRANSFER_CLASS TransferClass,

SD_RESPONSE_TYPE ResponseType,

ULONG NumBlocks,

ULONG BlockSize,

PUCHAR pBuffer,

DWORD Flags);

// SDMemSetBlockLen - Sets read/write block length for SD memory card

DWORD SDMemSetBlockLen( PSD_MEMCARD_INFO pMemcard,

DWORD BlockLen );

// SDMemReadMultiple - Read multiple 512 byte blocks of data from card

DWORD SDMemReadMultiple( PSD_MEMCARD_INFO pHandle,

ULONG StartBlock,

ULONG NumBlocks,

PUCHAR pBuffer );

// SDMemWriteMultiple - Write multiple 512 byte blocks of data to card

DWORD SDMemWriteMultiple( PSD_MEMCARD_INFO pHandle,

LONG StartBlock,

LONG NumBlocks,

PUCHAR pBuffer );

// SDMemWriteUsingSingleBlocks - Write using single block writes

DWORD SDMemWriteUsingSingleBlocks( PSD_MEMCARD_INFO pHandle,

LONG StartBlock,

LONG NumBlocks,

PUCHAR pBuffer );

// SDMemDoErase - Erase a contiguous set of blocks

DWORD SDMemDoErase( PSD_MEMCARD_INFO pHandle,

LONG StartBlock,

LONG NumBlocks );

DWORD SDAPIStatusToErrorCode( SD_API_STATUS Status );

DWORD SDGetCardStatus(PSD_MEMCARD_INFO pMemCard , SD_CARD_STATUS *pCardStatus);

VOID HandleIoctlPowerSet(PSD_MEMCARD_INFO pMemCard,

PCEDEVICE_POWER_STATE pDevicePowerState);

VOID InitializePowerManagement(PSD_MEMCARD_INFO pMemCard);

VOID DeinitializePowerManagement(PSD_MEMCARD_INFO pMemCard);

SD_API_STATUS IssueCardSelectDeSelect(PSD_MEMCARD_INFO pMemCard, BOOL Select);

VOID RequestEnd(PSD_MEMCARD_INFO pMemCard);

SD_API_STATUS RequestPrologue(PSD_MEMCARD_INFO pMemCard, DWORD DeviceIoControl);

SD on MX31 ADS

Secure Digital Host Controller

The Secure Digital Host Controller (SDHC) 模塊支持MMCSDSecure Digital I/O and Combo Cards (SDIO)三種。MX31一共有2SDHC硬件模塊。一個host controller 只支持連接上的一個卡。


SDHC.DLL由以下源代碼組成

『────

微軟代碼

c:\macallan\private\winceos\coreos\ceosutil\utiltree.cxx

c:\macallan\public\common\sdk\inc\svsutil.hxx

c:\macallan\private\winceos\coreos\ceosutil\utilmemf.cxx

c:\macallan\public\common\sdk\inc\svsutil.hxx

c:\macallan\private\winceos\coreos\ceosutil\utilmem.cxx

c:\macallan\private\winceos\coreos\ceosutil\svsutil.cxx

c:\macallan\public\common\oak\drivers\sdcard\sdcardlib\sdcardapistubs.cpp

c:\macallan\public\common\oak\drivers\sdcard\sdcardlib\sddebug.cpp

c:\macallan\public\common\oak\drivers\sdcard\sdcardlib\sdmemapi.cpp

c:\macallan\public\common\oak\inc\block_allocator.hxx

c:\macallan\public\common\oak\drivers\sdcard\sdhclib\sdhclib.cpp

─────』

d:\wince500\platform\mx31\src\drivers\sdhc\bspsdhc.c

d:\wince500\public\common\oak\csp\arm\freescale\mxarm11\drivers\sdhc\main.cpp

d:\wince500\public\common\oak\csp\arm\freescale\mxarm11\drivers\sdhc\sdcontrol.cpp

d:\wince500\public\common\sdk\inc\kfuncs.h

SDHC的註冊表設置

#if (defined BSP_SDHC1 || defined BSP_SDHC2)

[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class]

"BlockTransferSize"=dword:100 ; Overwrite from default 64 blocks.

; "SingleBlockWrites"=dword:1 ; alternatively force the driver to use single block

access

[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\MMC_Class]

"BlockTransferSize"=dword:100 ; Overwrite from default 64 blocks.

; "SingleBlockWrites"=dword:1 ; alternatively force the driver to use single block

access

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MMC]

"Name"="MMC Card"

"Folder"="MMC"

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory]

"Name"="SD Memory Card"

"Folder"="SD Memory"

#endif

IF BSP_SDHC1

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SDHC_ARM11_1]

"Order"=dword:21

"Dll"="sdhc.dll"

"Prefix"="SDH"

"ControllerISTPriority"=dword:64

"Index"=dword:1

ENDIF ;BSP_SDHC1

IF BSP_SDHC2

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SDHC_ARM11_2]

"Order"=dword:21

"Dll"="sdhc.dll"

"Prefix"="SDH"

"ControllerISTPriority"=dword:64

"Index"=dword:2

ENDIF ;BSP_SDHC

SDHC和DMA

SDHC驅動支持DMA 和非DMA 2種數據傳輸模式,默認是DMAFor every request submitted to it, the driver attempts to build a DMA Scatter Gather Buffer Descriptor list for the buffer passed to it by the upper layer. For cases where this list cannot be built, the driver falls back to the non-DMA mode of transfer. The default configuration is maintained in the file bsp_cfg.h using the parameters BSP_SDMA_SUPPORT_SDHC1 and BSP_SDMA_SUPPORT_SDHC2. A value of TRUE means DMA is the default mode, and for cases where DMA cannot be used, the driver falls back to a non-DMA mode. A value of FALSE means non-DMA mode is the default and DMA mode will not be attempted. For the driver to attempt to build the Scatter Gather DMA Buffer Descriptors, the upper layer should ensure that the buffer meets the following criteria.

Start of the buffer should be a word aligned address.

Number of bytes to transfer should be word aligned.

Due to cache coherency issues arising due to processor and SDMA access of the memory, the above criteria is further stringent for the read or receive operation (it is not applicable for write or transmit):

Start of the buffer should be a cache line size (32 bytes) aligned address.

Number of bytes to transfer should be cache line size (32 bytes) aligned.



電源管理

The primary methods for limiting power in SDHC module is to gate off all clocks to the controllers and to

cut off power to the card slot when no cards are inserted. When a card is inserted to any of the slots, that

slot alone is powered and the clocks to that controller alone are gated on. While using memory cards, the

clock to the host controller and the clock to memory cards are gated off when ever the controller is idle.

For SDIO cards, both the clocks stay on all the time.

SDHC driver supports the full power on and full power off states. In full power off state, the clocks to the

controllers and the power to the inserted cards are turned off. When powered on, all cards inserted before

and after the power down will be detected and mounted.

PowerUp

This function is implemented to support resuming a memory card operation that was previously terminated

by calling PowerDown() API. Power to the card is restored, clocks to the pertaining controller is restarted.

SDHC driver is notified of a device status change. This results in signaling the SD bus driver of a card

removal followed by a card insertion. The card is re-initialized and is mounted so that the all operations

scheduled during a power down resumes. SDIO cards will be initialized on resume.

The details of this architecture and its operation can be found in the Platform Builder Help under the

heading 「Power On and Off Notifications for Secure Digital Card Drivers」, or in the online Microsoft

documentation at the following URL:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceddk5/html/wce50conpoweronoffnot

ificationsforsecuredigitalcarddrivers.asp

Note that this function is intended to be called only by the Power Manager.

PowerDown

This function has been implemented to support suspending all currently active SD operations just before

the entire system enters the low power state. Note that this function is intended to be called only by the

Power Manager. This function gates off all clocks to the controllers and powers down all the card slots.

LP1070 Secure Digital I/O Wi-Fi Driver

SDIO Wi-Fi 驅動是通過Freescale LP1070 SDIO Wi-Fi 卡來連接到一個IEEE 802.11b/g 無限局域網(WLAN) 。驅動支持以54 Mbps的速率和WLAN通訊。


注意:

The LP1070 SDIO Wi-Fi driver is an NDIS 5.0 compliant miniport driver.

LP1070 SDIO Wi-Fi card needs a 3.1~3.3V power supply from on-board Secure Digital Slot.


[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Custom\MANF-0325-CARDID-0217-FUNC-1]

"Instance0"="FSL1070NdisSD:FSL1070NdisSD1"

"Prefix"="NDL"

"Dll"="FSL1070NdisSD.dll"

[HKEY_LOCAL_MACHINE\Comm\FSL1070NdisSD]

"ImagePath"="FSL1070NdisSD.dll"

"Group"="NDIS"

"DisplayName"="WaveBlaster 802.11 SDIO Adapter"

[HKEY_LOCAL_MACHINE\Comm\FSL1070NdisSD\Linkage]

"Route"=hex(7):\

46,53,4c,31,30,37,30,4e,64,69,73,53,44,31,00,00,00,00

[HKEY_LOCAL_MACHINE\Comm\FSL1070NdisSD1]

"ImagePath"="FSL1070NdisSD.dll"

"Group"="NDIS"

"DisplayName"="WaveBlaster 802.11 SDIO Adapter"

[HKEY_LOCAL_MACHINE\Comm\FSL1070NdisSD1\Parms]

"SDIOMaxClockFreq"=dword:017d7840

"SDIOMaxByteNumber"=dword:000003e8

"SDIOMaxBlockNumber"=dword:000003e8

"SDIOBlockSize"=dword:00000040

"SDIOSupportBlockMode"=dword:00000001

"SDIOSupport4BitMode"=dword:00000001

"BluetoothCoexCapability"=dword:00000000

"CcxCapability"=dword:00000000

"RadioMeasurementCapability"=dword:00000000

"MultiDomainCapability"=dword:00000000

"RoamRssiHysteresis80211bg"=dword:0000000a

"RoamRssiThreshold80211bg"=dword:ffffff9d

"ListenInterval"=dword:00000000

"BufferConfig"=dword:00000000

"DbgMaxFileSize"=dword:00019000

"WMMEnabled"=dword:00000000

"ResetEnable"=dword:00000001

"UWASensitivityLockout"=dword:00000000

"ShortPreamble"=dword:00000001

"RTSCTSThreshold"=dword:0000092b\

"FragmentThreshold"=dword:0000092a

"DefaultKey3"="0x0000000000"

"DefaultKey2"="0x0000000000"

"DefaultKey1"="0x0000000000"

"DefaultKey0"="0x0000000000"

"LongKeys"=dword:00000000

"Auth"=dword:00000000

"WEP"=dword:00000000

"PowerSaving"=dword:00000000

"RateSelect"=dword:00000000

"MACID"="0x000000000000"

"IbssChannel"=dword:00000000

"Ibss54g"=dword:00000000

"RestrictedChannel"=dword:00000000

"BSSID"="0x000000000000"

"Manual"=dword:00000000

"ESSID"=""

"Domain"=dword:00000010

"ProtocolType"=dword:00000003

"NetworkType"=dword:00000000

"STAuwa"="uwa_airoha.bin"

"STAupper"="mac_airoha_STA.bin"

"NetworkAddress"=""

"BusType"=dword:00000000

"BusNumber"=dword:00000000

[HKEY_LOCAL_MACHINE\Comm\FSL1070NdisSD1\Parms\Tcpip]

"Subnetmask"=hex(7):\

32,35,35,2e,32,35,35,2e,32,35,35,2e,30,00,00,00,00

"IpAddress"=hex(7):\

30,2e,30,2e,30,2e,30,00,00,00,00

"UseZeroBroadcast"=dword:00000000

"EnableDHCP"=dword:00000001


附錄

SD卡與其他卡的對比

SDHC


Compatibility

* SDHC Host Products can use both SD and SDHC Memory Cards.
* SD Host Products can use only SD Memory Card 2GB or less.

Capacity (4GB SDHC Memory Card)

Still image JPEG
1,880 x 2,160 pixels, 6 Megapixels

Approx. 1,240 images

MPEG-2 Video
704 x 480 pixels, 5 Mbps, 30 fps

Approx. 1 hr 40 min

MPEG-4 Video
QVGA (320 x 240 pixels), 384 kbps, 15 fps

Approx. 19 hrs

Music (SD-Audio/AAC)
128 kbps

Approx. 68 hrs
(About 1,000 songs)

常用網站:

http://www.sdcard.com/

http://www.sdcard.org/