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

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

3天内不再提示

HPM6750测评|体验极致的运行速度和开发速度

先楫半导体HPMicro 2022-07-24 16:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在HPM6750上使用RT-Thread驱动SD卡实现文件读写只需要三步:

配置FATFS和SDIO功能

编译项目代码

烧录二进制到开发板

PS:本篇内容特点——实操性强,异常简单,有手就行。

一、准备工作

1.1 准备好开发板和SD卡


开始本篇实验之前,需要准备一个MicroSD卡,我这里准备的是一个32G的铠侠蓝卡:

928c2e26-0a07-11ed-9ade-dac502259ad0.jpg

1.2 创建RT-Thread项目

首先,使用RT-Thread Studio创建名为hpm_sdio_test的项目:

92a89f66-0a07-11ed-9ade-dac502259ad0.png

注:如果已有RT-Thread项目,则可以跳过此步骤。

二、配置RT-Thread

这里仅以RT-Thread Studio为例,对RT-Thread进行配置。除此之外,使用RT-Thread的Env工具,在命令行环境下进行相关配置也是可以的。

2.1 打开FATFS和SDIO组件

创建项目后,打开RT-Thread Settings,开启FATFS和SDIO配置:

92b91f9e-0a07-11ed-9ade-dac502259ad0.jpg

可以看到,打开的组件,图标显示为彩色。这里的SDIO属于RT-Thead驱动框架的SDIO部分。

为了方便观察实验现象,这里最好再打开SDIO组件的调试日志:

92d56096-0a07-11ed-9ade-dac502259ad0.png

图中顶栏的几个部分,对于RT-Thread Studio创建的RT-Thread项目,通常而言:

内核栏中的属于内核组件配置,相关源码位于rt-thread子目录;

组件栏中的属于系统组件配置,相关源码位于rt-thread/components子目录;

软件包栏中的属于三方组件配置,相关源码默认不在项目中;在打开相应配置并保存后,才会下载到项目的packages子目录;

硬件栏中的属于BSP配置,相关源码通常在board子目录。

2.2 打开SDIO驱动


前面打开的仅是SDIO驱动框架,要使用SDIO功能,还需要打开HPM开发板的SDXC驱动:

92f876d0-0a07-11ed-9ade-dac502259ad0.png

修改完成,Ctrl+S保存修改。

三、编译、烧录、运行

3.1 编译项目代码

完成上面的配置工作后,Ctrl+B编译项目:

9325d774-0a07-11ed-9ade-dac502259ad0.png

编译完成后,可以在控制台看到Flash和RAM占用情况。

3.2 烧录程序

编译成功后,我们需要将生成的二进制程序代码文件烧录到开发板上。

开始测试之前,我们需要先将MicroSD卡插入开发板(RT-Thread目前还不支持SD卡热插拔):

934636c2-0a07-11ed-9ade-dac502259ad0.jpg

插入SD卡后,将开发板通过USB线连接到PC。

此时,我们可以看到,正面的SD卡指示灯已经亮起了:

935f423e-0a07-11ed-9ade-dac502259ad0.jpg

3.3 运行程序

接着,回到RT-Thread Studio,用Ctrl+Alt+D快捷键,将编译好的程序烧录到开发板上。

烧录完成后,我们就可以在串口终端看到——已经检查到sd卡了:

93668eb8-0a07-11ed-9ade-dac502259ad0.png

可以看到,RT-Thread版本信息已经打印出来了,同时看到了熟悉的msh提示符。

基于RT-Thread的项目默认情况下开启了msh,并且将UART0串口初始化为console输入输出。因此,我们可以在串口中断软件中,输入msh支持的命令,查看命令的输出。

四、在msh中操作SD卡

烧录完成后,我们就可以在RT-Thread的msh环境中愉快地操作SD卡了。本节我将在串口终端中演示——如何在HPM6750开发板上使用RT-Thread提供的文件系统、目录、文件操作相关命令。

首先,我们可以通过help命令查看此时msh中支持哪些命令:

938b0b6c-0a07-11ed-9ade-dac502259ad0.png

可以看到,这里有很多命令,我们接下将会使用到的有:

文件操作命令——ls/cp/mv/cat/rm

