RT-Thread FAL 组件使用

RT-Thread FAL 组件使用

FAL 组件开源项目地址:https://gitee.com/RT-Thread-Mirror/fal/tree/master

FAL 组件是 RT-Thread 提供的一个操作 Flash 的抽象应用,与 RT-Thread 无依赖,可以裸机使用,EasyFlash 就是在此基础上运行的。

以下介绍如何通过 RT-Thread Studio 来使用 FAL 组件。

首先在设置文件中打开 FAL 组件,并勾选“ FAL 使用 SFUD 驱动程序”,这样就可以使用 SFUD 来帮助驱动 Flash 芯片。

image.png

打开 board.h ,找到下述段落

/*-------------------------- ON_CHIP_FLASH CONFIG BEGIN --------------------------*/

/** if you want to use on chip flash you can use the following instructions.
  *
  * STEP 1 define macro related to the on chip flash
  *                 such as    BSP_USING_ON_CHIP_FLASH
  * 
  * STEP 2, modify your stm32xxxx_hal_config.h file to support on chip flash peripherals. define macro related to the peripherals
  *                 such as     #define HAL_FLASH_MODULE_ENABLED
  * 
  */

#define BSP_USING_ON_CHIP_FLASH

/*-------------------------- ON_CHIP_FLASH CONFIG END --------------------------*/

按照提示:

step1,在 board.h 里定义 #define BSP_USING_ON_CHIP_FLASH
step2,在 stm32xxxx_hal_config.h 里定义 #define HAL_FLASH_MODULE_ENABLED
最基本的配置好了,如何使用 FAL 组件呢?
这就涉及到了三个重要文件,用于定义设备表和分区表。

FAL 组件的提供了三个示例文件,fal_cfg.h,fal_flash_sfud_port.c,fal_flash_stm32f2_port.c,想要使用 FAL,就必须更改上述文件构建自己的分区表。

片上 Flash
fal_flash_stm32f2_port.c 主要是定义片上 Flash 的,这个 RT-Thread 提供了相应的驱动,在 ./rt-thread/bsp/stm32/libraries/HAL_Drivers/drv_flash 里都有,我使用的是 drv_flash_f1.c 。

外部 Flash
fal_flash_sfud_port.c 是用于定义外部 Flash,许多人就是在这里无法配置成功。以下是我踩过的一些坑。

不要相信 FAL_USING_NOR_FLASH_DEV_NAME 这个宏定义,因为 FAL 组件提供的示例中使用该宏定义初始化的,所有我们一般都会默认地修改宏定义的内容为自己的芯片型号,但往往就不能初始化成功。不如直接使用,也就是在下图两个框内处使用。
image.png

当然,使用该设备之前,需要用 RTT 的 SPI 设备框架将 Flash 设备挂在到 SPI 总线上,参考 RT-Thread SPI 设备使用 。

// 注册 spi 设备
static int rt_hw_spi_flash_init(void)
{
    __HAL_RCC_GPIOC_CLK_ENABLE();
    rt_hw_spi_device_attach("spi1", "spi10", GPIOC, GPIO_PIN_0);
    if (RT_NULL == rt_sfud_flash_probe("W25Q64", "spi10"))
    {
        return -RT_ERROR;
    };
    return RT_EOK;
}
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);

设备表 分区表
设备表和分区表是在 fal_cfg.h 里定义的。

设备表

/* ===================== Flash device Configuration ========================= */
extern const struct fal_flash_dev stm32_onchip_flash;
extern struct fal_flash_dev nor_flash0;

/* flash device table */
#define FAL_FLASH_DEV_TABLE                                          \
{                                                                    \
    &stm32_onchip_flash,                                           \
    &nor_flash0,                                                     \
}

设备表的里的设备名称必须与之前定义的一致,否则会报错。设备名称可以在前面两个文件里找到。

分区表

