1.概述
本文主要講述了U-boot的MMC DM框架驅動的移植方法。DM是Driver Model的簡稱,是U-boot的基本驅動框架。常見的MMC設備包括SD卡、eMMC存儲器等。本文討論遵循SD Hostcontroller Specification 協議的MMC設備驅動開發。
示例U-boot版本:2022.10。硬件平臺:ARM SOC。
2.原理
在U-boot中,對遵循SD Hostcontroller Specification 協議的MMC設備有著完備的底層驅動支持。因此,移植某個特定MMC外設驅動,具體工作為調用U-boot自有的MMC底層標準驅動,實現對MMC外設的訪問和操作。
MMC驅動的工作原理:首先對設備樹文件xx.dts進行解析,按照先bind后probe的順序加載MMC驅動,分別通過相應的bind函數和probe函數完成。
U-boot啟動后,在讀取MMC設備節點的compatible字段后,找到與之匹配的U_BOOT_DRIVER,然后執行bind函數對驅動進行綁定,最后通過probe函數對驅動進行激活,解析設備樹的節點屬性,對驅動進行配置,從而使驅動具備工作條件,供上層應用程序調用。
U-boot的命令子系統包含了眾多測試命令子集,其中mmc命令集可用來對MMC驅動進行功能測試,對MMC設備進行信息查詢和訪問操作。
3.移植方法
3.1 主要工作
向U-boot移植MMC DM框架驅動的主要工作包括:
(1)向./drivers/mmc/添加驅動文件源碼xx_sdhci .c(名稱xx由驅動開發者定義,下同);
(2)在./drivers/mmc/Makefile添加xx_sdhci .c的編譯條目;
(3)在./drivers/mmc/Kconfig添加xx_sdhci .c的編譯配置選項;
(4)向./arch/arm/dts/xx.dts中添加MMC設備節點。
3.2 驅動源碼設計
在U-boot的MMC驅動中,有眾多設備遵循了SD Hostcontroller Specification 協議,選取其中的Atmel SDHCI控制器驅動,講解驅動代碼的原理和設計方法,代碼路徑: ./drivers/mmc/atmel_sdhci.c。自編的驅動文件源碼xx_sdhci .c可參考atmel_sdhci.c進行設計。
MMC驅動包括2個核心函數,即atmel_sdhci_bind和atmel_sdhci_probe函數。
atmel_sdhci_bind函數用于驅動的綁定。調用了sdhci_bind函數,位于./drivers/mmc/sdhci.c;而MMC作為一種塊設備,sdhci_bind函數進一步調用了mmc_bind函數,位于./drivers/mmc/mmc-uclass.c。
atmel_sdhci_probe函數用于驅動的激活。atmel_sdhci_probe函數的主要流程為:首先對設備樹進行參數解析,解析出MMC控制器的工作時鐘頻率、寄存器地址、數據寬度、最高工作頻率等參數;然后通過sdhci_setup_cfg函數進行參數配置,sdhci_setup_cfg函數位于./drivers/mmc/sdhci.c;最后調用sdhci_probe函數完成probe操作。
3.3 MMC設備樹節點
在設備樹添加MMC設備節點,節點設計方法可以參考./doc/device-tree-bindings/mmc下的文檔。
4.驗證方法
4.1編譯mmc測試工具
為編譯mmc測試工具,應配置U-boot,使能CONFIG_CMD_MMC。
4.2驅動加載結果查詢
cli>dm tree
Class Index Probed Driver Name
root 0 [ + ] root_driver root_driver
mmc 0 [ + ] xx_sdhci `-- mmc@xxxxxxxx
blk 0 [ + ] mmc_blk `-- mmc@xxxxxxxx.blk
4.3MMC設備信息查詢
cli>mmc info
Manufacturer ID: 3
OEM: 5344
Name: SD32G
Bus Speed: 2000000
Mode: SD High Speed (50MHz)
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 29.7 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes
4.4寫操作
cli>mmc write 0x80000000 100 2
2 blocks written: OK
4.5讀操作
cli>mmc read 0x90000000 100 2
2 blocks read: OK
-
ARM
+關注
關注
134文章
9046瀏覽量
366809 -
soc
+關注
關注
38文章
4120瀏覽量
217932 -
MMC
+關注
關注
0文章
76瀏覽量
30454 -
移植
+關注
關注
1文章
377瀏覽量
28108 -
u-boot
+關注
關注
0文章
120瀏覽量
38200
發布評論請先 登錄
相關推薦
評論