可以写文件的命令——echo

目录操作命令——cd/pwd/mkdir

文件系统操作命名——mkfs/mount/umount/df

使用过Linux的朋友应该会对上面这些命令感到熟悉。

接下来,我将会在msh中演示——如何通过这些命令对SD卡进行一些操作。

4.1 查看块设备

我们可以在串口终端内使用list_device命令查看设备:

93a61d26-0a07-11ed-9ade-dac502259ad0.png

此时,我们可以看到已经有了一个名为“sd0”的块设备。

4.2 格式化SD卡

初次使用的SD卡,可能没有文件系统,或者文件系统不是FAT格式的,需要将SD卡格式化为FAT文件系统,RT-Thread后续才能挂载成功。

注意:格式化操作会导致SD卡上已有数据全部丢失;因此,在执行格式化操作前,请确认SD卡上没有重要数据,或者你已对SD卡上的重要数据进行了备份。

接下来,我们可以通过mkfs命令对SD卡进行格式化:

93c51fe6-0a07-11ed-9ade-dac502259ad0.png

mkfs执行会持续一段时间,请耐心等待(具体因不同SD卡容量和速度等级而异,我的32GB卡消耗了几秒钟)。

4.3 挂载文件系统

接下来,我们可以在串口终端内使用mount命令将SD卡挂载到根目录:

93d5feba-0a07-11ed-9ade-dac502259ad0.png

这里,我先使用了mount -h查看了mount命令的用法。

另外需要注意的是,fstype参数使用的是elm(这里的elm实际就是FATFS)。

4.4 简单的文件读写测试


前面提到echo命令比较特殊,可以写文件,接下来使用echo写文件,cat读文件,ls查看文件:

93ee583e-0a07-11ed-9ade-dac502259ad0.png

这里使用了ls、echo、cat命令,进行了文件读写操作。

4.5 简单的目录操作测试

接下来,进行简单的目录操作演示。

940179f0-0a07-11ed-9ade-dac502259ad0.png

这里首先使用了pwd查看当前工作目录,然后演示了ls、mkdir、cd命令;

如果你是对RT-Thread了解不多的朋友,看到这里可能会非常惊奇——在一个可以运行在单片机RTOS上,居然可以这么方便的进行文件系统、目录、文件操作。

五、业务代码中使用SD卡

前面都是使用命令进行相关操作的,实际项目中往往需要在业务代码中使用前面的那些功能,包括文件系统、目录、文件操作。

5.1 使用代码进行相关操作

所谓“授人以鱼不如授人以渔”,这里不准备展开介绍前面所有命令行操作如何用代码实现,只介绍如何找到前面那些操作的源码实现。总体来说,主要有两个方法:

grep大法

grep结合正则表达式进行搜索

使用其他你熟悉的工具也是可以的

RTFSC(read the f**king source code)

根据搜索到的位置打开文件并阅读源码

对,会这两招就可以了。

下面以搜索mount命令的实现代码为例进行演示。我们知道RT-Thread的msh命令是通过MSH_开头的宏注册到命令列表中的。因此可以搜索:

941e7a00-0a07-11ed-9ade-dac502259ad0.jpg

接下来,就可以打开./rt-thread/components/finsh/msh_file.c文件,跳转到526进行查看了:

94292518-0a07-11ed-9ade-dac502259ad0.jpg

可以看到这里调用了dfs_munt实现了文件系统挂载功能。

六、完善细节

绝大部分文件系统都有文件的创建、修改时间信息,FATFS也不例外。因此,为了能够让SD卡上文件具有正确的创建、修改时间信息正常,建议使用SD卡的同时启用RTC(Real Time Clock)以及NTP(Network Time Protocol)对时功能。本节主要介绍如何开启RT-Thread的RTC和NTP对时功能。

6.1 使能RTC

在RT-Thread系统中,RTC的实现有两种,一种是纯软件方式,另一种是硬件方式。

软件方式的RTC,RT-Thread内核已经有了完整的实现,一般用于没有硬件RTC的设备上(或者硬件RTC驱动还没有支持的情况下)。RT-Thread的硬件RTC,和其他硬件功能类似,有RTC驱动框架和RTC硬件驱动两部分。其中,RTC驱动框架已有RT-Thread内核实现,RTC硬件驱动由厂商实现(一般通过BSP或者CSP提供出来)。

