(记)终于把http_ota跑通了,顺带FAL和SFUD

发表在 AT2019-5-23 09:14 [复制链接] 33 2457

背景1:从了解到使用rt-thread不足一个月时间,对rt-thread只有一个简单的入门,移植和开发基本都是论坛里面查的资料和官方文档,本人使用mcu是stm32f103,使用的bsp是stm32下根据文档新移植的rt-thread,项目前期要求一定要支持远程升级,无奈手握的只是一个sim800c,在学习和使用rt-thread的过程中,SAL和webclient,逐渐进入我的视野,尤其是SAL层的开发与开源,我对rt-thread团队感到十分的敬佩。

6 p: b/ j4 q. z3 x/ t  C3 d

背景2:之前按照文档走过好几次,没一次能通过http_ota升级成功,开始基本是最小系统,整个bin文件不超过60K,但是每次下载到百分之90左右就下载不下来了,后来考虑到实际开发包含这种包后(尤其是U8G2加上中文显示),bin文件会很大,所以插了资料在spi口上外挂了一个16Mb的norflash,型号是mx25L1606e,经过了几次摸索终于搞定了和http_ota,顺便把FAL和SFUD也记录一下。

" ^9 y9 O1 M. P. g

一.基本的步骤(简单从移植开始,因为初期可能就会有问题)

% ]7 w7 f% N) ^9 W0 m: r
    7 P; [3 b1 ~* o) [" u  I
  1. 先详细看官方的BSP制作教程,其中一定要明确stCubeMX的作用,尤其是引脚的功能定义,从老的stm32f10x_HAL迁移过来的话,经常会忘记定义引脚,总结一定要先在cubemx定义好引脚功能,然后在kconfig中添加对应的头文件,然后系统当中才能使用。
  2. # h6 h; e8 d; U0 `/ w9 q+ q( }9 {, b
  3. 在步骤1,走通的情况下,接下来就是了解AT组件FAL组件SFUD组件,AT和FAL都在online package里面,SFUD在components--->device drivers---->SPI device driver下, 这边可以大致先浏览一下这些组件,不一定立马加进来update。
  4. * K6 l2 B4 _  g. s
  5. 接下来就是先把spi上挂的norflash驱动起来,需要参考官方的SPI文档,然后可以在application中新建一个spi_flash_init.c
      J0 g! X5 U; `# ?. ~6 |添加代码rt_hw_spi_device_attach("spi2", "spi20", GPIOB, GPIO_PIN_12); 来实现系统加载时就把spi flash给驱动起来,如果没有报错的话,可以看在msh/> 中list_device 看到spi20 这个spi device。
  6. & n+ i, l9 \! \
  7. 添加SFUD,如果步骤3走通,这一步就比较简单,直接在components中把sfud打开,就可以了,在msh中可以用sf一些相关的命令来实现对flash的读写。
  8. ; B  V/ Z, b& @2 k7 K$ w( a8 \- m
  9. 添加FAL,这一步最重要,需要修改和了解的地方最多,首先在Online packages里面把fal添加进来,需要打开FAL uses SFUD drivers,和FAL partition table config has defined on 'fal_cfg.h', 关于fal_cfg.h这个如何修改可以参见stm32通用bootloader然后比较重要的是fal_init()这个函数放的位置,一定要放到sfud初始化完成之后,sfud probe到了norflash,再去调用fal_init(),不然看上去fal初始化成功了,但是一直会有错误。如果成功了msh中fal ,可以对相关的分区进行读写等。
  10.   T4 n/ i' [5 M0 S+ t0 ?- d9 H
  11. 最后就是AT模块和http_ota,这边就相对简单一些。
  12. : G8 m4 F" O4 L6 o3 ?0 ]
0 C% S# T# D+ d/ g- c9 S

好像论坛在线的MARKDOWN,不能添加本机图片,本来想插一些图片来说明更加直观的,这边就先简单说一下我跑通的步骤,然后我会整理个word文档,如果有朋友需要的话可以下面留言,我到时候发给你

6 O# `3 X5 z. W' F" z
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-5-23 10:35:39 | 显示全部楼层
赞楼主的分享, 再整理下图文并茂些可以联系小师妹发篇公众号文章了,分享项目开发过程中亲历的坑。
使用道具 举报 回复
发表于 2019-5-24 09:17:27 | 显示全部楼层
前几天 刚刚调通http_ota 论坛上 还发了提问貌似没有楼主这么系统的掌握
使用道具 举报 回复
发表于 2019-5-24 09:19:10 | 显示全部楼层
给楼主点赞!!!
使用道具 举报 回复
发表于 2019-5-24 10:58:59 | 显示全部楼层
楼主厉害,给楼主点赞!!!
使用道具 举报 回复
发表于 2019-5-26 16:12:08 | 显示全部楼层
本帖最后由 richey07 于 2019-5-26 16:17 编辑 3 Z# X$ O& }0 T* E2 C+ u

$ n! O: L! \. ]请问楼主,如果采用STM32片上的flash,还会有升级到95%失败的现象吗?& Y: X/ y# l5 }* |8 c, O4 P
为什么更换外部nor flash会解决这个问题呢?
使用道具 举报 回复
发表于 2019-6-5 15:35:21 | 显示全部楼层
您好,我也是用stm32f103rct6这个芯片,现在也需要在线升级,请问FAL组件里面除了【fal_cfg.h】这个文件要添加外,【fal_flash_sfud_port.c】和【fal_flash_stm32f2_port.c】需要改动吗?这2个文件怎么跟stmf1匹配呢?
使用道具 举报 回复
发表于 2019-6-5 23:59:51 | 显示全部楼层
kaige 发表于 2019-6-5 15:35
. F9 R' Y7 ~6 D您好,我也是用stm32f103rct6这个芯片,现在也需要在线升级,请问FAL组件里面除了【fal_cfg.h】这个文件要 ...

