原理圖
下圖是sdio的接線圖
dat0-4 cmd 接了4.7k的上拉電阻。六根與mcu相連的線中均接了一個22歐的電阻,用于限制電流。
下圖是mcu的接線
dat0接引腳P2.0,dat1接P2.1,dat2接P2.2,dat3接P2.3,cmd接P2.4,clk接P2.5,
板子的sd卡座是彈簧式的,卡片壓下去 ,彈片與地相接,mcu_sd_cd低電平,mcu可檢測到當前有卡片插入。
英飛凌提供了兩種驅(qū)動依賴:
PSoC 6 Peripheral Driver Library(PDL),Hardware Abstraction Layer (HAL)。
pdl接口大概對sdio的支持度不很好,不太完善,當前測試按照以下流程初始化會失敗,
pdl接口位于HAl的上層,屬于對hal接口的再次封裝。
群里有位大佬使用了hal接口,初始化看起來問題不大,初始化效果如下,可以得到卡片的容量
rtt驅(qū)動結(jié)構(gòu)
之前寫linux驅(qū)動,學習rtt的驅(qū)動時,多少會帶入linux的思維。
rtt的驅(qū)動要比linux的簡單許多,大概框架相似。
整個系統(tǒng)結(jié)構(gòu)分為三層,應用層,也就是我們的業(yè)務層。
第二層時rtt提供的中間層,虛擬文件驅(qū)動層。
第三層是針對具體硬件的硬件驅(qū)動層。
業(yè)務層直接調(diào)用虛擬驅(qū)動層,虛擬驅(qū)動層通過回調(diào)函數(shù)方式操縱硬件驅(qū)動代碼了。
代碼的文件結(jié)構(gòu)如下圖
application是存放應用層代碼的文件夾。
rt-thread目錄存放虛擬文件系統(tǒng)接口
libraries存放硬件驅(qū)動代碼和廠商的bsp等支持代碼。
調(diào)用官方的pdl接口導致硬件崩潰,對英飛凌的mcu了解不深,暫不知如何調(diào)查,借鑒群里大佬Vandoul的sdhc驅(qū)動代碼,測試了一下接口。
接口dfs_filesystem_get_partition 有一個小bug,sd卡是64gb容量的卡片,格式化為ntfs格式,讀出的分區(qū)表解析到的容量錯誤,如下圖所示。
代碼參考了vandoul大佬的代碼,刪除了一些異常判斷等代碼。
提供兩個接口 sdrd 和sdwt,僅是直接測試sd卡存儲空間的讀寫,不涉及到文件系統(tǒng)的掛載。
sdrd 帶一個參數(shù),讀取地址
sdwt帶兩個參數(shù),第一個是地址,第一個是數(shù)值
下圖是命令使用效果。
-
上拉電阻
+關(guān)注
關(guān)注
5文章
360瀏覽量
30660 -
存儲器
+關(guān)注
關(guān)注
38文章
7521瀏覽量
164090 -
SD卡
+關(guān)注
關(guān)注
2文章
566瀏覽量
63999 -
MCU控制
+關(guān)注
關(guān)注
0文章
48瀏覽量
6763 -
RTThread
+關(guān)注
關(guān)注
8文章
132瀏覽量
40927
發(fā)布評論請先 登錄
相關(guān)推薦
評論