/* ====================== Partition Configuration ========================== */
#ifdef FAL_PART_HAS_TABLE_CFG
/* partition table */
#define FAL_PART_TABLE                                                               \
{                                                                                    \
    {FAL_PART_MAGIC_WORD,        "bl",     "onchip_flash",   0,         64*1024,        0}, \
    {FAL_PART_MAGIC_WORD,       "app",     "onchip_flash",   64*1024,   510*1024,       0}, \
    {FAL_PART_MAGIC_WORD, "easyflash",     "W25Q64",         0,         1024*1024,      0}, \
    {FAL_PART_MAGIC_WORD,  "download",     "W25Q64",         1024*1024, 2*1024*1024,    0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */

分区表定义可参考下图,我们主要关注的是后面 4 部分,

分区表名称不能重复
设备名称必须与设备表里定义设备的名称一致(.name参数)
分区表相对设备的起始地址
该分区表的大小,以字节为单位。
image.png

片上系统的分区表大小不一定是以字节为单位,这是因为 board.h 里的定义导致的,参考下图,以 1KB 为单位。

image.png

为了一致性,可以将 STM32_FLASH_SIZE 定义为 ((512 * 1024)) 。

image.png

好了,下载可以下载到板子上,输入 fal probe 即可看见分区表信息。

image.png

最终在 main.c 里调用 fal_init() 初始化即可。

希望有所帮助。

作者:tang_jia
链接:https://www.jianshu.com/p/b3fe425082fa
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RT-Thread作品秀】基于RT-Thread的远程气压监控系统作者:靳春幸 概述远程温气压监控系统是基于ART-PI开发板开发,该系统远程传输基于AP6212模块的WiFi。该系统可以替代人为采集气压值,可以解决极度环境下人为采集的风险。 开发环境硬件:ART-Pi STM32H750 RT-Thread版本:4.0.3 开发工具及版本:RT-Thread Studio 2.0.0 RT-Thread使用情况概述内核部分:调度器,信号量,消息队列 组件部分:SAL 套接字抽象层,LWIP,WiFi框架 软件包部分:Webclient,pahomqtt,Onenet,cJson 硬件框架主控板使用的是 ART_Pi。 温度传感器使用的是 LSP22HH,LSP22HH 是一款兼容 IIC 和 SPI 接口的芯片,能够采集温度和气压值,返里使用使用 SPI 不主控板迕行通信。 Wifi模块使用的是开发板自带的AP6212。 软件框架说明本设计使用 RT_Thread 迕行开发,主要设计有2个执行线程,分别为 Main 线程、onenet上传线程、LPS22HH 线程。 总的软件框图如下图所示。 软件模块说明Main线程:用于初始化WiFi自动连接功能,初始化onenet组件功能,初始化onenet自动上报线程,LED周期性反转 Onenet线程:用于自动周期性上报气压值。 LPS22HH线程:用于周期性获取传感器数据 演示效果视频地址: 代码地址在附件比赛感悟非常荣幸能参加本次大赛,期间使用官方提供的ART-PI开发板进行了很多实验。包括TouchGFX实验,sram实验,fal实验,easyflash实验等。官方的板子和RTT平台给我提供了很多方便,让我学习了很多。但是由于个人工作原因,未能尽力完好的做好这个比赛,很是遗憾。再次感谢官方给的机会。
概述随着物联网应用的不断发展,传统的传输技术在各个物联网行业应用方面渐渐不能满足我们的需求,传统的局域网技术,如2.4GHz的WiFi,蓝牙、Zigbee等,以及传统广域网技术2G/3G/4G等无线技术,不能同时兼顾远距离和低功耗。直到在低功耗广域网(Low Power Wide Area Network, LPWAN)技术出现后,能在保证更远距离的通信传输的同时,最大限度的降低功耗,节约传输成本。 本应用使用ART-PI开发板,NUCLEO-L452开发板以及本人自制的扩展板,组成LORA采集端和接收转发端,即使在条件恶略的环境下也能采集数据并通过LORA传送接收并转发至云平台. 开发环境硬件:ART-PI开发板NUCLEO-L452开发板 LORA采集扩展板(安信可Ra-02,DHT11) LORA接收扩展板(安信可Ra-02,W5500,sp485) RT-Thread版本:RT-Thread4.03(ART-PI开发板)RT-Thread4.02(NUCLEO-L452开发板) 开发工具及版本:RT-ThreadStudio V2.0 STM32CuBeMx V6.1.0 RT-Thread使用情况概述内核部分:主要使用了线程管理 时钟管理 组件部分:FinSH控制台,netdev网卡,SAL套接字抽象层,ulog日志 软件包部分:cjson webclient,pahomqtt,fal,wiznet,dhtxx 硬件框架采集端:简单的LORA模组,通过SPI跟板卡通信,以及一个可控LDO和AHT10和BH1750,以LDO控制AHT10和BH1750以达到低功耗的效果. 接收端:一个LORA模组,一个W5500芯片,SPI通信,以及一个SP485. 主要部分就是LORA模组以及W5500,本设计使用立创EDA设计,W5500参考自立创官方团队. 软件框架说明ART-PINUCLEO-L452软件模块说明ART-PI(接收端),上电自动初始化LORA和W5500,等待W5500连接上网络,这里通过判断网卡的状态,当link_up状态后,开始连接mqtt服务器,就可以把LORA接受的数据通过MQTT发送至平台. NUCLEO-L452(采集端),上电初始化软件IIC,直接采集同一总线下AHT10和BH1750的数据,并通过LORA直接发送出去.(备注:因时间关系,采集端的低功耗并没有做,年前估计没时间完善了,以后有时间继续完善) 演示效果视频展示: 比赛感悟这次比赛又学到了不少东西,最主要的就是I2C总线设备和netdev 网卡,刚开始板载WIFI使用时无法使用W5500,因为默认网卡的原因,后来查询RT-Thread 文档中心,看看API和示例,轻松解决.还有就是使用I2C总线设备,刚开始一直想要使用硬件IIC和软件包去驱动AHT10和BH1750,后来发现软件IIC加PIN设备轻松解决,对着文档中心的例子,轻松举一反三出BH1750的程序.所以感觉RT-Thread的文档是真的全乎,所有自己解决不了的东西文档中心都有.但很遗憾的是这次由于出差的原因并没能很完美的展现出来作品,其中ART-PI扩展板上的485并没写到程序中,IWIFI也没应用到(现在是以太网),采集端的低功耗也没有做,年后一定把晚上出来!
RT-Thread作品秀】通用型数据采集设备作者:鱼柯 概述(说明应用产生的背景、实现功能)在一些低频采集设备中,典型的运行策略是,采集数据,上传数据,关闭外设进入睡眠状态;但是,在运行过程中,需要根据实际需求,更改采集频率,连接不同的设备,如果每次通过修改代码解决,通用性就很难保证,这个项目将一些uart型的传感器进行归类,通过文件设置数据交互过程中的命令,解析方式等,可以适配大多数的uart型传感器;同时,对一些网络摄像头也以同样的方式进行处理; 实现数据采集调度配置,数据采集,数据上传,图片采集,图片上传, 配置文件解析,固件远程更新;由于contab配置文件中的event使用的是MSH_CMD_EXPRT宏导出的命令。所以,它也支持系统需要定时执行的相对时间间隔需要变化的任务,比如:12:00. 13:10, 15:35, 18:23分别执行一次任务; 开发环境(所采用的软、硬件方案)硬件:art-pi, INDUSTRY-IO, 微气象仪, 网络摄像头 RT-Thread版本:rt-thread 4.0.3 开发工具及版本:ubuntu 18.04,gcc-arm-none-eabi-6_2-2016q4,scons v3.0.1,python 3.6.9,pkgs RT-Thread使用情况概述(简要总结下应用中RT-Thread使用情况:内核部分、组件部分、软件包部分、内核、其他)内核部分Inter-thread communication Event Semaphore mutex memory management device object 组件部分Finsh DFS (device virtual file system) serial device, mtd nor flash device, gpio device, ntp rtc device, sd/mmc device, spi device, serial flash universal driver (device driver) posix layer and c stand library SAL (socket abstraction layer) ping, ifconfig, netstat, netdev (network interface) LwIP 2.0.2 Ymodem ulog 软件包部分agile_console-v1.0.0 fal-v0.5.0 ota_downloader-v1.0.0 agile_telnet-v2.0.0 littlefs-v2.2.1 SignalLed-latest cJSON-v1.0.2 netutils-v1.2.0 vi-latest EasyFlash-v4.1.0 webclient-v2.1.1 硬件框架(概述应用所采用的硬件方案框图,并对核心部分做介绍)软件框架说明(介绍应用所采用的软件方案框图、流程图等,并加以解说)软件模块说明(介绍应用软件关键部分的逻辑、采用的实现方式等)类似 linux定时任务contab解析相关json配置文件,构建设备运行数据树: "contab": [{"event":"misc_check","time":"0 18"},{"event":"img_cap_start","time":"20 7,9,14"},{"event":"app_image_upload","time":"20 7,9,14"},{"event":"sensor_acq_start","time":"5,10,15,20,25,30,35,40,45,50,55 *"},{"event":"app_data_upload","time":"5,10,15,20,25,30,35,40,45,50,55 *"}] 事件执行分钟: 表示xx:5, xx:25, xx:30, xx:36, xx:45, xx:54 事件执行小时:*通配符,表示1-24小时 上面参数表示:每个小时的5,25,30,45,54分,执行img_upload_invl事件; 上传数据每次采集数据后,将数据存在本地一个缓存文件中,按照采集时间从前到后写入;同时会生成一个读取位置的缓存文件指示,下一次从哪个文件的那一行读取数据进行上传,上传成功后,更新读取位置的缓存;如20201217,227, 表示从文件20201217.txt的227个字符后读取一行数据进行上传,避免文件过大引起设备死机; 上传图片每次拍照时,将拍照成功的照片名及端口追加记录到一个缓存文件中,每次从缓存文件中,读取需要上传的图片构造form-data上传图片;如4,/sd/1608167012_4.jpg;如果上传成功,则删
RT-Thread作品秀】智能天气小站作者:AlgoIdeas 概述嵌入式开发需要多动手,多实践才能不断取得成长和进步。第一次接触新的知识,难免会遇到挫折和困难,只要有足够的耐心和不断探索的信心,并不断学习和实践,同时有所思考,就会有收获。智能天气小站是一个很好的切入点,同时自己作为一名STM32新手,第一次接触RT-Thread、也第一次接触TouchGFX,感受颇多,收获颇丰。 开发环境硬件:ART-Pi RT-Thread版本:4.0.3 开发工具及版本:RT-ThreadStudio 2.0 ART-Pi SDK版本: SDK v1.0.1 RT-Thread使用情况概述项目主要基于ART-Pi SDK中的art_pi_factory例程,并在例程基础上增加其他软件基础组件。 内核采用RT-Thread原生内核,版本RT-Thread v4.0.3 组件列表: rt_ota_lib – 升级相关 touchgfx_lib – TouchGFX相关界面实现 wlan_wiced_lib – WLAN库 涉及软件包: EasyFlash-v4.1.0 -- 轻量级物联网存储库 adbd-v1.1.1 – ADB远程调试 btstack-v0.0.1 – 蓝牙协议栈 cJSON-v1.0.2 – JSON库 dht11-latest – DHT11温度传感器库 fal-v0.5.0 - gt9147-latest -- 触摸驱动 littlefs-v2.0.5 -- lwgps-latest -- 轻量级GPS解析库 netutils-v1.2.0 – 网络相关工具 webclient-v2.1.2 – WEB客户端 webnet-v2.0.2 – web接口相关实现 注:gps和presssensor相关包或模块可供二次开发 硬件框架主控芯片:STM32H750XB (ART-Pi开发板) 图形框架:TouchGFX SD卡1张: 8G 温湿度传感器DHT11:使用GPIO获取数据 网络:板端自带的AP6212A WIFI+蓝牙一体芯片 4.3寸电容屏:使用I2C总线驱动触摸(触摸芯片GT9147),LCD使用RGB888格式 时间的获取:例程自带的RTC+NTP自动网络对时 天气的获取:通过http客户端的方式获取网络开放API接口的天气数据,目前主要从心知天气(https://www.seniverse.com/api)获取, 后续二次开发,也可采用其他网站获取,如openweathermap(https://api.openweathermap.org/data/2.5/)等 软件框架说明软件如果需要通过网络获取天气信息,需要先进行联网,目前支持蓝牙配网(具体请参考ART-Pi官方教程),目前仅支持本地预先设置好的地区的温度的获取,后续可以扩展UI设计,或通过GPS定位来获取位置信息。 同时,默认支持DHT11数字温度传感器获取本地的实时温湿度数据,并通过GUI进行显示。软件主体框架如下图所示: 系统设置界面,支持将温湿度数据存储为日志文件到SD卡(后续可以二次开发,读取历史文件并直接在UI界面显示历史数据),可以开启或关闭该功能,同时支持自动关屏设置。 软件模块说明UI设计GUI采用TouchGFX来设计,目前采用的版本是TouchGFX 4.15.0,主要分为3个主要界面:主页、系统设置和历史温度数据分析,分别如下图图1、图2和图3所示。 TouchGFX官方介绍 TouchGFX 4.13 版本是继TouchGFX 4.12 之后的又一重要版本。4.13版具备了将动画推到60FPS的功能,还增加了可缓存容器、不完全帧缓冲区以及新的L8压缩格式等性能,这表明了 ToughGFX 不断追求优化性能和持续迭代的匠心。4.13版本还解决了另一个问题:嵌入式系统开发人员的用户界面可访问性。通过将TouchGFX Generator集成到 STM32CubeMX 中,经验较少的工程师在使用 TouchGFX 4.13 时,可以通过 STM32CubeMX 这个广为流行的 ST 实用软件程序快速启动项目。这样做的目的在于降低开发者入门门槛,让专业人士和爱好者都能受益于这个交互式的高效解决方案。 天气数据获取通过DHT11数字温湿度传感器获取; 通过注册心知天气(https://www.seniverse.com/),采用其Weather API,并配合web相关API获取当地的天气; 演示效果视频演示: 界面设计效果: 图1 主页 图2 系统设置 图3 温度历史数据与分析 比赛感悟 一次偶然翻看网页的机会,让我看到了RT-Thread x STM32全连接创意创客大赛,于是顺手点了进去,并于第二天才最终确认参加比赛。在这近

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值