久芯网

好久不来论坛了,过来怀念一下

avatar hhhhhhhaa 提问时间: 2023-09-11 07:42:21 / 未解决
最近想学习一下stm32通过U盘和SD卡来升级程序,也就大家所说的IAP或者叫BootLoader,有没有好的资源推荐一下啊,家人们
12个回答
  • avatar 废鱼
    回答时间: 2023-09-11 08:02:07

    和IAP类似的,一个是通过网络或者串口将数据下载到指定位置,一个是将SD或者U盘中的数据导入到FLASH中,都是通过BootLoader代码进行处理,要注意升级后,删除或者修改bin文件,避免重复升级。

  • avatar hhhhhhhaa
    回答时间: 2023-09-11 08:20:03
    安 发表于 2021-1-19 17:13
    和IAP类似的,一个是通过网络或者串口将数据下载到指定位置,一个是将SD或者U盘中的数据导入到FLASH中,都 ...

    大神好啊,说一下我的理解吧,我看了几个例程, 有的是说上电后进入上电复位中断,在这里进行程序的跳转,判断标志位,这样就可以知道是进入IAP还是APP , 进入IAP后,关闭所有的中断,识别U盘或SD卡的文件是否是BIN或者HEX文件,这样的话就需要支持文件操作系统比如用FATFS文件操作系统,识别有了升级用的文件后,紧接着判断文件的大小是否超过了flash的范围,如果超过了就不升级,如果没有超过就将HEX文件或者BIN文件写入到FLASH中,写完后判断是否写完,将标志位清零,然后再打开所有的中断,将PC指针赋值给APP上main的地址 这上面有几个问题没有搞清楚,第一,比如用U盘或者SD卡的话怎么将BIN或者HEX文件的内容复制到FLASH中? 第二,关于IAP的跳转是怎么跳的呢?需要修改PC指针的位置还是?

  • avatar radio2radio
    回答时间: 2023-09-11 08:36:43

    这个操作的复杂程度,与你的要求有关。 最简单的情况是,无论什么bin/hex文件,都能够写入,不怕变砖。 复杂一点的,要进行版本控制,不是新的版本,不烧。 再复杂一点的,要进行完整性确认,被篡改了的代码,不烧。 再复杂一点的,要加密和解密,发现任何不对的地方,不烧。 再复杂一点的,要保存一个Bootloader备份,万一变砖,至少可以强制恢复重启Bootloader。 再复杂一点的,要保存一个当前完整程序版本的备份,万一升级失败或者新版本死机,马上自我恢复备份版本。 等等,看需求。

  • avatar hhhhhhhaa
    回答时间: 2023-09-11 09:04:33
    radio2radio 发表于 2021-1-19 21:32
    这个操作的复杂程度,与你的要求有关。 最简单的情况是,无论什么bin/hex文件,都能够写入,不怕变砖。

    感谢大神的思路,确实让我了解的很多,以前一直以为只要是有hex文件或者bin文件直接烧写就行了,没想考虑到您说的这些 言归正传,如果要是从U盘烧写到flash的话是不是需要有文件管理系统呢,具体操作的话是不是通过文件管理系统,从U盘里拷贝hex或者bin文件到flash里呢?

  • avatar radio2radio
    回答时间: 2023-09-11 09:36:58
    hhhhhhhaa 发表于 2021-1-19 21:48
    感谢大神的思路,确实让我了解的很多,以前一直以为只要是有hex文件或者bin文件直接烧写就行了,没想考虑 ...

    首先,你的升级U盘是不是PC写出来的,PC一般最常见的也是FAT32或者FAT16/FAT12格式化的了。 那么你的Bootloader一般不需要完整的文件管理系统,只需要能够读出文件即可。 找一个可以用的参考例程,拿过来用就是了。 如果你的RAM/SDRAM足够大,当然可以一次全部bin/hex读出到RAM,然后再慢慢写入Flash。 合理的做法是,每次读出一个Flash的Sector大小,每种IC可能都不同(1KB~64KB?)。

  • avatar 废鱼
    回答时间: 2023-09-11 10:00:24

    一般是先运行BootLoader程序,判断是否有需要升级的问题。没有升级文件,跳转到APP程序。 从U盘中读取到bin文件后,按照APP的起始地址开始写入到FLASH。

  • avatar hhhhhhhaa
    回答时间: 2023-09-11 10:31:43
    安 发表于 2021-1-20 10:07
    一般是先运行BootLoader程序,判断是否有需要升级的问题。没有升级文件,跳转到APP程序。 从U盘中读取到bin ...

    我看好多思路也是这样的,现在我没搞懂的是怎么从U盘读取文件,正在学习关于U盘的知识,读出来以后就可以写入了,写入FLASH这个事儿我会做,因为以前用过FLASH当存储用

  • avatar hhhhhhhaa
    回答时间: 2023-09-11 10:56:48
    radio2radio 发表于 2021-1-19 22:28
    首先,你的升级U盘是不是PC写出来的,PC一般最常见的也是FAT32或者FAT16/FAT12格式化的了。 那么你的Boot ...

    嗯,感谢大佬的指导,U盘中的文件是keil编译后的HEX文件或者BIN文件,U盘的话一般格式化成fat32格式的,例程的话暂时还没找到,感觉网上这方面的资料挺少的,或者是我找的方式不对,大佬如果有例程的话方便发一个让小弟学习一下吗

  • avatar radio2radio
    回答时间: 2023-09-11 11:20:25
    hhhhhhhaa 发表于 2021-1-20 15:12
    嗯,感谢大佬的指导,U盘中的文件是keil编译后的HEX文件或者BIN文件,U盘的话一般格式化成fat32格式的, ...

    不好意思,我详细没有研究过这方面,不能提供例程。 看看其他网友能不能提供参考例程。 不知道你的MCU型号。 如果一定要读U盘,就要有USB主机的硬件,也就是能实现USB的HOST模式。 不然,就只能用SPI来读TF卡的方法,这个常见。 GitHub大把。 随便参考一个Bootloader例程,可以解决写Flash和跳转APP的问题。我搞过一个YAB可以参考。 再找一套读U盘/TF卡的,数据就有了。

  • avatar 废鱼
    回答时间: 2023-09-11 11:49:10

    很简单,用USB接口,通过FATFS读取文件就行了。

  • avatar hhhhhhhaa
    回答时间: 2023-09-11 12:15:21
    radio2radio 发表于 2021-1-20 15:50
    不好意思,我详细没有研究过这方面,不能提供例程。 看看其他网友能不能提供参考例程。 不知道你的MCU型 ...

    好的,谢谢了,我看一下,再次感谢

  • avatar hhhhhhhaa
    回答时间: 2023-09-11 12:34:01
    安 发表于 2021-1-20 17:02
    很简单,用USB接口,通过FATFS读取文件就行了。

    好的,谢谢了,我研究研究

会员中心 微信客服
客服
回到顶部