0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ART-Pi Bootloader分析,驅(qū)動SD卡和USB設(shè)備做TF讀卡器

冬至子 ? 來源:林夕 ? 作者:jf_1689824183.6148 ? 2023-10-09 10:30 ? 次閱讀

Bootloader解析

我看了Z_Tam大佬創(chuàng)建一個Bootloader工程,然后下載到板子上,然后也說明了BootLoader主要功能:BootLoader主要用于使用外掛Falsh存儲代碼時 初始化外掛的Flash、映射物理地址及地址跳轉(zhuǎn)。

ART - Pi使用QSPI連接8M的W25Q64,也有一個大佬回答這個bootloader是直接燒寫到內(nèi)部128k的flash程序里,他的作用是引導(dǎo)應(yīng)用程序到外部flash里面,main函數(shù)里面是直接跳轉(zhuǎn)到外部QSPI接口的flash。

我的理解:

ART-Pi有兩個存儲的空間,一個是存儲空間為 128K的flash ROM起始地址為 0x08000000,

1.jpg

ART-Pi從存儲空間為128K flash ROM開始運行代碼。

我們下載bootloader工程是為了將 bootloader下載到flash程序中,然后將應(yīng)用程序下載到W25Q64中。

當(dāng)ART-Pi上電后,先運行flash中的bootloader然后根據(jù)bootloader的引導(dǎo)再運行W25Q64中的應(yīng)用程序。

總結(jié):Bootloader的作用,以及什么時候使用Bootloader

作用: Bootloader在這里主要考慮內(nèi)部flash空間不足,應(yīng)用程序放在外部flahs也就是W25Q64中,需要通過Bootloader實現(xiàn)程序跳轉(zhuǎn)執(zhí)行。

使用場景:flash中沒有bootloader,而我們的寫的項目代碼量又足夠大的情況下,也就是當(dāng)我們需要執(zhí)行到下載到W25Q64中的項目。理論情況下,項目代碼量足夠小的情況下可以直接下載到flash中運行的。

當(dāng)flash中下載的是其它項目代碼,然后我們又將另一個項目代碼下載到起始地址為 0x90000000的W25Q64中,這個時候運行的是flash中的項目,并且W25Q64中的項目并不會執(zhí)行。

所以在構(gòu)建項目前應(yīng)下載Bootloader工程到開發(fā)板中

創(chuàng)建一個基礎(chǔ)的LED工程

1.jpg

這個是基于已經(jīng)下載完Bootloader工程之后。

然后編譯下載,打開串口之后可以看到打印

1.jpg

使能SDIO和虛擬文件系統(tǒng)

點擊RT-Thread Settings,并打開Fatfs和SDIO。

1.jpg

使能組件中的SDIO調(diào)試日志輸出,方便觀看。

1.jpg

并打開硬件中的SDIO1

1.jpg

然后保存配置,再次構(gòu)建工程,并下載到板子上。

1.jpg

到這里,按照兩位大佬的文章應(yīng)該是已經(jīng)能正常識別SD卡,但是我這邊和評論區(qū)中一些小伙伴并沒有識別,這里是寫這個文章的一個重點。

原因:需在main函數(shù)中添加以下代碼

#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);

1.jpg

注意: sdcard_change()會報隱式聲明,我們在”drv_sdio.h”中聲明一下即可。這個時候再次編譯下載到開發(fā)板。

即可出現(xiàn)識別成功的現(xiàn)象。

1.jpg

然后我們添加掛載文件系統(tǒng)代碼:

