什么是在线升级?
在开发阶段,我们在调试单片机时更换程序,通常是通过下载器(仿真器),擦除保存程序的Flash,然后重新编程。
那么如果是在量产阶段,成品已经组装好,或者已经到了用户手中,当程序需要再次更新的时候8051片上可编程系统原理及应用,就没有办法通过下载器更新了。这时可以考虑通过外设通信接口(UART/USB/SPI/I2C/CAN等)实现升级。
如何控制升级过程?
为了保证升级的可重复性和安全性,从Flash中划分出一小块区域用于升级,我们称之为Boot程序,或Bootloader。该程序的作用是管理升级、判断是否升级、接收升级数据包和Flash烧写、应用的跳转控制、升级过程中的异常处理。
应用程序存储在Flash的另一个区域,应用程序独立于Boot程序。实现在线升级的前提是Boot程序和应用程序可以相互跳转,或者软件可以控制复位后先执行哪个程序。
需要考虑的问题:
如何进入Boot程序?
设置复位后加载引导程序
确定是否需要升级?
比如触发某个IO口级别(长按升级按钮),或者通讯握手成功等8051片上可编程系统原理及应用,条件满足,等待升级。当条件不满足时,跳转到应用程序运行。
数据包接收和Flash编程
根据接收和写入Flash的数据协议段,必须保证传输的正确性和Flash操作的正确性,最好在Flash烧写后再次验证。如果传输出现错误(校验码不匹配),需要申请重传。
应用跳转
不满足升级条件或升级完成后,重置设置并加载应用程序,然后重新启动。
下面介绍8051核心N76E003芯片通过串口进行在线升级。
1个Flash分区(共18KB)
LDROM:划分4KB作为Boot程序(芯片可分为1KB/2KB/3KB/4KB,比较灵活),新唐把这部分Flash称为LDROM
APROM:划分14KB为应用程序,新唐将这部分Flash称为APROM
2 在引导程序和应用程序之间切换
在应用程序中,设置 BS 位,然后复位软件。复位后,它从 LDROM 启动并加载 Boot 程序。
在 Boot 程序中,将 BS 位清 0,然后由软件复位。复位后,从 APROM 启动并加载应用程序。简单的。
3 接收升级数据包和APROM编程
数据传输这里我指的是Xmodem文件传输协议,每个128字节的payload,
如果最后一次传输不足 128 字节,则添加 0xFF。
再解释一下为什么要提到Xmodem协议,因为N76E003 Flash使用128字节为1页,擦除是按页进行的。
串口接收,采用中断方式,接收到一个数据包后,如果验证成功,写入Flash,回复ACK,准备接收下一个数据包(如果有);如果验证失败,回复NAK,并向上位机申请重传。
4 异常处理
如果升级过程中出现异常,如串口线脱落或MCU掉电,如何恢复升级?
因为考虑到掉电前的状态,升级状态需要保存在Flash中,使用LDROM的最后128字节(4KB)来保存升级状态。需要三个状态。默认值为 0xFF。(未编程),升级失败,升级完成。
进入Boot程序时,先读取这个状态。如果升级未完成,请等待主机发出升级命令。如果升级已经完成,请稍等片刻。如果主机没有升级命令,切换到应用程序。
在升级过程中,升级状态始终为失败。当所有数据包都正确写入APROM后,升级状态变为完成。
5 电脑软件
只需选择串口,点击连接,选择要升级的BIN文件,开始升级。由于我开发的产品是内置锂电池供电,通过Micro-USB接口充电,串口信号直接拉到Micro-USB插口,外接PC通过TTL-USB 适配器电缆。由于是内置电池,应用程序收到升级命令后,切换到Boot程序运行升级。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 欧资源网