搜索
bottom↓
12
返回列表 发新帖
楼主: sunnydragon

【升级】Flash闪存库EasyFlash,新增掉电保护功能

  [复制链接]

出0入0汤圆

发表于 2015-7-23 08:59:02 | 显示全部楼层
MIT许可应该怎么弄呢

出0入8汤圆

发表于 2015-7-23 20:29:19 | 显示全部楼层
sunnydragon 发表于 2015-7-22 12:03
移植文档写好了,你看下有没有需要改进的?https://github.com/armink/EasyFlash/blob/master/docs/zh/po ...

看了下,感觉还不错,暂时提不出建议,可以等其他网友看是否有改进建议。

出0入0汤圆

发表于 2015-7-24 08:39:40 来自手机 | 显示全部楼层
顶一个,学习了!!

出0入198汤圆

 楼主| 发表于 2015-7-25 11:00:37 | 显示全部楼层
AbnerSmith 发表于 2015-7-23 08:59
MIT许可应该怎么弄呢

MIT是非常宽泛的开源协议,你可以看下这里的介绍:http://www.oschina.net/question/54100_9455

出0入0汤圆

发表于 2015-7-29 11:21:07 | 显示全部楼层
您好!
谢谢分享,非常实用!
另,那个IAP的功能,有裸机的demo吗
谢谢

出0入0汤圆

发表于 2015-7-29 20:34:50 | 显示全部楼层
在elog_output 函数中有这样一句
strcpy(log_buf - newline_len, ELOG_NEWLINE_SIGN);
想问下这样会造成数组越界吗?

出0入0汤圆

发表于 2015-7-29 20:51:27 来自手机 | 显示全部楼层
好资料 多谢分享

出0入198汤圆

 楼主| 发表于 2015-7-30 18:17:16 | 显示全部楼层
interstellar_tr 发表于 2015-7-29 11:21
您好!
谢谢分享,非常实用!
另,那个IAP的功能,有裸机的demo吗

IAP目前没有裸机Demo,裸机流程和RTT下差不多,你可以看下RTT IAP Demo上面的流程描述。你先试试,如果遇到问题可以跟帖留言。

出0入198汤圆

 楼主| 发表于 2015-7-30 19:24:56 | 显示全部楼层
changxiaoqing11 发表于 2015-7-29 20:34
在elog_output 函数中有这样一句
strcpy(log_buf - newline_len, ELOG_NEWLINE_SIGN);
想问下这样会造成数 ...

放心吧,不会的,有限制。你已经用起来了吗?

出0入0汤圆

发表于 2015-7-30 23:05:30 | 显示全部楼层
sunnydragon 发表于 2015-7-30 19:24
放心吧,不会的,有限制。你已经用起来了吗?

昨天刚试着用了下,感觉不错,功能挺全的多谢分享

出0入0汤圆

发表于 2015-7-31 13:23:33 | 显示全部楼层
表示感兴趣,项目里有数据库的需求。但是没有看明白一些实现的方法,希望楼主出一个移植手册和使用说明,能更快的上手楼主威武

出0入198汤圆

 楼主| 发表于 2015-8-1 15:03:08 | 显示全部楼层
changxiaoqing11 发表于 2015-7-30 23:05
昨天刚试着用了下,感觉不错,功能挺全的多谢分享

有问题和意见欢迎随时反馈。
今天我又增加了Flash Log功能的Demo你可以试试:https://github.com/armink/EasyLo ... rt-thread/stm32f10x

出0入198汤圆

 楼主| 发表于 2015-8-1 15:05:38 | 显示全部楼层
单飞 发表于 2015-7-31 13:23
表示感兴趣,项目里有数据库的需求。但是没有看明白一些实现的方法,希望楼主出一个移植手册和使用说明,能 ...

移植手册和使用说明都有的啊,建议仔细阅读下项目首页的说明:https://github.com/armink/EasyFlash
移植文档:https://github.com/armink/EasyFlash/blob/master/docs/zh/port.md
使用API:https://github.com/armink/EasyFlash/blob/master/docs/zh/api.md

出0入198汤圆

 楼主| 发表于 2015-8-1 15:13:05 | 显示全部楼层
大家务必先仔细阅读下Github上的EasyFlash首页介绍文档:https://github.com/armink/EasyFlash     ,可以有助于大家更好的了解这个开源项目。
另外建议大家点击项目首页 https://github.com/armink/EasyFlash 右上角 Watch & Star,这样项目有更新时,会及时以邮件形式通知你。

文档都是Markdown格式的,建议大家在线阅读,这样格式比较全。
移植文档:https://github.com/armink/EasyFlash/blob/master/docs/zh/port.md
API文档:https://github.com/armink/EasyFlash/blob/master/docs/zh/api.md

出0入0汤圆

发表于 2015-8-5 17:55:01 | 显示全部楼层
标记一下

