Bootloader解析
我看了Z_Tam大佬創建一個Bootloader工程,然后下載到板子上,然后也說明了BootLoader主要功能:BootLoader主要用于使用外掛Falsh存儲代碼時 初始化外掛的Flash、映射物理地址及地址跳轉。
ART - Pi使用QSPI連接8M的W25Q64,也有一個大佬回答這個bootloader是直接燒寫到內部128k的flash程序里,他的作用是引導應用程序到外部flash里面,main函數里面是直接跳轉到外部QSPI接口的flash。
我的理解:
ART-Pi有兩個存儲的空間,一個是存儲空間為 128K的flash ROM起始地址為 0x08000000,
ART-Pi從存儲空間為128K flash ROM開始運行代碼。
我們下載bootloader工程是為了將 bootloader下載到flash程序中,然后將應用程序下載到W25Q64中。
當ART-Pi上電后,先運行flash中的bootloader然后根據bootloader的引導再運行W25Q64中的應用程序。
總結:Bootloader的作用,以及什么時候使用Bootloader
作用: Bootloader在這里主要考慮內部flash空間不足,應用程序放在外部flahs也就是W25Q64中,需要通過Bootloader實現程序跳轉執行。
使用場景:flash中沒有bootloader,而我們的寫的項目代碼量又足夠大的情況下,也就是當我們需要執行到下載到W25Q64中的項目。理論情況下,項目代碼量足夠小的情況下可以直接下載到flash中運行的。
當flash中下載的是其它項目代碼,然后我們又將另一個項目代碼下載到起始地址為 0x90000000的W25Q64中,這個時候運行的是flash中的項目,并且W25Q64中的項目并不會執行。
所以在構建項目前應下載Bootloader工程到開發板中
創建一個基礎的LED工程
這個是基于已經下載完Bootloader工程之后。
然后編譯下載,打開串口之后可以看到打印
使能SDIO和虛擬文件系統
點擊RT-Thread Settings,并打開Fatfs和SDIO。
使能組件中的SDIO調試日志輸出,方便觀看。
并打開硬件中的SDIO1
然后保存配置,再次構建工程,并下載到板子上。
到這里,按照兩位大佬的文章應該是已經能正常識別SD卡,但是我這邊和評論區中一些小伙伴并沒有識別,這里是寫這個文章的一個重點。
原因:需在main函數中添加以下代碼
#include "drv_sdio.h"
int sdcard_mount(void)
{
rt_device_t device;
device = rt_device_find("sd0");
if (device == NULL)
{
mmcsd_wait_cd_changed(0);
sdcard_change();
mmcsd_wait_cd_changed(RT_WAITING_FOREVER);
device = rt_device_find("sd0");
}
return 0;
}
INIT_COMPONENT_EXPORT(sdcard_mount);
注意: sdcard_change()會報隱式聲明,我們在”drv_sdio.h”中聲明一下即可。這個時候再次編譯下載到開發板。
即可出現識別成功的現象。
然后我們添加掛載文件系統代碼:
int sd_init(void)
{
rt_thread_mdelay(500);//這段延時必須加上,系統上電過程中存在延時,否則會出現先掛載后注冊塊設備sd0的情況
//mkfs("elm","sd0");//掛在前需格式化
if(dfs_mount("sd0","/","elm",0,0)==0) //掛載文件系統,參數:塊設備名稱、掛載目錄、文件系統類型、讀寫標志、私有數據0
{
rt_kprintf("dfs mount successrn");
}
else
{
rt_kprintf("dfs mount failedrn");
}
return 0;
}
MSH_CMD_EXPORT(sd_init,sd_init);
這是沒有使用INIT_COMPONENT_EXPORT(),自動掛載是為了后面的TF卡作USB設備,后面會解釋。
然后再次編譯下載到開發板之后,使用list_device命令發現掛載成功。
然后先使用sd_init命令再使用ls命令就能查看TF卡里面的內容,接下了我又跟著做了USB設備作為TF讀卡器
TF設備作為讀卡器
1、打開RT-Thread Setting配置,”使用USB”。并改變設備類型,以及改變磁盤名,注意這個磁盤名默認為flash0,我們一定要改成sd0.
5、注意:和adaphoto大佬所說的一致,TF卡做USB設備的時候一開始上電的時候不能使sd0不能掛載文件系統也就是不能注冊到elm上,因為掛載到文件系統就不能掛載到USB的。所以在TF卡做USB設備的時候不執行sd_init()函數。
-
讀卡器
+關注
關注
2文章
410瀏覽量
39366 -
SD卡
+關注
關注
2文章
564瀏覽量
63890 -
QSPI接口
+關注
關注
0文章
14瀏覽量
3343 -
w25Q64
+關注
關注
1文章
15瀏覽量
3017 -
ART-Pi
+關注
關注
0文章
23瀏覽量
1297
發布評論請先 登錄
相關推薦
評論