软件模拟RTC以及RTC驱动框架的配置项可以通过RT-Thread Settings进行设置:

943d16b8-0a07-11ed-9ade-dac502259ad0.png

HPM6750的BSP中已经实现了RTC硬件驱动,我们可以在RT-Thread Settings中设置硬件RTC功能:

945dcd86-0a07-11ed-9ade-dac502259ad0.png

6.2 使能网络和NTP——实现联网自动对时

使能WiFi联网,具体操作参考我此前的帖子:http://bbs.eeworld.com.cn/thread-1206656-1-1.html 或参考 (HPM6750 测评 | 不写一行代码,两分钟实现WiFi联网)

RT-Thread的netutils软件包中包含了NTP功能,使能NTP功能可以参考帖子中使能netutils软件包中ifconfig相关的介绍。

七、本篇小结


可以看到,在基于RT-Thread系统的项目中,我们没有添加任何代码,就可以实现对HPM6750开发板上的SD卡进行文件系统、目录、文件相关操作。这是因为RT-Thread系统本身已经积累了大量优秀开发者的工作成果,其中包括SDIO驱动框架、FATFS支持、芯片厂的SDXC驱动。所谓的“站在巨人的肩膀上”,大概就是这种体验吧。

本篇就到这里了,感谢你的阅读,下次再会。