出0入0汤圆

发表于 2015-8-13 23:10:16 | 显示全部楼层
感谢楼主,下载下来学习学习。

出0入0汤圆

发表于 2015-8-19 09:41:45 | 显示全部楼层
顶起,支持。

出0入0汤圆

发表于 2015-8-21 23:38:02 | 显示全部楼层
我的理解,
TI的M3/M4 ROM 内置一个bootloader,出厂的时候自带的。参考附件。
还没有看见有人实现过 TI  M3/M4 串口IAP自定义升级的。
不知道您的Easy flash是否支持这一系列?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入198汤圆

 楼主| 发表于 2015-8-22 08:39:31 | 显示全部楼层
爱在丽江 发表于 2015-8-21 23:38
我的理解,
TI的M3/M4 ROM 内置一个bootloader,出厂的时候自带的。参考附件。
还没有看见有人实现过 TI  M3 ...

EasyFlash对Flash操作接口做了封装,内部实现了Env、log、IAP等功能,提供给上层的只有API接口,所以理论上EasyFlash是支持任何MCU的。

我查了下资料,关于TI的Bootloader,你可以看下这个文章:http://bbs.eeworld.com.cn/thread-244298-1-1.html   ,里面讲的很清楚,TI自带的Bootloader是通过读取PB4脚的状态来进入的App或Bootloader的更新功能,
如果你觉得TI自带Bootloader里面的功能无法满足自己的产品需求,那么可以自己重写Bootloader,此时EasyFlash的IAP功能才有用处。

当然EasyFlash里面IAP功能相比其他功能来说,功能相对简单,推荐你在自己的App里尝试使用它自带的 Env及Log功能。

出0入0汤圆

发表于 2015-8-22 11:58:30 | 显示全部楼层
关键是TI的公开的BOOTLOADER,要一个外部GPIO按键触发,远程升级的话...

出0入0汤圆

发表于 2015-8-22 18:59:16 | 显示全部楼层
sunnydragon 发表于 2015-8-1 15:13
大家务必先仔细阅读下Github上的EasyFlash首页介绍文档:https://github.com/armink/EasyFlash     ,可以 ...

好的,谢谢楼主了。

出0入0汤圆

发表于 2015-8-22 19:10:24 | 显示全部楼层
Great idea, mark

出0入0汤圆

发表于 2015-9-5 21:21:52 | 显示全部楼层
什么时候测试一下,顶楼主。

出0入0汤圆

发表于 2015-9-10 15:24:22 | 显示全部楼层
楼主,  应用的时候, 出现了问题, 请指导

stm32103rc, 测试EasyFlash的时候, 成功了, 没有一点问题.

现在我在工程中,增加了 freemodbus的代码, 出现了问题,

主要在 这几部分代码上,
    sprintf(new_BaudRate,"%ld", BaudRate );   
    ef_set_env("BaudRate", new_BaudRate);
    ef_save_env();

请问楼主, 有没有函数可以代替     sprintf(new_BaudRate,"%ld", BaudRate );   

谢谢!

出0入0汤圆

发表于 2015-9-10 15:32:28 | 显示全部楼层
楼主辛苦了!

出0入198汤圆

 楼主| 发表于 2015-9-10 19:25:26 | 显示全部楼层
interstellar_tr 发表于 2015-9-10 15:24
楼主,  应用的时候, 出现了问题, 请指导

stm32103rc, 测试EasyFlash的时候, 成功了, 没有一点问题.

出现了什么问题呢?这个就是个转换字符串的方法,我不清楚有没有其他的可以替换的。

另外,建议,如果set完env之后想立刻保存,可以直接使用ef_set_and_save_env,这样可以简化代码。

出0入0汤圆

发表于 2015-9-10 19:35:27 | 显示全部楼层
STM32F4不是只能按扇区擦写吗?

出0入0汤圆

发表于 2015-9-10 20:29:21 | 显示全部楼层
sunnydragon 发表于 2015-9-10 19:25
出现了什么问题呢?这个就是个转换字符串的方法,我不清楚有没有其他的可以替换的。

另外,建议,如果se ...

谢谢!
有问题, 在向您请教

出0入0汤圆

发表于 2015-9-11 12:44:36 | 显示全部楼层
支持,收藏了

出0入0汤圆

