0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何更简单的给单片机更新固件?

UtFs_Zlgmcu7890 来源:互联网 作者:丁德辉 2017-10-23 18:19 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

单片机已经焊接到电路板上时,如何更简单更便捷的为单片机升级固件便成了一件值得深思的问题。纵观市面上现有的大多数升级方式,不仅需要硬件支持,还需要专用的烧写工具或软件来升级固件,升级过程较为复杂。本文介绍了一种更简单更便捷的固件升级方式,不需要任何专用工具,只是简单的一个删除粘贴操作,便可实现固件更新

当程序运行时,按住指定的按键后按一下复位按键。就启动了升级程序,此时将单片机的USB从机端口连接电脑。在电脑中可以发现一个U盘设备,如图1和图2所示。

1 U盘显示

2 U盘文件

将原文件删除,然后将最新固件的bin文件复制到此U盘中,此时U盘中只有用户用于升级的bin文件。然后拔下USB线,复位重启,便可运行最新固件。

以上就是详细的升级步骤,相比其他方法更便捷也更简单。接下来以NXP公司的LPC54608单片机为例来介绍这种升级方法的制作流程。

1.硬件基础

此升级方法的制作至少需要单片机有一个硬件的USB从机。和足够的flash用来存放一段bootloade的代码。

2.编写USB驱动程序

首先要写好USB驱动程序,将片内FLASH的前半段用作代码空间,后半段用作存储空间。使电脑能将其识别为一个U盘,并能够进行读写操作。USB驱动的编写可参考官方例程。

3.对存储空间进行修改

在步骤2中,我们已经将FLASH的后半段用作U盘的存储空间,在LPC54608中,片内flash是512K,存储起始地址是0x40000;结束地址是0x80000。根据FAT文件系统的存储协议,存储起始地址开始的前几个扇区存放的是引导部分,FAT表项部分和根目录部分。数据是从根目录结束扇区的下一个扇区的开始存储。

在本步骤中,对程序的改进就是将数据扇区之前的几个扇区,放在RAM中,使0x40000地址开始存放的即为bin文件的数据。框图如图3所示。

3 存储模型

4.对存储内容进行修改

完成步骤3之后。每次接上USB线,电脑都要对u盘进行格式化,因为RAM区的数据为0,电脑需要从新格式化建立FAT文件系统并将存储的相关信息写到RAM中对应的区域。在window10的电脑中,格式化之后电脑还会在U盘中增加几个必要文件使我们写入的bin文件数据并不是从0x40000开始,因此要进行优化。

在程序初始化的时候。根据FAT的协议填充RAM区域数据。包括引导扇区,FAT表项和根目录。可以在引导扇区中优化FAT表个数和根目录大小来节省RAM空间。并在根目录中放入一个大小为整个U盘大小的bin文件,之后在FAT表项中填充所有可用的簇,使USB线连接上之后,电脑端不需要再格式化并如图1和图2所示。

5.编写bootloader

完成步骤4之后,大部分工作已经完成。接下来就要编写跳转函数来实现向用户程序的跳转。在LPC54608中,我们以flash的前32K用作升级程序的bootloader区域,就是0x0~0x8000之间。32K之后用作用户代码区域。

对于我们制作的U盘存储空间来说,0x8000处开始存放的就是用户bin文件。因此,我们只要在更新完固件后跳转到0x8000处执行程序就行了。跳转代码要包括SP指针的重新赋值,中断向量表的重映射。

6.增加按键判断

程序在上电之后,从0x0地址处取址,此处运行的是bootloader程序,程序在开始的时候判断按键是否按下,如果按下,就进入bootloader程序,如果没有按下,就跳转到用户代码。

至此,整个升级方法的时间就完成了!现在开始体验便捷的升级方式吧。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

原文标题:如何更简单的给单片机更新固件

