Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
FAL
关于easyflash4.0的写入和读取norflash一些疑惑咨询
发布于 2019-03-01 16:30:34 浏览:2493
订阅该版
* 本帖最后由 Sanjay_Wu 于 2019-3-1 16:48 编辑 * 最近学习easyflash,在移植到stm32的时候存在一些问题和疑惑: 1、使用fal实现easyflash对flash的读写函数,easyflash对flash的写入和读取要求最小单位为4个字节。 2、参考iot_board的easyflash例程代码,移植ef_fal_port.c的flash读取和写入函数: ```/** * Read data from flash. * @note This operation's units is word. * * @param addr flash address * @param buf buffer to store read data * @param size read bytes size * * @return result */ EfErrCode ef_port_read(uint32_t addr, uint32_t *buf, size_t size) { EfErrCode result = EF_NO_ERR; EF_ASSERT(size % 4 == 0); fal_partition_read(part, addr, (uint8_t *)buf, size); return result; } /** * Erase data on flash. * @note This operation is irreversible. * @note This operation's units is different which on many chips. * * @param addr flash address * @param size erase bytes size * * @return result */ EfErrCode ef_port_erase(uint32_t addr, size_t size) { EfErrCode result = EF_NO_ERR; /* make sure the start address is a multiple of FLASH_ERASE_MIN_SIZE */ EF_ASSERT(addr % EF_ERASE_MIN_SIZE == 0); if (fal_partition_erase(part, addr, size) < 0) { result = EF_ERASE_ERR; } return result; } /** * Write data to flash. * @note This operation's units is word. * @note This operation must after erase. @see flash_erase. * * @param addr flash address * @param buf the write data buffer * @param size write bytes size * * @return result */ EfErrCode ef_port_write(uint32_t addr, const uint32_t *buf, size_t size) { EfErrCode result = EF_NO_ERR; EF_ASSERT(size % 4 == 0); if (fal_partition_write(part, addr, (uint8_t *)buf, size) < 0) { result = EF_WRITE_ERR; } return result; }``` 上述函数知,在代码做了一些判断:**EF_ASSERT(size % 4 == 0);** 如果写入或读取不是4个字节为单位的话则会断言报错。 3、easyflash对于norflash(SPI-Flash)的写入粒度是1bit,擦除粒度是4K,我在ef_cfg.h定义如下: ```/* the minimum size of flash erasure */ #define EF_ERASE_MIN_SIZE (4 * 1024) /* 对于norflash,擦除粒度为4K */ /* the flash write granularity, unit: bit * only support 1(nor flash)/ 8(stm32f4)/ 32(stm32f1)/ 64(stm32l4) */ #define EF_WRITE_GRAN (1) ``````/* backup area start address */ #define EF_START_ADDR 0x00000000 /* ENV area size. It's at least one empty sector for GC. So it's definination must more then or equal 2 flash sector size. */ #define ENV_AREA_SIZE (2 * EF_ERASE_MIN_SIZE)``` **4、问题**: (1)、在移植编译下载后,easyflash初始化成功,但是在setenv的时候存在问题,也就是断言在写入的最小不是4字节: (2)**如果把读写的函数里面的EF_ASSERT(size % 4 == 0);注释掉,就能够setenv,printenv等操作。** 我用的norflash使用的是w25q128。 **以上,存在此问题,如有知道的朋友麻烦帮你看一下,感谢!**
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
2.5k
关于作者
Sanjay_Wu
这家伙很懒,什么也没写!
提问
13
回答
32
被采纳
0
关注TA
发私信
相关问题
1
关于FAL移植
2
添加fal软件包之后编译出现错误,求助!
3
FAL驱动移植&构建脚本问题
4
帮我看一下这样分区会不会冲突??
5
EasyFlash 4.0疑似出BUG
6
疑似FAL日志输出与DFS冲突??
7
fal软件包偏移量大于等于当前分区的大小会报错
8
为什么片内Flash总是写失败?
9
片上flash的文件系统的建立
10
潘多拉 fal bench 失败【已解决】
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
五分钟玩转RT-Thread新社区
5
国产MCU移植系列教程汇总,欢迎查看!
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RyanMqtt 移植指南(三)
2
RyanMqtt QOS质量测试(二)
3
WCH APT 零等待FLASH的思考
4
RyanMqtt使用介绍和示例代码(一)
5
RTT平台 zephyr_polling软件包 Bluenrg2 蓝牙芯片启动流程
热门标签
RT-Thread Studio
串口
Env
LWIP
AT
SPI
Bootloader
FinSH
ART-Pi
CAN总线
Hardfault
USB
文件系统
DMA
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
stm32
ESP8266
rt-smart
WIZnet_W5500
RTC
flash
ota
UART
FAL
packages_软件包
I2C
freemodbus
cubemx
潘多拉开发板_Pandora
定时器
PWM
BSP
ADC
socket
AB32VG1
SDIO
keil_MDK
中断
消息队列_msg_queue
编译报错
Debug
C++_cpp
msh
QEMU
SFUD
MicroPython
本月问答贡献
出出啊
1463
个答案
324
次被采纳
小小李sunny
1379
个答案
274
次被采纳
张世争
700
个答案
155
次被采纳
crystal266
518
个答案
152
次被采纳
whj467467222
1215
个答案
146
次被采纳
本月文章贡献
出出啊
1
篇文章
11
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
4
篇文章
6
次点赞
crystal266
2
篇文章
5
次点赞
whj467467222
2
篇文章
4
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部