发表于 2015-10-14 23:36:47 | 显示全部楼层
ymodem+rtt  编译时候提示
..\app\src\user_finsh_cmd.c(105): error:  #167: argument of type "int" is incompatible with parameter of type "rt_device_t"


  1. void update(uint8_t argc, char **argv) {
  2.     uint16_t size;
  3.     char *recv_buff, c_file_size[11] = {0};
  4.     struct rym_ctx rctx;

  5.     rt_kprintf("Please select a update file and use Ymodem to send.\r\n");
  6.     //serial_get_device()
  7.     if (!rym_recv_on_device(&rctx,serial_get_device(),
  8.             RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX, ymodem_on_begin, ymodem_on_data, NULL,
  9.             RT_TICK_PER_SECOND)) {
  10.         /* wait some time for terminal response finish */
  11.         rt_thread_delay(RT_TICK_PER_SECOND);
  12.         /* set need copy application from backup section flag is 1, backup application length */
  13.         ef_set_env("iap_need_copy_app", "1");
  14.         rt_sprintf(c_file_size, "%ld", update_file_total_size);
  15.         ef_set_env("iap_copy_app_size", c_file_size);
  16.         ef_save_env();
  17.         /* copy downloaded application to application entry */
  18.         if (ef_erase_user_app(iap_get_app_addr(), update_file_total_size)
  19.                 || ef_copy_app_from_bak(iap_get_app_addr(), update_file_total_size)) {
  20.             rt_kprintf("Update user app fail.\n");
  21.         } else {
  22.             rt_kprintf("Update user app success.\n");
  23.         }
  24.         /* clean need copy application from backup section flag */
  25.         ef_set_env("iap_need_copy_app", "0");
  26.         ef_set_env("iap_copy_app_size", "0");
  27.         ef_save_env();
  28.     } else {
  29.         /* wait some time for terminal response finish */
  30.         rt_thread_delay(RT_TICK_PER_SECOND);
  31.         rt_kprintf("Update user app fail.\n");
  32.     }
  33. }
  34. MSH_CMD_EXPORT(update, Update user application);
复制代码



提示是    if (!rym_recv_on_device(&rctx,serial_get_device(),
            RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX, ymodem_on_begin, ymodem_on_data, NULL,
            RT_TICK_PER_SECOND))  
不知道如何 解决。恳请楼主解答,谢谢

出0入0汤圆

发表于 2015-10-15 10:00:18 | 显示全部楼层
支持,下载看看

出0入198汤圆

 楼主| 发表于 2015-10-15 10:41:41 | 显示全部楼层
vjcmain 发表于 2015-10-14 23:36
ymodem+rtt  编译时候提示
..\app\src\user_finsh_cmd.c(105): error:  #167: argument of type "int" is  ...

你有自己定义 serial_get_device() 方法吗?

这个方法是获取串口设备的,rym_recv_on_device 的第二个入参需要串口设备对象,如果获取不到串口设备对象自然会报错。

出0入0汤圆

发表于 2015-10-15 14:38:33 | 显示全部楼层
sunnydragon 发表于 2015-10-15 10:41
你有自己定义 serial_get_device() 方法吗?

这个方法是获取串口设备的,rym_recv_on_device 的第二个入 ...

我只是将您的iap的代码(EasyFlash-master\EasyFlash-master\demo\iap\ymodem+rtt)拷贝到user_finsh_cmd下面,编译就报错了,水平比较菜,还没找到原因

出0入198汤圆

 楼主| 发表于 2015-10-15 15:30:11 | 显示全部楼层
vjcmain 发表于 2015-10-15 14:38
我只是将您的iap的代码(EasyFlash-master\EasyFlash-master\demo\iap\ymodem+rtt)拷贝到user_finsh_cmd ...

你先得学会使用RT-Thread串口设备,不初始化设备,打开设备,即便拷贝进去也是没法用的。

出0入0汤圆

发表于 2015-12-12 14:03:03 | 显示全部楼层
本帖最后由 cjr82123 于 2015-12-12 14:17 编辑

你好,楼主!
由于项目需要用到一个FLASH(W25Q16,第一次使用)。
移植过程中有些疑问:
1.为什么ef_port_write/read()函数要进行4字节的读写?
2.对#define EF_USER_SETTING_ENV_SIZE这个设置还是不理解,请指教!
3.项目需要对1个目标进行数据记录,每个10分钟记录一次数据(一次20字节),
   记录720次,每个目标总的记录大小约14KBytes。
   请问使用EasyFlash可以实现吗?

出0入0汤圆

发表于 2015-12-12 16:12:08 | 显示全部楼层
sunnydragon 发表于 2015-10-15 15:30
你先得学会使用RT-Thread串口设备,不初始化设备,打开设备,即便拷贝进去也是没法用的。 ...

你好,楼主!
由于项目需要用到一个FLASH(W25Q16,第一次使用)。
移植过程中有些疑问:
1.为什么ef_port_write/read()函数要进行4字节的读写?
2.对#define EF_USER_SETTING_ENV_SIZE这个设置还是不理解,请指教!
3.项目需要对1个目标进行数据记录,每个10分钟记录一次数据(一次20字节),
   记录720次,每个目标总的记录大小约14KBytes。
   请问使用EasyFlash可以实现吗?

出0入198汤圆

 楼主| 发表于 2015-12-12 17:20:50 | 显示全部楼层
