Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
FAL
littlefs
国民技术_N32G45x
N32G45x SFUD+FAL+Littlefs
发布于 2022-03-31 14:56:28 浏览:1366
订阅该版
[tocm] ### N32G45x SFUD+FAL+Littlefs 以前在STM32L4上有试过Littlefs,当时忘记记录了,那个时候FAL还没有搞到内核里面。找一了下老的文章,竟然忘记记录Littlefs相关的东西了,后来想了一下,好像当时官方就出过相关的文档,所以当时没有记录下来。 ``` littlefs 简介 littlefs 是 ARM 官方推出的,专为嵌入式系统设计的文件系统,相比传统的文件系统,littlefs 具有以下优点: 1、自带擦写均衡 2、支持掉电保护 3、占用的 RAM/ROM 少 littlefs 自带的擦写均衡和掉电保护使开发者可以放心的将文件系统挂载到 nor flash 上。 ``` 参考文献: 1、[**在 STM32L4 上应用 littlefs 文件系统**](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/application-note/components/dfs/an0027-littlefs.md) 2、[RT-Thread Stduio中使用sfud+fal+easyflash](https://club.rt-thread.org/ask/question/423771.html) 3、[基于RTT系统的littlefs文件系统移植说明(STM32片内FLASH)](https://blog.csdn.net/tigerots/article/details/104198901) 4、[rtt使用littleFS片内flash 文件系统问题](https://www.cnblogs.com/arthurly/p/14505155.html) 5、[RT-Thread--外部 flash 挂载 littlefs 文件系统](https://blog.csdn.net/tyustli/article/details/105821271?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6.topblog&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6.topblog&utm_relevant_index=13) 本次是在MDK里面搞的,按上面的文章提示,必定会有FAL的添加上,出现编译错误,自行复制文件是肯定的啦,不然的话,那个cfg.h的目录就要加到包含目录里面。 **一、搞定SPI接收问题** 操作步骤也是一项一项来的,首先是那个SPI驱动的问题,解决掉数据收发问题先,drv_spi.c这个文件里面的函数,接收有问题,先替换一下,当然,函数有优化的空间。 ``` //垃圾代码,尽可能不要用到项目上,要自行优化 static rt_uint32_t spixfer(struct rt_spi_device *device, struct rt_spi_message *message) { rt_size_t message_length; rt_size_t i = 0; rt_uint8_t *recv_buf; const rt_uint8_t *send_buf; RT_ASSERT(device != RT_NULL); RT_ASSERT(device->bus != RT_NULL); RT_ASSERT(device->bus->parent.user_data != RT_NULL); RT_ASSERT(message != RT_NULL); struct n32_spi *spi_drv = rt_container_of(device->bus, struct n32_spi, spi_bus); struct n32_hw_spi_cs *cs = device->parent.user_data; SPI_Module *spi_handle = spi_drv->config->module; if (message->cs_take && !(device->config.mode & RT_SPI_NO_CS)) { if (device->config.mode & RT_SPI_CS_HIGH) GPIO_SetBits(cs->module, cs->pin); else GPIO_ResetBits(cs->module, cs->pin); } message_length = message->length; recv_buf = message->recv_buf; send_buf = message->send_buf; /* start once data exchange in DMA mode */ if (message->send_buf && message->recv_buf) { LOG_D("%s:%d", __FUNCTION__, __LINE__); } else if (message->send_buf) { while (message_length--) { while (SPI_I2S_GetStatus(spi_handle, SPI_I2S_TE_FLAG) == RESET); SPI_I2S_TransmitData(spi_handle, send_buf[i++]); while (SPI_I2S_GetStatus(spi_handle, SPI_I2S_RNE_FLAG) == RESET); SPI_I2S_ReceiveData(spi_handle); } } else { while (message_length--) { while (SPI_I2S_GetStatus(spi_handle, SPI_I2S_TE_FLAG) == RESET); SPI_I2S_TransmitData(spi_handle, 0xff); while (SPI_I2S_GetStatus(spi_handle, SPI_I2S_RNE_FLAG) == RESET); recv_buf[i++] = (rt_uint8_t)SPI_I2S_ReceiveData(spi_handle); } } if (message->cs_release && !(device->config.mode & RT_SPI_NO_CS)) { if (device->config.mode & RT_SPI_CS_HIGH) GPIO_ResetBits(cs->module, cs->pin); else GPIO_SetBits(cs->module, cs->pin); } return message->length; } ``` **二、开SFUD** 在env里面直接点上,编译下载,测试,一条龙,用于直接验证SPI驱动好不好使,这里不多说了,效果图可以参考一下这个文章[N32G45x MDK下使用出现的问题【解决SPI数据收发问题】](https://club.rt-thread.org/ask/article/3571.html) **三、开FAL支持** 说是FAL移动了位置,放到了内核里,也就是说,不用再下载FAL,源码直接就有了。应该也是适配好了的吧?我觉得也是,直接上。如果不出意外的话,这里进行编译时100%会报错,是的,还是老配方,那个fal_cfg.h文件没有找到。别慌,肯定有,前面的文章有说,在那个示例文件夹里,直接到复制出来放到board目录下,重新生成工程就可以了。只要复制一个文件就可以解决了编译的问题,当然,那个片上的flash,先给它干掉先,以后再加。 ``` //fal_cfg.h里面的内容 #define NOR_FLASH_DEV_NAME "norflash0" /* ===================== Flash device Configuration ========================= */ //extern const struct fal_flash_dev stm32f2_onchip_flash; extern struct fal_flash_dev nor_flash0; /* flash device table */ #define FAL_FLASH_DEV_TABLE \ { \ &nor_flash0, \ } /* ====================== Partition Configuration ========================== */ #ifdef FAL_PART_HAS_TABLE_CFG /* partition table */ #define FAL_PART_TABLE \ { \ {FAL_PART_MAGIC_WORD, "easyflash", NOR_FLASH_DEV_NAME, 0, 1024*1024, 0}, \ {FAL_PART_MAGIC_WORD, "download", NOR_FLASH_DEV_NAME, 1024*1024, 1024*1024, 0}, \ } #endif /* FAL_PART_HAS_TABLE_CFG */ #endif /* _FAL_CFG_H_ */ ``` 这下编译不会出错了,更开心的是,程序运行之后,啥也没有。为啥,没有初始化呗! ``` /* 添加 fal 头文件 */ #include
// 在main里 初始化 fal fal_init(); ``` 如果不出意外的话,你的分区表都打印出来了。 **三、添加Littlefs** 这个也是做这次记录的主要原因,由于以前弄过,总以为不会有什么问题的,官方都有过文档,但是前几天看到网上还是有小伙伴出现问题,于是本人也试试,看一下有没有什么问题呢。【按网上的文章搞一通,发现没有遇到问题,有点尴尬,这里就记录一下,过程,省得来回找资料】 在env中点上Littlefs这个组件,还挺难找的哈?看这里,把-1改成100,我也不知道为什么,网上的文章都这么搞的。写到这里,想到了网上的搞笑视频,别人的啥啥啥,我的啥啥啥,加上个配音,还挺逗的,我们不搞学术,也没空搞,先跑起来再说。 ![image.png](https://oss-club.rt-thread.org/uploads/20220331/d32f36563f51391f509378d47b674bd7.png) ![image.png](https://oss-club.rt-thread.org/uploads/20220331/5ad9b09ae5784a1688b4214e089402d4.png) 记得要保存呀!然后一路退出配置界面,使用pkgs --upd下载组件,使用scons --target=mdk5生成工程。 然后,打开工程,直接编译,看看有错没?不出意外的话,直接通过。【尴尬中】 可能遇到的问题就是,怎么用它呢?上面的文章里面的代码抄过来,直接编译,好家伙,直接通过,下载,第一次,会提示失败,失败的时候,会自动完成格式化。不想看到它,就直接来个reboot指令,全绿,真好看,有系统时间标识,防伪。 ![image.png](https://oss-club.rt-thread.org/uploads/20220331/ae174de8c99e22c4ecbb3729205f4d6b.png) ``` //垃圾代码 // 初始化 fal fal_init(); // 创建 mtd 设备 if (!fal_mtd_nor_device_create("download")) { } else { // 挂载littlefs // 参数: 块设备名、文件系统挂载点路径,挂载文件系统类型,读写标志位,文件系统的私有数据 if (dfs_mount("download", "/", "lfs", 0, 0) == 0) { LOG_I("para initialized!"); //readwrite_sample(); } else // dfs_mkfs("elm", "AT45"); { LOG_E("dfs_mount Failed "); /* 格式化文件系统 */ dfs_mkfs("lfs", "download"); /* 挂载 littlefs */ if (dfs_mount("download", "/", "lfs", 0, 0) == 0) { LOG_I("para initialized!"); } else { LOG_E("Failed to initialize filesystem!"); } } } ```
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
wlof
这个家伙不懒,什么也没写
文章
16
回答
64
被采纳
0
关注TA
发私信
相关文章
1
关于FAL移植
2
添加fal软件包之后编译出现错误,求助!
3
关于easyflash4.0的写入和读取norflash一些疑惑咨询
4
FAL驱动移植&构建脚本问题
5
帮我看一下这样分区会不会冲突??
6
EasyFlash 4.0疑似出BUG
7
疑似FAL日志输出与DFS冲突??
8
fal软件包偏移量大于等于当前分区的大小会报错
9
为什么片内Flash总是写失败?
10
片上flash的文件系统的建立
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部