在HPM6750上使用RT-Thread驅(qū)動SD卡實現(xiàn)文件讀寫只需要三步:
編譯項目代碼
燒錄二進(jìn)制到開發(fā)板
PS:本篇內(nèi)容特點——實操性強,異常簡單,有手就行。
一、準(zhǔn)備工作
1.1 準(zhǔn)備好開發(fā)板和SD卡
開始本篇實驗之前,需要準(zhǔn)備一個MicroSD卡,我這里準(zhǔn)備的是一個32G的鎧俠藍(lán)卡:
1.2 創(chuàng)建RT-Thread項目
首先,使用RT-Thread Studio創(chuàng)建名為hpm_sdio_test的項目:
注:如果已有RT-Thread項目,則可以跳過此步驟。
二、配置RT-Thread
這里僅以RT-Thread Studio為例,對RT-Thread進(jìn)行配置。除此之外,使用RT-Thread的Env工具,在命令行環(huán)境下進(jìn)行相關(guān)配置也是可以的。
2.1 打開FATFS和SDIO組件
創(chuàng)建項目后,打開RT-Thread Settings,開啟FATFS和SDIO配置:
可以看到,打開的組件,圖標(biāo)顯示為彩色。這里的SDIO屬于RT-Thead驅(qū)動框架的SDIO部分。
為了方便觀察實驗現(xiàn)象,這里最好再打開SDIO組件的調(diào)試日志:
圖中頂欄的幾個部分,對于RT-Thread Studio創(chuàng)建的RT-Thread項目,通常而言:
內(nèi)核欄中的屬于內(nèi)核組件配置,相關(guān)源碼位于rt-thread子目錄;
組件欄中的屬于系統(tǒng)組件配置,相關(guān)源碼位于rt-thread/components子目錄;
軟件包欄中的屬于三方組件配置,相關(guān)源碼默認(rèn)不在項目中;在打開相應(yīng)配置并保存后,才會下載到項目的packages子目錄;
硬件欄中的屬于BSP配置,相關(guān)源碼通常在board子目錄。
2.2 打開SDIO驅(qū)動
前面打開的僅是SDIO驅(qū)動框架,要使用SDIO功能,還需要打開HPM開發(fā)板的SDXC驅(qū)動:
修改完成,Ctrl+S保存修改。
三、編譯、燒錄、運行
3.1 編譯項目代碼
完成上面的配置工作后,Ctrl+B編譯項目:
編譯完成后,可以在控制臺看到Flash和RAM占用情況。
3.2 燒錄程序
編譯成功后,我們需要將生成的二進(jìn)制程序代碼文件燒錄到開發(fā)板上。
開始測試之前,我們需要先將MicroSD卡插入開發(fā)板(RT-Thread目前還不支持SD卡熱插拔):
插入SD卡后,將開發(fā)板通過USB線連接到PC。
此時,我們可以看到,正面的SD卡指示燈已經(jīng)亮起了:
3.3 運行程序
接著,回到RT-Thread Studio,用Ctrl+Alt+D快捷鍵,將編譯好的程序燒錄到開發(fā)板上。
燒錄完成后,我們就可以在串口終端看到——已經(jīng)檢查到sd卡了:
可以看到,RT-Thread版本信息已經(jīng)打印出來了,同時看到了熟悉的msh提示符。
基于RT-Thread的項目默認(rèn)情況下開啟了msh,并且將UART0串口初始化為console輸入輸出。因此,我們可以在串口中斷軟件中,輸入msh支持的命令,查看命令的輸出。
四、在msh中操作SD卡
燒錄完成后,我們就可以在RT-Thread的msh環(huán)境中愉快地操作SD卡了。本節(jié)我將在串口終端中演示——如何在HPM6750開發(fā)板上使用RT-Thread提供的文件系統(tǒng)、目錄、文件操作相關(guān)命令。
首先,我們可以通過help命令查看此時msh中支持哪些命令:
可以看到,這里有很多命令,我們接下將會使用到的有:
文件操作命令——ls/cp/mv/cat/rm
可以寫文件的命令——echo
目錄操作命令——cd/pwd/mkdir
文件系統(tǒng)操作命名——mkfs/mount/umount/df
使用過Linux的朋友應(yīng)該會對上面這些命令感到熟悉。
接下來,我將會在msh中演示——如何通過這些命令對SD卡進(jìn)行一些操作。
4.1 查看塊設(shè)備
我們可以在串口終端內(nèi)使用list_device命令查看設(shè)備:
此時,我們可以看到已經(jīng)有了一個名為“sd0”的塊設(shè)備。
4.2 格式化SD卡
初次使用的SD卡,可能沒有文件系統(tǒng),或者文件系統(tǒng)不是FAT格式的,需要將SD卡格式化為FAT文件系統(tǒng),RT-Thread后續(xù)才能掛載成功。
注意:格式化操作會導(dǎo)致SD卡上已有數(shù)據(jù)全部丟失;因此,在執(zhí)行格式化操作前,請確認(rèn)SD卡上沒有重要數(shù)據(jù),或者你已對SD卡上的重要數(shù)據(jù)進(jìn)行了備份。
接下來,我們可以通過mkfs命令對SD卡進(jìn)行格式化:
mkfs執(zhí)行會持續(xù)一段時間,請耐心等待(具體因不同SD卡容量和速度等級而異,我的32GB卡消耗了幾秒鐘)。
4.3 掛載文件系統(tǒng)
接下來,我們可以在串口終端內(nèi)使用mount命令將SD卡掛載到根目錄:
這里,我先使用了mount -h查看了mount命令的用法。
另外需要注意的是,fstype參數(shù)使用的是elm(這里的elm實際就是FATFS)。
4.4 簡單的文件讀寫測試
前面提到echo命令比較特殊,可以寫文件,接下來使用echo寫文件,cat讀文件,ls查看文件:
這里使用了ls、echo、cat命令,進(jìn)行了文件讀寫操作。
4.5 簡單的目錄操作測試
接下來,進(jìn)行簡單的目錄操作演示。
這里首先使用了pwd查看當(dāng)前工作目錄,然后演示了ls、mkdir、cd命令;
如果你是對RT-Thread了解不多的朋友,看到這里可能會非常驚奇——在一個可以運行在單片機的RTOS上,居然可以這么方便的進(jìn)行文件系統(tǒng)、目錄、文件操作。
五、業(yè)務(wù)代碼中使用SD卡
前面都是使用命令進(jìn)行相關(guān)操作的,實際項目中往往需要在業(yè)務(wù)代碼中使用前面的那些功能,包括文件系統(tǒng)、目錄、文件操作。
5.1 使用代碼進(jìn)行相關(guān)操作
所謂“授人以魚不如授人以漁”,這里不準(zhǔn)備展開介紹前面所有命令行操作如何用代碼實現(xiàn),只介紹如何找到前面那些操作的源碼實現(xiàn)??傮w來說,主要有兩個方法:
grep大法
grep結(jié)合正則表達(dá)式進(jìn)行搜索
使用其他你熟悉的工具也是可以的
RTFSC(read the f**king source code)
根據(jù)搜索到的位置打開文件并閱讀源碼
對,會這兩招就可以了。
下面以搜索mount命令的實現(xiàn)代碼為例進(jìn)行演示。我們知道RT-Thread的msh命令是通過MSH_開頭的宏注冊到命令列表中的。因此可以搜索:
接下來,就可以打開./rt-thread/components/finsh/msh_file.c文件,跳轉(zhuǎn)到526進(jìn)行查看了:
可以看到這里調(diào)用了dfs_munt實現(xiàn)了文件系統(tǒng)掛載功能。
六、完善細(xì)節(jié)
絕大部分文件系統(tǒng)都有文件的創(chuàng)建、修改時間信息,F(xiàn)ATFS也不例外。因此,為了能夠讓SD卡上文件具有正確的創(chuàng)建、修改時間信息正常,建議使用SD卡的同時啟用RTC(Real Time Clock)以及NTP(Network Time Protocol)對時功能。本節(jié)主要介紹如何開啟RT-Thread的RTC和NTP對時功能。
6.1 使能RTC
在RT-Thread系統(tǒng)中,RTC的實現(xiàn)有兩種,一種是純軟件方式,另一種是硬件方式。
軟件方式的RTC,RT-Thread內(nèi)核已經(jīng)有了完整的實現(xiàn),一般用于沒有硬件RTC的設(shè)備上(或者硬件RTC驅(qū)動還沒有支持的情況下)。RT-Thread的硬件RTC,和其他硬件功能類似,有RTC驅(qū)動框架和RTC硬件驅(qū)動兩部分。其中,RTC驅(qū)動框架已有RT-Thread內(nèi)核實現(xiàn),RTC硬件驅(qū)動由廠商實現(xiàn)(一般通過BSP或者CSP提供出來)。
軟件模擬RTC以及RTC驅(qū)動框架的配置項可以通過RT-Thread Settings進(jìn)行設(shè)置:
HPM6750的BSP中已經(jīng)實現(xiàn)了RTC硬件驅(qū)動,我們可以在RT-Thread Settings中設(shè)置硬件RTC功能:
6.2 使能網(wǎng)絡(luò)和NTP——實現(xiàn)聯(lián)網(wǎng)自動對時
使能WiFi聯(lián)網(wǎng),具體操作參考我此前的帖子:http://bbs.eeworld.com.cn/thread-1206656-1-1.html 或參考 (HPM6750 測評 | 不寫一行代碼,兩分鐘實現(xiàn)WiFi聯(lián)網(wǎng))
RT-Thread的netutils軟件包中包含了NTP功能,使能NTP功能可以參考帖子中使能netutils軟件包中ifconfig相關(guān)的介紹。
七、本篇小結(jié)
可以看到,在基于RT-Thread系統(tǒng)的項目中,我們沒有添加任何代碼,就可以實現(xiàn)對HPM6750開發(fā)板上的SD卡進(jìn)行文件系統(tǒng)、目錄、文件相關(guān)操作。這是因為RT-Thread系統(tǒng)本身已經(jīng)積累了大量優(yōu)秀開發(fā)者的工作成果,其中包括SDIO驅(qū)動框架、FATFS支持、芯片廠的SDXC驅(qū)動。所謂的“站在巨人的肩膀上”,大概就是這種體驗吧。
本篇就到這里了,感謝你的閱讀,下次再會。
(本文摘選自EEWORLD@xusiwei1236)
-
嵌入式
+關(guān)注
關(guān)注
5086文章
19141瀏覽量
305925
發(fā)布評論請先 登錄
相關(guān)推薦
評論