cjr82123 发表于 2015-12-12 16:12
你好,楼主!
由于项目需要用到一个FLASH(W25Q16,第一次使用)。
移植过程中有些疑问:

1、4字节对齐当时定义时主要是为了提高写效率,并且有较好的兼容性;

2、关于 EF_USER_SETTING_ENV_SIZE 的介绍,在移植文档中有很详细的介绍(点击查看),请先仔细了解下,如果还有不明白的地方,可以再跟帖;

3、你的这个需求可否理解为10分钟更新一次数据,数据容量为14K?如果是这样的情况,每天需要擦写144次,如果没有擦写平衡算法,flash顶多被使用100000/144≈694天,即两年左右时间。如果使用 EasyFlash 的擦写平衡功能,则可以大大提升让你的产品数据保存次数,你可以先了解下。

出0入0汤圆

发表于 2015-12-12 18:01:27 | 显示全部楼层
本帖最后由 cjr82123 于 2015-12-12 18:03 编辑
sunnydragon 发表于 2015-12-12 17:20
1、4字节对齐当时定义时主要是为了提高写效率,并且有较好的兼容性;

2、关于 EF_USER_SETTING_ENV_SIZE ...


是的,每10分钟写一次,数据一直追加下去。

另外这2天在网上找关于擦写平衡的资料,找不到。
请问楼主有没有这方面的资料,感谢。
因为之前没搞过这方面的,水平实在有限。

另外我把我对Easyflash的理解大概描述一下(就针对我的项目来个比喻):

1.假如我要创建一变量temp来记录目标的温度,那调用ef_set_env()方法创建对象。

2.每10分钟调用一次ef_set_env()然后调用ef_save_env()方法来保存这个温度。

对于第2点有个疑问,假如第一次采集的温度是18度,则使用ef_set_env("temp",“18”);
那第二次采集的温度是20度,那是不是使用ef_set_env("temp",“1820”);来实现数据的连续记录?

出0入0汤圆

发表于 2015-12-12 19:24:14 | 显示全部楼层
好好学习一下

出20入118汤圆

发表于 2015-12-12 19:34:13 | 显示全部楼层
mark 好东西

出0入198汤圆

 楼主| 发表于 2015-12-14 11:27:12 | 显示全部楼层
cjr82123 发表于 2015-12-12 18:01
是的,每10分钟写一次,数据一直追加下去。

另外这2天在网上找关于擦写平衡的资料,找不到。

你的这个方法也行的,EasyFlash对值的长度没有要求。

也可以用多个环境变量,模拟循环队列的方式实现。

出0入4汤圆

发表于 2015-12-14 11:32:05 | 显示全部楼层
easy flash

出50入0汤圆

发表于 2015-12-17 14:10:50 | 显示全部楼层
easy flash 标记下,谢谢

出0入0汤圆

发表于 2015-12-17 16:05:29 | 显示全部楼层
支持!!!!

出0入0汤圆

发表于 2016-7-27 11:10:27 | 显示全部楼层
标记 学习............

出0入0汤圆

发表于 2016-7-27 11:35:41 | 显示全部楼层
mark            

出0入8汤圆

发表于 2016-7-27 15:35:07 来自手机 | 显示全部楼层
貌似很牛逼的样子  收藏

出0入0汤圆

发表于 2017-11-23 22:41:43 | 显示全部楼层
启用宏#define EF_ENV_USING_WL_MODE时,ef_env_wl.c中788行result = ef_port_erase(get_cur_using_data_addr(), env_used_size);中get_cur_using_data_addr()返回地址为0xFFFFFFFF而在常规模式下就不存在这个问题,请问是哪里配置不当吗?

出0入0汤圆

发表于 2017-11-23 23:11:44 | 显示全部楼层
在常规模式下,使用demo中的例程输出[Flash]Saved ENV OK.接下来怎么才能用secureCRT创建变量呢?

出0入198汤圆

 楼主| 发表于 2017-11-24 07:52:52 | 显示全部楼层
游在云间 发表于 2017-11-23 23:11
在常规模式下,使用demo中的例程输出[Flash]Saved ENV OK.接下来怎么才能用secureCRT创建变量呢? ...

如果用 RT-Thread demo 的可以通过 shell 命令行来创建,否则可以调用 api ef_set_env 来创建了

出0入0汤圆

发表于 2017-11-24 07:53:21 | 显示全部楼层
还有一个问题,移植IAP和LOG时,只有C文件吗?

出0入198汤圆

 楼主| 发表于 2017-11-24 09:22:09 | 显示全部楼层
游在云间 发表于 2017-11-24 07:53
还有一个问题,移植IAP和LOG时,只有C文件吗?


是的,你可以多试试 demo,记得 EasyLogger 项目里有工程
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-12-10 01:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表