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

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

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

6 ~& a, `$ r: ~: Z! A0 J! T

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

5 V. E- U* D4 ]( @; J. u% c: X

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

' z  N1 x8 [( f, C  g' t" w* B
    9 H1 h3 p* z0 O0 d
  1. 先详细看官方的BSP制作教程,其中一定要明确stCubeMX的作用,尤其是引脚的功能定义,从老的stm32f10x_HAL迁移过来的话,经常会忘记定义引脚,总结一定要先在cubemx定义好引脚功能,然后在kconfig中添加对应的头文件,然后系统当中才能使用。
  2. 8 u; @; Y! J% d: C  i5 }" b1 @" @# e
  3. 在步骤1,走通的情况下,接下来就是了解AT组件FAL组件SFUD组件,AT和FAL都在online package里面,SFUD在components--->device drivers---->SPI device driver下, 这边可以大致先浏览一下这些组件,不一定立马加进来update。
  4. ; o2 J8 O+ O( a2 z# y
  5. 接下来就是先把spi上挂的norflash驱动起来,需要参考官方的SPI文档,然后可以在application中新建一个spi_flash_init.c+ J( T4 J  ~3 c, r7 _- M 添加代码rt_hw_spi_device_attach("spi2", "spi20", GPIOB, GPIO_PIN_12); 来实现系统加载时就把spi flash给驱动起来,如果没有报错的话,可以看在msh/> 中list_device 看到spi20 这个spi device。
  6. / D, v5 ]. Z1 c+ H  I' _# `" ~
  7. 添加SFUD,如果步骤3走通,这一步就比较简单,直接在components中把sfud打开,就可以了,在msh中可以用sf一些相关的命令来实现对flash的读写。
  8. 6 [8 M' b; }$ {5 y) Q0 D! f! M3 y2 z
  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. 3 I$ z+ E+ n: G, w7 @
  11. 最后就是AT模块和http_ota,这边就相对简单一些。
  12. ) Y+ a# |4 Q% }( C
; }  u( J4 }4 S; N* m

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

# u3 `; `7 K& T/ R1 |4 Y
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 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 编辑 # A) d$ c9 z! X6 u. M
8 t0 r4 F+ T+ A5 t9 P2 k" }* I
请问楼主,如果采用STM32片上的flash,还会有升级到95%失败的现象吗?
7 y& B. q, ]) Y6 h0 a6 Q, R+ X' O为什么更换外部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
" x' r, _) ?1 R: |7 b7 b您好,我也是用stm32f103rct6这个芯片,现在也需要在线升级,请问FAL组件里面除了【fal_cfg.h】这个文件要 ...
5 S; {2 i- {8 ?2 A# C
不好意思,回复晚了,这段时间驱动层搞好了,在弄应用,fal组件添加后,应该会自动添加后面的文件,还有fal_flash_stm32f2_port.c 肯定不对,要对应F1的,而且我记得后来的fal的驱动都更新了,名字也应该不是这个了,请问一下,你用的哪个Bsp啊8 p! X) X3 x1 m; y& M! o- P
使用道具 举报 回复
发表于 2019-6-19 09:52:09 | 显示全部楼层
求发整理分档,感谢!
使用道具 举报 回复
发表于 2019-6-19 10:33:44 | 显示全部楼层
赞,顺便一提 U8G2 可以参照这里裁剪掉不需要的字库,减少体积! X2 l  X3 j& B7 j+ A

  J  ^9 `  c5 j& }: a) \& ohttps://github.com/wuhanstudio/rt-u8g2/issues/3
使用道具 举报 回复
发表于 2019-6-19 12:49:15 | 显示全部楼层
wuhanstudio 发表于 2019-6-19 10:33
, c7 ?" l2 F, Y2 R$ K赞,顺便一提 U8G2 可以参照这里裁剪掉不需要的字库,减少体积
8 n+ {: \4 n; f, p9 E4 [1 @& }8 o9 p1 c, r1 \4 {6 @
https://github.com/wuhanstudio/rt-u8g2/i ...

6 |. q% ?. M) W+ o好的,十分感谢吴大神
使用道具 举报 回复
发表于 2019-6-25 10:06:04 | 显示全部楼层
shao7936626 发表于 2019-6-5 23:599 W- G* ]3 I  f3 Q* P
不好意思,回复晚了,这段时间驱动层搞好了,在弄应用,fal组件添加后,应该会自动添加后面的文件,还有f ...
0 ]/ |, W) R+ j6 l# q% i. |
我也不好意思,最近忙其他项目去了,我开始用的是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
, z( L7 |' w& T/ R请问 如果不用外部norflash 只用片上flash该如何解决这个问题呢,我目前固件大小是90多k,每次下载到87%就 ...

3 a, L1 B% i) N- N' L/ U下载分区大小是否足够
使用道具 举报 回复
发表于 2019-7-16 09:30:45 | 显示全部楼层
shauew 发表于 2019-7-15 18:533 o; K7 ?. x- X) m# Y0 Y
请问 如果不用外部norflash 只用片上flash该如何解决这个问题呢,我目前固件大小是90多k,每次下载到87%就 ...

7 v7 z. ]  g6 E3 W; l; I/ Q下一半卡住很大可能是分区表位置不对或大小不足造成
使用道具 举报 回复
发表于 2019-7-16 13:49:10 | 显示全部楼层
国际哥 发表于 2019-7-16 09:30
: [* S$ X) [  \, ]下一半卡住很大可能是分区表位置不对或大小不足造成
# ~2 |) Q+ U7 l% d4 R: A
也好要多大一个Log 看一下,有时候是分区表不对,有时候是内存的问题,这个东西要做稳定还是有点挑战的
使用道具 举报 回复
发表于 2019-7-16 15:10:20 | 显示全部楼层
shao7936626 发表于 2019-7-16 13:49
( R! j* H6 K5 G0 A" K也好要多大一个Log 看一下,有时候是分区表不对,有时候是内存的问题,这个东西要做稳定还是有点挑战的 ...

+ A5 B/ i- ~  q1 ~' g" W应该不是分区表的问题 我用串口OTA就没问题 用httpOTA就不行 可以到我的帖子一观
使用道具 举报 回复
发表于 2019-7-16 15:10:46 | 显示全部楼层
国际哥 发表于 2019-7-16 09:30
1 B5 @% z$ I* Y0 C: a下一半卡住很大可能是分区表位置不对或大小不足造成

5 A4 ^2 y/ G& C; S9 {  d看log 应该不是这个问题
使用道具 举报 回复
发表于 2019-8-28 14:38:58 | 显示全部楼层
先行者
使用道具 举报 回复
发表于 2019-8-28 15:53:35 | 显示全部楼层
SFUD 放 INIT_DEVICE_EXPORT; |. e$ ?. Z8 s- x) d
FAL 和 ES 放 INIT_COMPONENT_EXPORT即可
使用道具 举报 回复
发表于 2019-9-12 15:06:26 | 显示全部楼层
shauew 发表于 2019-7-15 18:531 ^! P: `. P6 u
请问 如果不用外部norflash 只用片上flash该如何解决这个问题呢,我目前固件大小是90多k,每次下载到87%就 ...

) E. ?1 Z: O* P$ A" ?9 o) }我目前也越到了这个问题,不知道你有没用解决呢
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

Powered by RT-Thread

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