打印
[其他产品]

单片机利用U盘升级固件的另一种方法

[复制链接]
1805|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 两只袜子 于 2024-7-2 11:13 编辑

单片机升级固件的方法有很多中,比如:ISP(在系统编程)、ICP(在电路编程)、IAP(在应用编程)等。



今天结合瑞萨单片机(RA4M3)、e2 studio开发环境给大家讲述的是单片机通过USB(U盘)升级固件的方法。



RA4M3通过USB实现固件升级


01



固件更新应用案例

(1)修复程序错误

(2)功能升级



02



首先必须规划好Bootloader和Application的空间分配。如下图所示,案例使用R7FA4M3AF3CFB,有1M的ROM。Bootloader从0x000000开始存储,结束地址为0x1FFFF,所占空间大小为0x20000;Application从0x20000开始存储,结束地址为0x000FFFFF,所占空间大小为0xE0000。






03



创建一个Bootloader工程,添加USB_HMSC、Flash、RTC和CRC等外设。其中USB添加主机大容量存储类(HMSC)驱动程序,它实现了USB HMSC接口,可从USB大容量存储设备中读取、写入和擦除数据。






04



使用RTC设置系统时间。






05



初始化flash驱动,然后在data flash中读取设备设置的log。






06



初始化USB驱动,等待USB设备插入,如果检测到有USB设备插入,将会根据文件"0:Put Image Here/update.txt"中的内容,找到相应的***.srec文件,并打开文件读写数据(将文件内容解析后烧写到Application对应的地址空间),读写完成后将文件名改为"0:Put Image Here/loaded.txt",表示已完成数据读写。






07



根据信息类型擦除data flash中的数据,擦除成功后写入新的设备设置参数。





08



在属性→设置中输出srec格式文件作为Bootloader烧录文件。






09



将Bootloader烧录到EK-RA4M3开发板上。首先,利用J-Flash Lite将RA4M3整片擦除,然后将ra4m3_hmsc_noRTOS.srec烧写到芯片中,由于此时app部分内容为空,红色LED闪烁(按下reset大概10秒后,红色LED闪烁)。






10



打开e2 studio新建Application工程,用来验证可以通过Bootloader成功升级Application,若成功升级,三颗LED灯会不停地闪烁。






11



打开memory_regions.ld文件,FLASH_LENGTH = 0x100000;更新为FLASH_LENGTH = 0xE0000;



由于Bootloader占用了0x20000大小,因此对于EK-RA4M3来说,仅剩下0x100000-0x20000=0xE0000大小可供Application使用。






12



Application工程生成srec格式文件,下图红框位置勾选 Section: -j .text & -j .data,使得application project仅生成code flash对应的内容。






13



准备一个U盘(FAT32格式),在里面建一个文件夹,命名为“Put Image Here”,将RA4M3_BLINKY.srec文件添加进去






14



update.txt文件里面添加RA4M3_BLINKY.srec






15



将U盘插入,开发板上电,当前运行的代码是Bootloader,由于此时尚未执行Application升级,因此LED2常亮,按下复位键,使得Bootloader重新运行,执行Application代码升级,可以看到LED灯按照RA4M3_BLINKY程序闪烁。将U盘插回电脑查看“Put Image Here”文件夹,可以看到update.txt变为loaded.txt,程序升级成功。




看到这里,你掌握了吗?

使用特权

评论回复
沙发
nuan11nuan| | 2024-7-18 15:44 | 只看该作者
单片机利用U盘升级固件是一种常见的固件更新方法,尤其适用于那些不具备网络连接或远程更新功能的嵌入式系统

使用特权

评论回复
板凳
gra22ce| | 2024-7-18 16:50 | 只看该作者
确保单片机具备USB主机功能,或者可以通过外部USB主机控制器(如USB HUB芯片)连接到U盘。准备一个格式化为FAT32文件系统的U盘,并将固件文件(通常是二进制或hex格式)复制到U盘中

使用特权

评论回复
地板
hight1light| | 2024-7-18 18:05 | 只看该作者
编写单片机的固件升级程序,该程序需要能够识别U盘、读取固件文件并将其写入单片机的Flash存储器

使用特权

评论回复
5
teaccch| | 2024-7-18 20:23 | 只看该作者
单片机启动后,程序首先检测是否有U盘插入。这通常通过USB主机控制器的中断或轮询机制来实现。一旦检测到U盘,单片机初始化文件系统驱动,挂载U盘的文件系统。在U盘的根目录或指定目录中查找固件文件。固件文件的名称和路径通常是预先定义好的。读取固件文件的内容。这可能涉及到文件的打开、读取和关闭操作。将读取到的固件数据写入单片机的Flash存储器。这通常需要擦除现有的固件区域,然后逐块写入新的固件数据。固件写入完成后,单片机可以重启,加载新的固件

使用特权

评论回复
6
ewyu| | 2024-7-18 22:00 | 只看该作者
在写入固件之前,计算固件文件的校验和,并与预先存储的校验和进行比较,以确保固件文件的完整性

使用特权

评论回复
7
清芯芯清| | 2024-7-19 08:00 | 只看该作者
在固件写入过程中,确保Flash存储器的写保护机制,防止意外断电导致固件损坏

使用特权

评论回复
8
twinkhahale| | 2024-7-19 10:00 | 只看该作者
在固件升级失败时,提供回滚到旧版本固件的机制

使用特权

评论回复
9
yuliangren| | 2024-7-19 11:10 | 只看该作者
提供用户界面(如LED指示灯、LCD显示屏或按键),指示升级进度和状态。在升级过程中,避免用户操作,以免干扰升级过程

使用特权

评论回复
10
canfeil| | 2024-7-19 13:03 | 只看该作者
在设计固件升级程序时,应考虑到电源稳定性,避免在升级过程中断电。确保固件文件的安全性,防止恶意固件的写入。在生产环境中,应制定详细的固件升级流程和备份策略,以应对可能的升级失败情况

使用特权

评论回复
11
hhdhy| | 2024-7-25 19:10 | 只看该作者
确保单片机的固件中包含USB驱动程序和文件系统驱动程序(如FAT文件系统驱动)

使用特权

评论回复
12
9dome猫| | 2024-9-28 12:45 | 只看该作者
OCI芯片的推出预示着光学I/O技术与现有计算技术的融合。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2055

主题

7455

帖子

10

粉丝