wince下SD卡驅動開發

2021-06-20 16:20:42 字數 1667 閱讀 1174

如圖所示:最下面的是你的h/w部分,其中sd host controller是你的sd硬體控制器部分,你寫驅動需要這部分的spec。接著上面的sd host controller driver就是你需要實現的部分了,直接和你的控制器打交道。 而bus層則是位於host和client之間的一層,主要用來進行兩層之間的通訊,並根據不同的裝置來載入不同的client驅動,如果是sd memory卡就載入sd memory。如果是具有wifi功能的sdio卡就會載入這個sdio wif驅動。

驅動bus driver和client driver均由微軟提供,但是不是微軟自己寫的。貌似是乙個叫什麼bsquare公司開發的。其中bus層的**位於c:/wince500/public/common/oak/drivers/sdcard/sdbusdriver下面。(c:/wince500是你安裝wince的目錄)。而client端的**位於c:/wince500/public/common/oak/drivers/sdcard/sdclientdrivers下面,其下面微軟帶了乙個兩個client 驅動(bluetooth 和 sdmemory)。下面介紹各層的主要功能,bus層主要是:列舉板上的卡,並決定他們的型別(mmc, sd memory or sdio),配置合適的電流給卡,根據登錄檔的值載入clients,把匯流排要求入佇列,把來自host controller的非同步通知入佇列,匯流排要求完成,sdio 中斷,裝置插入/拔出,出錯時重試等功能。

其主要的處理流程主要在sdhceventhandlers.cpp中的handleadddevice()中,在這裡面包括了卡的識別,卡的上電,卡的種類的識別,載入client端的驅動等工作,在除錯的時候,可以在這裡面新增一些debug資訊,看初始化出要出錯出在**,並根據相應的回應來驅動為什麼出錯。其中 

while (null != pcurrentdevice) 

這段主要就是用來根據上面得到的資訊來load client端驅動的。其中如果僅僅是儲存卡的話,就會load sdmemory.dll。而如果是sdio wifi卡的話,就會load相應的wifi client端驅動。其中初始化的流程主要就在這個函式裡面實現:

主要的命令有:cmd5----cmd55/cmd41---cmd2--cmd3等等,具體的cmd參考sd的spec。這些命令均有bus層下給host controller層的。

其中host controller層主要實現將命令下給h/w,並且得到相應的response,把這些response按照相應的格式放到某個buffer中,傳給bus層,由bus層來處理。bus層就是根據這些response來確定卡的型別,卡的大小,卡的傳輸速度,卡的一些屬性的。

卡的讀寫: 檔案系統的讀寫會先到sdmemory層,sdmemory先將cardio轉化為diskio然後通過bus層傳遞給host controller,其中讀寫主要由cmd17和cmd18,以及cmd24和cmd25。在完成每一次bus層的處理之後,都要想bus層傳送乙個busrequest handle complete事件,通知bus層讀寫操作已經完成。讀寫操作需要用到dma操作,這裡需要copy動作,因為dma需要實體地址,而層傳下來的buf是虛擬位址。

以上部分,大概是wince下面sd卡驅動的大概,有很多地方都沒有講解清楚。拖了這麼久才寫完。唉,好多東西還不是很明白,有什麼問題,希望大家交流,

WinCE下如何獲取SD卡容量

參考下面 void getstorageinfo cstring tmp tmp.format l di bytes per sect d di total sectors d total captal d r n inbuf.di bytes per sect,inbuf.di total sec...

SD卡的驅動

這幾天一直在調大容量sdhc卡的驅動,期間遇到一些問題,現在只調好一張4g容量的卡,8g容量的卡還不行。不得不感嘆sd卡協議的混亂和相容性之差。特別是命令響應這部分,看了很多文件,還是雲裡霧裡。期間參考正點原子的spi驅動sdhc的例子,那例子裡判斷cmd17的正確響應應該是0x00,然而在veri...

sd卡,驅動學習

linux sd卡驅動開發 一 sd 相關基礎概念 linux sd卡驅動開發 二 sd 卡驅動分析host篇 linux sd卡驅動開發 三 sd 卡驅動分析core篇 linux sd卡驅動開發 四 sd 控制器之真正的硬體操作 linux sd卡驅動開發 五 sd 卡驅動分析core補充篇 l...