4 E: |6 d' S3 V  ~* z不好意思,回复晚了,这段时间驱动层搞好了,在弄应用,fal组件添加后,应该会自动添加后面的文件,还有fal_flash_stm32f2_port.c 肯定不对,要对应F1的,而且我记得后来的fal的驱动都更新了,名字也应该不是这个了,请问一下,你用的哪个Bsp啊
. `8 B& n$ N. f8 w9 ~% h* T
使用道具 举报 回复
发表于 2019-6-19 09:52:09 | 显示全部楼层
求发整理分档,感谢!
使用道具 举报 回复
发表于 2019-6-19 10:33:44 | 显示全部楼层
赞,顺便一提 U8G2 可以参照这里裁剪掉不需要的字库,减少体积
# b7 G7 k) K! v, t4 Q6 q8 H: [: z; q
https://github.com/wuhanstudio/rt-u8g2/issues/3
使用道具 举报 回复
发表于 2019-6-19 12:49:15 | 显示全部楼层
wuhanstudio 发表于 2019-6-19 10:332 V1 C2 b1 [( m. H( p: k
赞,顺便一提 U8G2 可以参照这里裁剪掉不需要的字库,减少体积
! ~9 Y- c" O( ?7 J/ m* d: z* w+ V" m3 C
https://github.com/wuhanstudio/rt-u8g2/i ...

9 b0 X5 M8 ]. Y# r0 ?" i- U好的,十分感谢吴大神
使用道具 举报 回复
发表于 2019-6-25 10:06:04 | 显示全部楼层
shao7936626 发表于 2019-6-5 23:59+ W; N# r0 P1 T
不好意思,回复晚了,这段时间驱动层搞好了,在弄应用,fal组件添加后,应该会自动添加后面的文件,还有f ...

+ n- B; g$ j7 [- C/ u* f. z) \4 c我也不好意思,最近忙其他项目去了,我开始用的是bsp下面的stm32f10x-HAL,这个可以选择母体,我选择了RCT6,添加FAL组件,发现是F2的,以为是bsp,问题,然后有自己制作BSP,发现还是一样,所以才来求教您了,那我再试一下,谢谢啦!
使用道具 举报 回复
发表于 2019-7-15 18:53:02 | 显示全部楼层
请问 如果不用外部norflash 只用片上flash该如何解决这个问题呢,我目前固件大小是90多k,每次下载到87%就卡掉了。
使用道具 举报 回复
发表于 2019-7-16 09:14:42 | 显示全部楼层
厉害
使用道具 举报 回复
发表于 2019-7-16 09:15:29 | 显示全部楼层
shauew 发表于 2019-7-15 18:53
& O) V% F" q/ L6 w' g  I请问 如果不用外部norflash 只用片上flash该如何解决这个问题呢,我目前固件大小是90多k,每次下载到87%就 ...
" Y/ d  L! A+ G: {. T
下载分区大小是否足够
使用道具 举报 回复
发表于 2019-7-16 09:30:45 | 显示全部楼层
shauew 发表于 2019-7-15 18:53% D' m5 @- D- P1 z, z
请问 如果不用外部norflash 只用片上flash该如何解决这个问题呢,我目前固件大小是90多k,每次下载到87%就 ...

0 O1 ?: E5 N6 Z6 m2 R8 G9 V* ?0 f  Q下一半卡住很大可能是分区表位置不对或大小不足造成
使用道具 举报 回复
发表于 2019-7-16 13:49:10 | 显示全部楼层
国际哥 发表于 2019-7-16 09:30
/ `  n7 b" B0 z下一半卡住很大可能是分区表位置不对或大小不足造成

  H4 q4 t& |2 g2 V3 V& U也好要多大一个Log 看一下,有时候是分区表不对,有时候是内存的问题,这个东西要做稳定还是有点挑战的