文章出处:【微信号:Zlgmcu7890,微信公众号:周立功单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    编写简单高效单片机汇编程序

    通过中断方式来完成,在中断服务程序中处理各个事件,而不需要在主程序里繁琐地处理。 例如某些单片机的寄存器可以直接进行简单运算,而不需要额外指令,提高执行效率。 5、精简指令和内存管理 尽量减少多余
    发表于 11-24 07:00

    Bootloader固件升级的步骤

    一、Bootloader 概念及用处 1、BootLoader 是一段引导式程序,就是单片机启动时候运行的一段小程序,这段程序负责单片机固件更新,也就是
    发表于 11-19 07:41

    单片机原理及应用详解

    单片机(Microcontroller Unit, MCC)  是一种集成计算机核心功能(CPU、存储器、I/O接口等)的微型芯片,广泛应用于嵌入式系统中。以下是其原理及应用的详细介绍: 一、单片机
    的头像 发表于 08-11 13:57 1522次阅读

    单片机用什么封装

    单片机封装是将芯片内部电路与外部引脚连接并包裹保护的结构,不仅影响单片机的安装方式、适用场景,还与电路设计的紧凑性、散热性能密切相关。不同封装类型各有特点,适配从简单电路到复杂系统的多样化需求
    的头像 发表于 08-01 13:47 891次阅读

    什么单片机比较耐用

            在工业控制、户外设备、医疗仪器等场景中,单片机的耐用性直接决定了设备的稳定运行与维护成本。耐用的单片机通常具备宽温工作范围、强抗干扰能力、稳定的电源适应性和长寿命的硬件设计。深圳市安
    的头像 发表于 07-31 13:48 544次阅读

    怎么测单片机系统频率

    单片机系统频率是指单片机工作时的时钟频率,它直接影响单片机的运行速度和处理能力,准确测量系统频率对单片机应用开发、程序调试和性能优化具有重要意义。测量
    的头像 发表于 07-25 11:39 468次阅读

    单片机怎么驱动电机?

    在各类自动化设备和智能装置中,电机是重要的执行部件,而单片机作为控制核心,需要通过特定的方式驱动电机运转。单片机驱动电机并非直接连接即可,而是要根据电机类型和功率,搭配合适的驱动电路,才能实现稳定
    的头像 发表于 07-25 09:31 437次阅读

    单片机怎么烧程序

    单片机烧程序是将编写好的程序代码写入单片机内部存储单元,让单片机按照预设逻辑工作的过程,是单片机应用开发中不可或缺的环节。无论是简单的灯光控
    的头像 发表于 07-23 11:47 643次阅读

    KF32A136系列单片机产品介绍

    F32A136 系列单片机是基于 KF32 内核架构开发的单片机
    的头像 发表于 06-27 11:42 1662次阅读
    KF32A136系列<b class='flag-5'>单片机</b>产品介绍

    单片机科普总结,建议收藏!

    单片机(MicrocontrollerUnit,MCU)作为嵌入式系统的核心之一,在现代电子产品中无处不在。从智能家居、汽车电子,到工业控制、医疗设备,单片机支撑着无数智能化应用的发展。对于初学者
    的头像 发表于 04-07 11:58 4406次阅读
    <b class='flag-5'>单片机</b>科普总结,建议收藏!

    dlp3010更新固件失败的原因?怎么解决?

    通过2.1.0版本GUI 3010EVM-LC 更新固件,第一次在update firmware界面执行后GUI在 step2/3 卡主长时间没有反应。 掉电重启后3010 状态变成图中左下角所示 再次通过update f
    发表于 02-27 08:41

    什么是单片机的ADC接口

    在嵌入式系统和工业自动化领域,单片机(Microcontroller)作为核心控制单元,承担着数据采集、处理和控制的重要任务。其中,模数转换器(Analog-to-Digital Converter
    的头像 发表于 02-03 11:27 3718次阅读

    51单片机pwm和spwm

    51单片机pwm
    发表于 01-08 15:54 3次下载

    单片机Debug工具性能对比 单片机调试常用命令

    单片机(Microcontroller Unit, MCU)调试是嵌入式开发中的一个重要环节,它帮助开发者发现和修复代码中的错误,优化程序性能。不同的单片机和开发环境可能使用不同的调试工具和命令
    的头像 发表于 12-19 09:56 2152次阅读

    AirPods如何进行固件更新

    AirPods的固件更新通常是通过与iPhone、iPad或Mac等苹果设备连接时自动进行的。以下是更新AirPods固件的介绍: 一、准备工作 确保设备连接 : 将AirPods放入
    的头像 发表于 12-05 14:59 2801次阅读