(本文摘选自EEWORLD@xusiwei1236)

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

    关注

    5186

    文章

    20149

    浏览量

    328851
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    程序运行速度很慢如何优化?

    提升时钟频率: 在MCU允许的范围内适当提高主频。 使用硬件加速: 利用MCU自带的硬件加速器(如CRC计算单元、加密引擎、DMA控制器)。 使用DMA: 将数据搬运(内存<->外设,内存<->内存)交给DMA,释放CPU资源。 优化算法: 选择时间复杂度更低的算法。避免不必要的循环和重复计算。 减少函数调用开销: 对于频繁调用的小函数,考虑内联(inline)。 优化数据结构: 使用更高效的数据结构(如用查表代替复杂计算)。对齐数据访问。 编译器优化: 启用合适的优化等级(如-O2, -O3)。注意调试时可能需要降低优化。 检查中断频率: 过高频率的中断会占用大量CPU时间。优化ISR代码,使其尽可能短小精悍。能合并的中断尽量合并。 使用RTOS特性: 如果使用了RTOS,确保任务优先级设置合理,避免高优先级任务长时间阻塞低优先级任务。利用信号量、消息队列等高效通信机制。
    发表于 11-17 06:12

    hpm的vscode开发环境搭建openocd烧录问题求解

    最近尝试搭建基于vscode的hpm芯片开发环境,遇到一些问题,求大佬们帮忙看看。 使用hpm6e00evk开发板sdk_env_1.10.0,cmake、ninja、openocd和
    发表于 09-09 09:55

    速度与激情的碰撞:直线电机如何实现超高速运行

    在工业自动化领域,生产效率往往与运动速度直接挂钩。无论是半导体芯片的制造,还是锂电池的极耳切割,都对运动系统的速度提出了近乎苛刻的要求。传统“旋转电机+滚珠丝杠”的传动方案受其机械结构的先天限制,在
    的头像 发表于 08-29 09:48 368次阅读

    HPM monitor studio 只能在 hpm芯片+hpm_sdk 的组合下才能用吗?

    使用 hpm6200evk开发板,但未使用hpm_sdk。 然后编译的固件elf无法在hpm monitor studio解析成功。所以说必须要使用
    发表于 08-28 09:36

    如何使用CYW920829M2EVK-02 将 UART 速度设置为 8Mbps?

    我们正在测试CYW920829M2EVK的uart速度。正如 CYW20829 的数据表所述,uart 的运行速度最高可达 8 Mbps。 我们只能实现高达 3Mbps 的 uart 速度。有没有什么方法可以配置 uart 来实
    发表于 07-17 08:17

    同一水平的 RISC-V 架构的 MCU,和 ARM 架构的 MCU 相比,运行速度如何?

    ARM 架构与 RISC-V 架构的 MCU 在同一性能水平下的运行速度对比,需从架构设计原点、指令集特性及实际测试数据展开剖析。以 ARM Cortex-M33 这类 ARMv8M 架构核心与采用
    的头像 发表于 07-02 10:29 1216次阅读
    同一水平的 RISC-V 架构的 MCU,和 ARM 架构的 MCU 相比,<b class='flag-5'>运行速度</b>如何?

    RVCT编译器是否比GNU的编译器的代码执行速度更快?

    ,是rvct3.1还是rvct4.0?如何把rvct编译器集成到ide中? 2、RVCT编译器是否比GNU的编译器的代码执行速度更快?
    发表于 05-08 07:49

    重磅更新 | 先楫半导体HPM_SDK v1.9.0 发布

    版本更新概况[New]增加HPM6P00系列MCU以及hpm6p00evk支持[New]增加了开发板已知问题说明[Update]将全系列开发板VCore电压调节至1.275V,
    的头像 发表于 04-02 08:31 825次阅读
    重磅更新 | 先楫半导体<b class='flag-5'>HPM</b>_SDK v1.9.0 发布

    HPM6E80 cherryusb_winusb10例程速度测试

    Hi,大家好,我最近用hpm6e80评估板做winusb的速度测试,发现usb的读写速度只有大约的 3.2MB/s,比普通USB速度低了很多,后面我用USB Packet Viewer
    发表于 03-30 15:03

    英国真尚有非接触测速传感器LP-DS100传送带速度测量

    测量传送带速度是许多工业流程的一个重要方面。传送带广泛应用于采矿、制造和运输等行业,其运行速度会直接影响这些流程的效率和生产率,因此精确测量传送带的速度至关重要。精确的传送带速度测量可
    的头像 发表于 02-26 17:41 673次阅读
    英国真尚有非接触测速传感器LP-DS100传送带<b class='flag-5'>速度</b>测量

    高速链路设计难?利用HPM6750双千兆以太网透传实现LED大屏实时控制

    HPM6750双千兆以太网透传方案演示LED大屏显示系统利用发光二极管构成的点阵模块或像素单元组成大面积显示屏显示字符、图像等信息,具有低功耗、低成本、高亮度、长寿命、宽视角等优点,近年来随着
    的头像 发表于 02-08 13:45 1644次阅读
    高速链路设计难?利用<b class='flag-5'>HPM6750</b>双千兆以太网透传实现LED大屏实时控制

    开发者分享 | 适用于HPM的RustSBI实现

    HPMicro的MCU一直以高性能著称,之前也一直有想在HPM的MCU上运行Linux的想法。直到看见Linux6.10中支持了RISC-V架构在S-mode中运行nommu内核*,才下定决心开始在
    的头像 发表于 02-08 13:44 1078次阅读
    <b class='flag-5'>开发</b>者分享 | 适用于<b class='flag-5'>HPM</b>的RustSBI实现

    基于HPM_SDK_ENV开发应用程序的升级处理

    基于HPM_SDK_ENV开发应用程序的方式HPM_SDK_ENV是先楫半导体MCU的Windows集成开发环境,其包含HPM_SDK,工具
    的头像 发表于 02-08 13:38 1439次阅读
    基于<b class='flag-5'>HPM</b>_SDK_ENV<b class='flag-5'>开发</b>应用程序的升级处理

    光纤宽带的速度测试方法

    的问题。 1. 理解光纤宽带速度 在进行速度测试之前,了解光纤宽带的速度参数是必要的。光纤宽带的速度通常以Mbps(兆比特每秒)或Gbps(吉比特每秒)来衡量。
    的头像 发表于 01-02 09:41 4565次阅读

    自己做的hpm5321和6750板子怎么都没有1.1的输出呢?

    新手硬件开发求分析 。 不知道是layout的关系还是什么原因呢,主要IC内部dcdc部分跟其他引脚配置没关系吧,对比了官方开发板和野火的开发版没什么差,难道电容规格会影响吗? 5321原理图,3.3上电正常,无1.1v输出
    发表于 12-14 11:48