0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ART-Pi Bootloader分析,驱动SD卡和USB设备做TF读卡器

冬至子 来源:林夕 作者:jf_1689824183.6148 2023-10-09 10:30 次阅读

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,

1.jpg

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工程

1.jpg

这个是基于已经下载完Bootloader工程之后。

然后编译下载,打开串口之后可以看到打印

1.jpg

使能SDIO和虚拟文件系统

点击RT-Thread Settings,并打开Fatfs和SDIO。

1.jpg

使能组件中的SDIO调试日志输出,方便观看。

1.jpg

并打开硬件中的SDIO1

1.jpg

然后保存配置,再次构建工程,并下载到板子上。

1.jpg

到这里,按照两位大佬的文章应该是已经能正常识别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);

1.jpg

注意: sdcard_change()会报隐式声明,我们在”drv_sdio.h”中声明一下即可。这个时候再次编译下载到开发板。

即可出现识别成功的现象。

1.jpg

然后我们添加挂载文件系统代码:

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设备,后面会解释。

1.jpg

然后再次编译下载到开发板之后,使用list_device命令发现挂载成功。

1.jpg

然后先使用sd_init命令再使用ls命令就能查看TF卡里面的内容,接下了我又跟着做了USB设备作为TF读卡器

1.jpg

TF设备作为读卡器
1、打开RT-Thread Setting配置,”使用USB”。并改变设备类型,以及改变磁盘名,注意这个磁盘名默认为flash0,我们一定要改成sd0.

1.jpg

2.jpg

5、注意:和adaphoto大佬所说的一致,TF卡做USB设备的时候一开始上电的时候不能使sd0不能挂载文件系统也就是不能注册到elm上,因为挂载到文件系统就不能挂载到USB的。所以在TF卡做USB设备的时候不执行sd_init()函数。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 读卡器
    +关注

    关注

    2

    文章

    409

    浏览量

    39314
  • SD卡
    +关注

    关注

    2

    文章

    556

    浏览量

    63719
  • QSPI接口
    +关注

    关注

    0

    文章

    14

    浏览量

    3328
  • w25Q64
    +关注

    关注

    1

    文章

    15

    浏览量

    2999
  • ART-Pi
    +关注

    关注

    0

    文章

    23

    浏览量

    1276
收藏 人收藏

    评论

    相关推荐

    ART-Pi Smart开发板开箱及爱之初次体验

    ART-Pi Smart 开发板初次尝鲜,ART-Pi Smart开箱及初次体验内置应用.
    的头像 发表于 05-03 16:25 4912次阅读
    <b class='flag-5'>ART-Pi</b> Smart开发板开箱及爱之初次体验

    电脑相关的读卡器

    移动磁盘”。但是,如果您取出存储,“可移动磁盘”将消失。)如果你使用另外一个阅读,这个问题不太可能发生。但是,它需要一个USB插座。提示:通过读卡器
    发表于 09-16 16:51

    基于USBSD读卡器设计

    你好,我想设计一个基于单片机的SD读卡器,我可以用USB接口与我的PC机接口。有没有参考设计?请分享,谢谢。 以上来自于百度翻译 以下为原文 Hello, I want to d
    发表于 06-19 14:05

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

    BL8810替换GL823K低BOM读卡器主控芯片方案,支持SD/TF ,性能稳定。BL8810搭配MA8601可以实现Typec转USB+SD
    发表于 10-23 10:51

    USB 2.0读卡器方案设计电路资料分享

    BL8810旺玖Prolific高度集成的单芯片解决方案设计的USB 2.0读卡器.提供USB2.0和SD之间的高速数据传输SDHC、MiniSD、Micro
    发表于 11-06 17:01

    Art_Pi学习笔记汇总

    1、Art-Pi学习笔记1:驱动SDIO和USB设备TF
    发表于 03-18 14:27

    ART-PI在MDK中使用SDIO设备的方法

    一、ENV使能SDIO1.1.在kconfig增加配置因为ART-PI的SDIO2连接的是wifi,所以这里我们使用SDIO1。1.2.ENV中使能SDIO1.3.使能文件系统1.4.使用SD设备
    发表于 04-11 10:07

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

    等待升级完成后退出。查看 ART-Pi 调试的指示灯变成蓝色。设备管理器能看到 J-LINK 的设备。3. 修改 ART-Pi 工程配置本
    发表于 04-11 10:10

    art-pibootloader进入到系统的时候非常慢是为什么

    我用 rt-studio 给art-pi 烧写工程,有时候经常会遇到有些工程在烧写之后,从bootloader进入系统的时候,非常的慢,要上十几秒才能进入,这是为啥?有谁遇到过同样的问题么?
    发表于 04-24 09:31

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

    之后,使用list_device命令发现挂载成功。然后先使用sd_init命令再使用ls命令就能查看TF卡里面的内容,接下了我又跟着做了USB设备作为
    发表于 06-23 10:42

    sd读卡器原理图

    sd读卡器原理图
    发表于 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
    发表于 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槽且支持全速
    发表于 11-11 09:19 1102次阅读

    MA8621带SD读卡器USB HUB方案设计电路

    。 MA8621是一项创新,它集成了USB 2.0集线SD读卡器的功能。读卡器符合
    发表于 11-11 16:55 2023次阅读
    MA8621带<b class='flag-5'>SD</b><b class='flag-5'>读卡器</b>的<b class='flag-5'>USB</b> HUB方案设计电路

    RT-Thread Studio驱动SD

    总结前言硬件平台:RT-Thread ART-Pi STM32H750XBH6开发板 H750开发板开发软件:RT-Thread Studio参考博客:RT-Thread Studio使用SDIO驱动SD
    发表于 12-27 19:13 20次下载
    RT-Thread Studio<b class='flag-5'>驱动</b><b class='flag-5'>SD</b><b class='flag-5'>卡</b>