int sd_init(void)
{
rt_thread_mdelay(500);//這段延時必須加上,系統(tǒng)上電過程中存在延時,否則會出現(xiàn)先掛載后注冊塊設(shè)備sd0的情況
//mkfs("elm","sd0");//掛在前需格式化
if(dfs_mount("sd0","/","elm",0,0)==0) //掛載文件系統(tǒng),參數(shù):塊設(shè)備名稱、掛載目錄、文件系統(tǒng)類型、讀寫標(biāo)志、私有數(shù)據(jù)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設(shè)備,后面會解釋。

1.jpg

然后再次編譯下載到開發(fā)板之后,使用list_device命令發(fā)現(xiàn)掛載成功。

1.jpg

然后先使用sd_init命令再使用ls命令就能查看TF卡里面的內(nèi)容,接下了我又跟著做了USB設(shè)備作為TF讀卡器

1.jpg

TF設(shè)備作為讀卡器
1、打開RT-Thread Setting配置,”使用USB”。并改變設(shè)備類型,以及改變磁盤名,注意這個磁盤名默認(rèn)為flash0,我們一定要改成sd0.

1.jpg

2.jpg

5、注意:和adaphoto大佬所說的一致,TF卡做USB設(shè)備的時候一開始上電的時候不能使sd0不能掛載文件系統(tǒng)也就是不能注冊到elm上,因為掛載到文件系統(tǒng)就不能掛載到USB的。所以在TF卡做USB設(shè)備的時候不執(zhí)行sd_init()函數(shù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 讀卡器
    +關(guān)注

    關(guān)注

    2

    文章

    409

    瀏覽量

    39317
  • SD卡
    +關(guān)注

    關(guān)注

    2

    文章

    558

    瀏覽量

    63737
  • QSPI接口
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    3328
  • w25Q64
    +關(guān)注

    關(guān)注

    1

    文章

    15

    瀏覽量

    2999
  • ART-Pi
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    1278
收藏 人收藏

    評論

    相關(guān)推薦

    ART-Pi Smart開發(fā)板開箱及愛之初次體驗

    ART-Pi Smart 開發(fā)板初次嘗鮮,ART-Pi Smart開箱及初次體驗內(nèi)置應(yīng)用.
    的頭像 發(fā)表于 05-03 16:25 ?4923次閱讀
    <b class='flag-5'>ART-Pi</b> Smart開發(fā)板開箱及愛之初次體驗

    電腦相關(guān)的讀卡器

    移動磁盤”。但是,如果您取出存儲,“可移動磁盤”將消失。)如果你使用另外一個閱讀,這個問題不太可能發(fā)生。但是,它需要一個USB插座。提示:通過讀卡器
    發(fā)表于 09-16 16:51

    基于USBSD讀卡器設(shè)計

    你好,我想設(shè)計一個基于單片機的SD讀卡器,我可以用USB接口與我的PC機接口。有沒有參考設(shè)計?請分享,謝謝。 以上來自于百度翻譯 以下為原文 Hello, I want to d
    發(fā)表于 06-19 14:05

    BL8810替代GL823K代替GL823K方案SD/TF讀卡器方案

    BL8810替換GL823K低BOM讀卡器主控芯片方案,支持SD/TF ,性能穩(wěn)定。BL8810搭配MA8601可以實現(xiàn)Typec轉(zhuǎn)USB+SD
    發(fā)表于 10-23 10:51

    USB 2.0讀卡器方案設(shè)計電路資料分享

    BL8810旺玖Prolific高度集成的單芯片解決方案設(shè)計的USB 2.0讀卡器.提供USB2.0和SD之間的高速數(shù)據(jù)傳輸SDHC、MiniSD、Micro
    發(fā)表于 11-06 17:01

    Art_Pi學(xué)習(xí)筆記匯總

    1、Art-Pi學(xué)習(xí)筆記1:驅(qū)動SDIO和USB設(shè)備TF
    發(fā)表于 03-18 14:27

    ART-PI在MDK中使用SDIO設(shè)備的方法

    一、ENV使能SDIO1.1.在kconfig增加配置因為ART-PI的SDIO2連接的是wifi,所以這里我們使用SDIO1。1.2.ENV中使能SDIO1.3.使能文件系統(tǒng)1.4.使用SD設(shè)備
    發(fā)表于 04-11 10:07

    使用ART-Pi ST-LINK的步驟教程

    等待升級完成后退出。查看 ART-Pi 調(diào)試的指示燈變成藍(lán)色。設(shè)備管理器能看到 J-LINK 的設(shè)備。3. 修改 ART-Pi 工程配置本
    發(fā)表于 04-11 10:10

    art-pibootloader進入到系統(tǒng)的時候非常慢是為什么

    我用 rt-studio 給art-pi 燒寫工程,有時候經(jīng)常會遇到有些工程在燒寫之后,從bootloader進入系統(tǒng)的時候,非常的慢,要上十幾秒才能進入,這是為啥?有誰遇到過同樣的問題么?
    發(fā)表于 04-24 09:31

    Bootloader有何作用?什么時候使用Bootloader

    之后,使用list_device命令發(fā)現(xiàn)掛載成功。然后先使用sd_init命令再使用ls命令就能查看TF卡里面的內(nèi)容,接下了我又跟著做了USB設(shè)備作為
    發(fā)表于 06-23 10:42

    sd讀卡器原理圖

    sd讀卡器原理圖
    發(fā)表于 02-02 22:05 ?1967次下載
    <b class='flag-5'>sd</b><b class='flag-5'>卡</b><b class='flag-5'>讀卡器</b>原理圖

    sd/tf/讀卡器速度測試軟件

    sd/tf速度測試軟件一個很小的軟件,用來測試TFSD
    發(fā)表于 03-21 21:34 ?247次下載
    <b class='flag-5'>sd</b><b class='flag-5'>卡</b>/<b class='flag-5'>tf</b><b class='flag-5'>卡</b>/<b class='flag-5'>讀卡器</b>速度測試軟件

    MAX14500–MAX14503 USBSD讀卡器

      MAX14500–MAX14503 USBSD讀卡器為帶有一個或兩個SD槽且支持全速
    發(fā)表于 11-11 09:19 ?1104次閱讀

    MA8621帶SD讀卡器USB HUB方案設(shè)計電路

    。 MA8621是一項創(chuàng)新,它集成了USB 2.0集線SD讀卡器的功能。讀卡器符合
    發(fā)表于 11-11 16:55 ?2027次閱讀
    MA8621帶<b class='flag-5'>SD</b><b class='flag-5'>讀卡器</b>的<b class='flag-5'>USB</b> HUB方案設(shè)計電路

    RT-Thread Studio驅(qū)動SD

    總結(jié)前言硬件平臺:RT-Thread ART-Pi STM32H750XBH6開發(fā)板 H750開發(fā)板開發(fā)軟件:RT-Thread Studio參考博客:RT-Thread Studio使用SDIO驅(qū)動SD
    發(fā)表于 12-27 19:13 ?20次下載
    RT-Thread Studio<b class='flag-5'>驅(qū)動</b><b class='flag-5'>SD</b><b class='flag-5'>卡</b>