SD卡驱动分析(一)
Android下的SD卡驅動與標準LINUX下的SD卡驅動好像沒有太大的區別,這里就以高通的ANDROID 2.3以代表,來簡要分析一下LINUX下SD卡驅動的寫法。由于小弟的技術有限,分析的有錯的地方,請大家指正,可以共同學習。
? ? ?一.最先來理清一下SD、MMC與SDIO的一些基本概念:? ??
? ? ? ? ? ? ? ?(1) ?MMC:(Multi Media Card)是較早的一種記憶卡標準,目前已經被 SD 標準所取代。
? ? ?(2) ?SD:(Secure Digital Memory Card) 是一種 flash memory card 的標準,也就是一般常見的 SD 記卡,已完全兼容MMC標準。
? ? ?(3) ?SDIO:(Secure Digital Input and Output Card)安全數字輸入輸出卡。SDIO是在SD標準上定義了一種外設接口,通過SD的I/O接腳來連接外圍設備,并且通過SD上的?I/O數據接位與這些外圍設備進行數據傳輸。是目前較熱門的技術,目前有很多WIFI、GPS、Bluetooth、radio等模塊都有了SDIO接口,也可以被稱為“SDIO卡”。
? ? ?(4) ?接口的工作模式:工作模式是對CPU的控制器來說的,也就是說,CPU可以能過設置一些寄存器來將自身控制器設成置滿足外掛設備要求的一種工作方式,即:SDIO工作模式、傳統的SD模式以及MMC工作模式。這幾種模式我的理解就是對應上面1-3三點的不同的外接設備。因為這三種設備的傳輸協議是有區別的。兼容關系是:“SDIO卡”> “SD卡”> “MMC卡”,反過來剛不成立。?
? ? ?(5) 接口的傳輸方式:傳輸方式也是針對CPU的控制器來講的,一般的CPU控制器都會支持三種傳輸模式,即:SPI模式、1線模式、4線模式。那么如何才可以保證CPU工作在我們要求的模式以及傳輸方式呢?就是通過寫CPU的控制寄存器來完成的。比如下面會提到的函數msmsdcc_set_ios(struct mmc_host *mmc,struct mmc_ios *ios).
? ? ?(6)?MMC/SD卡初始化時的指令以及各種狀態:在網上找到以下的圖片,可以很清楚的反映出SD卡初始化的指令,后面介紹代碼時所發送的指令其實也是按照這個順序來發送的:
? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ??
? ? ?二.Android(LINUX)下SD卡驅動的結構層次
? ? ?我們知道,LINUX的驅動很喜歡分層,就像IIC以及輸入子系統等驅動一樣,LINUX下的SD卡驅動也是分了層次的,在我們的代碼的kernel/drivers/mmc目錄下包含了三個子目錄,分別是:host、card、core三個部分:
? ? ?HOST部分是針對不同主機的驅動程序,這一部是驅動程序工程師需要根據自己的特點平臺來完成的,不過高通發布的CODEBASE里已經幫我們把這部分做好了。
? ? ?CORE 部分: 這是整個MMC 的核心存,這部分完成了不同協議和規范的實現,并為HOST 層的驅動提供了接口函數。
? ? ?CARD部分:因為這些記憶卡都是塊設備,當然需要提供塊設備的驅動程序,這部分就是實現了將你的SD 卡如何實現為塊設備的。整個SD卡驅動的調用關系可以用如下的圖來表示:
? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ??
? ? ?SD卡的一些基本概念這里就講完了,下一節就主要開始分析代碼嘍。
總結
以上是生活随笔為你收集整理的SD卡驱动分析(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高通安卓调试LCD几方面总结
- 下一篇: SD卡驱动分析(二)