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,微信公众号:周立功单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机通过USB升级固件的方法

    单片机升级固件的方法有很多中,比如:ISP(在系统编程)、ICP(在电路编程)、IAP(在应用编程)等。
    的头像 发表于 01-11 09:37 584次阅读
    <b class='flag-5'>单片机</b>通过USB升级<b class='flag-5'>固件</b>的方法

    STM32单片机实现固件在线升级(IAP)

    1,固件升级方案综述单片机固件升级方式有很多种。1、ICP:简单说就是在单片机开发时使用烧录器升级程序,比如使用J-Link烧录
    的头像 发表于 12-16 08:00 832次阅读
    STM32<b class='flag-5'>单片机</b>实现<b class='flag-5'>固件</b>在线升级(IAP)

    stm32和51单片机的区别

    架构,STM32单片机具有更高的运行速度和更好的性能,可以运行复杂的任务。而51单片机的性能较低,只适合一些简单的任务。 存储 STM32单片机
    发表于 11-20 13:18

    单片机实现更简单的LCD设计

    电子发烧友网站提供《单片机实现更简单的LCD设计.pdf》资料免费下载
    发表于 11-17 09:29 0次下载
    <b class='flag-5'>单片机</b>实现更<b class='flag-5'>简单</b>的LCD设计

    FPGA和单片机的区别

    单片机和FPGA的区别 FPGA偏向于硬件电路,是用来设计芯片的芯片(FPGA)。通过硬件编程语言在FPGA芯片上自定义集成电路的过程; 单片机偏向于软件,是在已有的固化电路的芯片(单片机
    发表于 11-14 15:30

    GD32单片机STM32远程下载手机程序升级固件下载局域网网页升级工具

    完成STM32单片机的升级。 自动编写BootLoader完成固件升级。如果需要远程升级功能,需要BootLoader完成联网的功能,需要的代码空间比较大。并且需要一定的技术积累才能完成
    发表于 11-10 15:03

    STC8单片机可不可以不用单片机断电直接下载?

    STC8单片机可不可以不用单片机断电直接下载
    发表于 11-02 08:08

    怎样单片机编写bootloader?

    怎样单片机编写bootloader
    发表于 10-30 07:45

    请问STC8单片机做显示陀螺如何更新显示字体?

    STC8单片机做显示陀螺如何更新显示字体?
    发表于 10-17 06:33

    单片机与labview做的上位通信,labview的数据无法单片机的原因?

    [i]​我用labview做了一个上位波形显示的界面,用串口助手与labview通信时,数据可以正常收发,用单片机与串口助手通信时,数据也可以正常收发,但是当单片机与labview通信时,labview的数据无法
    发表于 09-28 06:08

    初学单片机的40个实验分享

    初学单片机的40个实验
    发表于 09-25 08:12

    使用STM32安全启动与固件更新

    STM32 X-CUBE-SBSFU 软件包已经发布,提供了安全启动(Secure Boot)和安全固件更新(SecureFirmware Update)功能。安全启动和安全固件更新使
    发表于 09-11 07:35

    PSA固件更新API 0.7资料

    方面的总和造成了重大的集成和维护挑战,其中有N个设备SDK需要与M更新客户端集成。 本文档描述了用于更新固件的标准接口。通过为固件更新提供
    发表于 08-09 06:22

    单片机的映射地址0-1FFFF范围只是单片机看的?有意思吗?

    对于外设是16位的,地址范围只有0-FFFF吧?单片机的映射地址0-1FFFF范围只是单片机看的吧?没什么意义啊?
    发表于 06-27 08:09

    血手滑鼠固件更新及DPI设定工具下载

    血手滑鼠固件更新及DPI設定工具.exe
    发表于 05-30 09:09 0次下载