使用道具 举报 回复
发表于 2019-7-16 15:10:20 | 显示全部楼层
shao7936626 发表于 2019-7-16 13:49
2 W. r8 y8 {7 d0 U8 {( E$ h6 H* t也好要多大一个Log 看一下,有时候是分区表不对,有时候是内存的问题,这个东西要做稳定还是有点挑战的 ...

# P; w5 ?6 p  J- `2 X应该不是分区表的问题 我用串口OTA就没问题 用httpOTA就不行 可以到我的帖子一观
使用道具 举报 回复
发表于 2019-7-16 15:10:46 | 显示全部楼层
国际哥 发表于 2019-7-16 09:300 t& }" A8 ^4 d
下一半卡住很大可能是分区表位置不对或大小不足造成

# R2 x0 h6 d/ j' a( k# [$ m) m+ I看log 应该不是这个问题
使用道具 举报 回复
发表于 2019-8-28 14:38:58 | 显示全部楼层
先行者
使用道具 举报 回复
发表于 2019-8-28 15:53:35 | 显示全部楼层
SFUD 放 INIT_DEVICE_EXPORT5 Y6 P. e! R7 ~0 E7 L( ?
FAL 和 ES 放 INIT_COMPONENT_EXPORT即可
使用道具 举报 回复
发表于 2019-9-12 15:06:26 | 显示全部楼层
shauew 发表于 2019-7-15 18:53
/ L6 I; y4 f) v0 d请问 如果不用外部norflash 只用片上flash该如何解决这个问题呢,我目前固件大小是90多k,每次下载到87%就 ...

' n; g2 J; \% C) `( i7 J% F* G/ K我目前也越到了这个问题,不知道你有没用解决呢
使用道具 举报 回复
发表于 2020-2-22 22:41:56 | 显示全部楼层
邓亨礼 发表于 2019-9-12 15:06# \" q9 w- ~) @/ ]
我目前也越到了这个问题,不知道你有没用解决呢
( r3 h% s" K+ r3 N( V
我现在也是遇到这个问题,片上flash用128K做download分区,下载文件是114K,下载都是在88%开始失败,不知道你这个问题解决没?
使用道具 举报 回复
发表于 2020-2-23 15:27:01 | 显示全部楼层
没有,我后面没用片内的FLASH了,用的W25Q64来做的,感觉片内分区有问题
使用道具 举报 回复
发表于 2020-2-27 18:07:23 | 显示全部楼层
楼主您好,我这两天在研究OTA升级,用的片外FLASH W25Q128,在移植中有些不太明白的地方想问问,谢谢!
. k  V) V- q0 q* b; k我准备把download和factory都放在片外。4 f( r. F% q2 ]! w; z& u5 ?" h% `
fal_flash_sfud_port.c和fal_flash_stm32f2_port.c都需要用起来吗?我生成的文件没有fal_flash_stm32f2_port.c写内部FLASH的文件,这个需要吗?
使用道具 举报 回复
发表于 2020-3-27 16:52:18 | 显示全部楼层
gxmlsl 发表于 2020-2-27 18:07( _3 g* c( W5 F
楼主您好,我这两天在研究OTA升级,用的片外FLASH W25Q128,在移植中有些不太明白的地方想问问,谢谢!
( N4 P& {, p: }5 @7 v! d1 h9 t我 ...

) Y- n8 Q7 j# \1 c  \操作外部FLASH,需要用的的文件:drv_flash_f4.h(选自己对应的stm32系列),drv_flash.h,fal_flash_sfud_port.c
使用道具 举报 回复
发表于 2020-4-17 11:57:53 | 显示全部楼层
我用http ota下载,用的是外部flash,每次到97%或98%的地方卡住了,不知道是什么原因
使用道具 举报 回复
发表于 2020-4-17 12:42:57 | 显示全部楼层
gxmlsl 发表于 2020-2-27 18:07
5 o* U3 |9 w: O1 I  `. V2 K% J楼主您好,我这两天在研究OTA升级,用的片外FLASH W25Q128,在移植中有些不太明白的地方想问问,谢谢!
, n7 {8 W( W: y+ z1 J我 ...
% ~' Z  X7 T9 q$ b& S7 A
参见五楼  https://www.rt-thread.org/qa/thread-12109-1-1.html
使用道具 举报 回复
发表于 2020-4-17 16:48:02 | 显示全部楼层
RT-WH 发表于 2019-5-24 09:17
# k% J' u' T6 t( n! C9 j前几天 刚刚调通http_ota 论坛上 还发了提问貌似没有楼主这么系统的掌握

, _' R4 l% q0 l& L[E/at.skt.esp] no memory receive buffer(1440).' M* ?" i/ X* }# f) j' @
[E/at.skt.esp] no memory receive buffer(1440).. O4 p" t9 ]- H% \
[E/at.skt.esp] no memory receive buffer(1400).
. z7 U' _, W3 R2 a- l% x. x$ P[E/at.skt.esp] no memory receive buffer(1440)., u/ m. c3 A8 `/ A
[E/at.skt.esp] no memory receive buffer(80).
4 ^/ w( z+ M3 \5 A[E/at.skt.esp] no memory receive buffer(1360).. }1 Q/ l( v. |" ~
[I/http_ota] Download: [=======>                                                                             [I/http_ota] Download: [===========>                                                                         [I/http_ota] Download: [===============>                                                                     [I/http_ota] Download: [==================>                                                                  [I/http_ota] Download: [======================>                                                              [I/http_ota] Download: [==========================>                                                          [I/http_ota] Download: [==============================>                                                      [I/http_ota] Download: [=================================>                                                   [I/http_ota] Download: [=====================================>                                                              ] 37%4 ]8 Z/ u5 V$ E4 r! p6 s. w# i
[E/at.skt] AT socket (0) receive timeout (6000)!& M% ^9 W6 R" Z2 ~0 b5 G" B
[I/http_ota] Download: [=====================================>                                                              ] 37%
3 L' S+ e  f' d' D; |  b[E/at.skt] AT socket (0) receive timeout (6000)!
: Y! H+ }% Y& x[D/web] receive data error(-1).9 Z6 G, m& f4 d% E: W& E* x
[E/web] receive data timeout.
" @$ a2 q/ _* t3 u" c" P[E/http_ota] Exit: server return err (-2)!6 Q4 |; m5 T7 I- U3 P* v
msh />' q( c* [# T% j' K5 T6 R
2 R. f5 U/ q' x) X
我用的外部flash,型号SST25VF016B,为什么http_ota会这样?ymodem_ota都正常,求解答!谢谢
使用道具 举报 回复
发表于 2020-4-17 16:49:32 | 显示全部楼层
大神,我的也是F103,用的外部falsh,卡到http_ota,总下载失败,能把您成功的例子分享下吗?
使用道具 举报 回复
发表于 2020-4-17 19:43:18 | 显示全部楼层
厉害,我目前正在用STM32F103做项目,要上OTA,期待您的文档分享!谢谢!
使用道具 举报 回复
发表于 2020-4-30 22:30:06 | 显示全部楼层
楼主您好,我前几天用STM32片上flash,跑通了基本的OTA升级过程,现在想进一步学习一下那个http_ota方式,但是官网介绍的很粗略,看到您的帖子,非常想看看您的文档,能否发一份给我邮箱1050434095@qq.com 万分感谢!
使用道具 举报 回复
发表于 2020-5-10 00:05:43 | 显示全部楼层
楼主您好,我也用了http_ota,芯片是stm32f103ret6,用的是spi3 驱动的外部flash25q64,但是ota之后更新完app,会提示sfud无法初始化,这个是什么问题呢?
8 x6 t; M# y2 K& a1 y$ M
test1.png
使用道具 举报 回复
发表于 2020-5-11 11:29:16 | 显示全部楼层
木成舟 发表于 2020-5-10 00:05
  ]  Z5 x$ e# x楼主您好,我也用了http_ota,芯片是stm32f103ret6,用的是spi3 驱动的外部flash25q64,但是ota之后更新完app ...
5 Q0 a+ v; l2 j  {9 M, U' K3 R
首先你的W25Q64设备都没初始化成功,检查一下初始化程序这里。
8 ?& D9 d# Q6 f* c+ r! z还有就是你把SPI Flash 的8M空间全部当做了download区?
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  1. 44 主题
  2. 820 帖子
  3. 820 积分

Ta的主页 发消息

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

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