原标题:STM32在线升级之 QiFreeUSBS

写在前面

作为 MCU程序开发者,我经常使用的下载方式是 SWD,然后就是串口。其实我们都知道还有其它的如 JTAG, ISP等常用下载方式,这就是萝卜白菜各有所爱了。我之所以钟情与 SWD下载主要是因为 SWD只要两根线就够了,而且支持在线调试。而串口下载其实更适合生产,而不是开发。

但是你有没有想过,一旦你的产品进入了终端用户手中,而突然有一天你发现其软件中有一个 BUG,影响又比较大,那么你会希望将已经卖出去的产品召回吗?或者你研发的是一个新产品,为了抢占市场,许多功能需一时半会还不能完善,可能是几个月,那么你愿意等几个月之后再推出产品吗?

由于是软件上的问题,所以我们很自然会想到让用户自己去升级软件,也就是。但其实我们开发常用的那几种下载方式并不适合终端用户,如果你让用户专门去买一个下载器,如果是我我肯定是不能接受的。我希望尽可能简单的升级方式,就好像手机刷系统一样,不需要什么下载器,一根 USB线搞定。

其实 ST早已经推出了基于 USB的升级方式,即 DFU。不过使用 ST的 DFU升级存在几个问题,且不说 ST自己的上位机是面向开发者的还是面向终端用户的,除非你乐于使用 ST的上位机软件进行升级,如果你是想自己开发一个上位机总不能只支持 Windows系统吧,而且现在苹果这么火,难道你就不想支持苹果系统吗?之前我自己做 DFU升级我就发现,上位机做出来之后驱动还是个问题。于是我觉得自己要另起炉灶了,这才有了现在的 USBS升级程序!

USBS的全称是:"USB Storage",具有一下特点:

一、只要你的操作系统支持 U盘原则上都可以使用,目前已经测试了 Windows、Ubuntu跟苹果;

二、可通过 PC端软件配置所使用的 IO并设置其余 IO的默认输出,也就是说检测 IO跟 指示 IO用户可以自定义;

三、自带不依赖外部 EEPROM的加密算法, 32B加密数据确保程序读到另外一颗 IC上不能运行;

四、为 App提供单独的加密算法(32B),用户可通过 PC软件设置加密 "licence"。

那么下面我就来说是 PC端软件怎么使用。

USBS Beta的使用

软件稍后在介绍,这里先告诉大家怎么使用 USBS。

从网上下载的软件解压之后得到 ""目录,其中包含如下内容:

双击 "QiFreeUSBS.exe"运行配置程序,程序运行界面如下:

这个时候你要先做一件事,就是确定你自己使用哪个 IO来检测是否进行升级 (KEY),以及你使用哪两个 IO来指示(LED),KEY信号决定是升级固件还是引导 App,所以必须设置,LED仅仅是状态指示,可以不设置。如我现在的设置如下:

KEY : PD6 //低电平有效

LED1: PC12 //低电平有效

LED2: PA13 //低电平有效

配置好界面应该为:

注意,如果你希望 KEY为低电平的时候进行升级请讲 KEY后面的 Low选上!

然后点击 "Choose"选择 usbs目录下的 "QiFreeUSBS_V1.20.8_Beta.bin"文件,最后点击 "Signiture"就会在当前目录下生成 "USBS_QiFreeUSBS_V1.20.8_Beta.bin"文件,下面就是我们要想办法把这个新的 bin文件烧写到我们的 IC里边。由于我现在测试的板子使用 SWD下载需要 ,所以我在这里算用串口下载,下载工具为:MCUISP,这个工具相信很多人都用过。但如果直接下载 bin文件将会提示:

读出的选项字节:

A55AFF00FF00FF00FF00FF00FF00FF00

程序文件不是0x8000000和0x20000000区域的

所以我需要将 斌文件转成 hex文件。由于我电脑里边安装了 J-Link,所以我选择使用 J-Link进行转换。打开 "J-Flash ARM",直接将 "USBS_QiFreeUSBS_V1.20.8_Beta.bin"拖到里边,当你看到下面这个界面的时候:

将 "Start address"设置为:"08000000",然后点击 OK。之后你讲看到下面这个界面:

如果你的 Address这里不是 8000000,那你肯定是操作错误了。然后选择下面的菜单:

保存成 hex文件就可以了。这样我就得到了文件: "USBS_QiFreeUSBS_V1.hex",接下来就可以使用 MCUISP进行下载了。下载完成之后链接串口(USART1),并打开 助手,重新上电将出现以下信息:

QiFreeUSBS version 1.20.8

* Author : merafour.blog.163.com

* Date : 2/26/2015

Date: 18:55:40--Apr 4 2015

F_SIZE:0200

KEY : PD_6

LED1: PC_12

LED2: PA_13

_low:1

key_low:1

Flash:256KB

swd:Enable

GPIOA:0000 Enable:0000

GPIOB:0000 Enable:0000

GPIOC:0000 Enable:0000

GPIOD:0000 Enable:0000

GPIOE:0000 Enable:0000

GPIOF:0000 Enable:0000

GPIOG:0000 Enable:0000

Board:QiFree

Date:2015.04.04 18:57

0x080000F0:V 1.20.8

main ...

而且可以看到 LED在闪烁。当然由于不是录制视频就只有我可以看到了。但是我选择了两个 LED,结果却只有一个 LED亮,原因是我把 SWD给选上了,而SWD使用了 PA13口,所以需要关闭 SWD即不勾选。此时连上 USB先可以在资源管理器中看到一个新的磁盘:

双击会提示格式化,

点击开始进行格式化,格式化完成之后将 mac目录下的 "USART.bin"文件拷贝进去,注意:必须是根目录,不要往里边存放其它文件!然后断开USB线,将可以从串口看到不停地在打印:"QiFree USBS test..."。其main函数如下:

#define VectTabOffset 0x00005000

int main(void)

{

NVIC_SetVectorTable(NVIC_VectTab_FLASH, VectTabOffset); // &__Vectors

delay_init();

NVIC_Configuration();

_init(115200);

while(1)

{

printf("QiFree USBS test...\r\n");

delay_ms(500);

}

}

为了使 App可以正常运行,我们还需要修改 Flash地址:

将 IROM1中的 0x8000000改为 0x8005000,如上图。

但有些人可能觉得 64KB太小,如果你是 128K或者 256K或者更大容量的可以通过升级到 Free版本使用更多的空间。

升级到 Free版本

保存前面的配置,将下拉框中的 “Beta”改为 “Update”,点击 "Choices"选择 usbs目录下的 "Update_QiFreeUSBS_V1.20.8_Free.bin"文件,在点击 "Signiture"就会在当前目录下生成 "USBS_Update_QiFreeUSBS_V1.20.8_Free.bin"文件。然后通过 USB先连接电脑,将新生成的 bin文件拷贝到磁盘根目录,然后断开 USB连接会将 USBS升级到 Free版本,升级过程中 LED会亮然后闪烁再灭掉,当你再次看到 LED闪烁时表示升级完成。如果你不关心 LED指示,将板子断电并在 USB没有连接的情况下上电等个 30秒就可以了。然后断电并重新连接 USB线之后在上电你就可以在格式化的时候看到显示的是你的 IC实际 Flash的大小了:

由于我用的是 512K Flash的 IC,所以显示 512KB。这样你就可以使用更多的空间了。

其它设置

也许你已经注意到配置软件界面上还有 “Licence”和 “Enable IO”可以勾选,勾选 “Licence”界面将变成:

也就是说此时需要提供 MCU的 ID号以便生成供 App使用的加密信息。并且此时 “User Licence”是可以设置的,点击 “Auto”将自动生成一个 Licence。然后 App中使用相同的算法跟 Licence计算加密信息在匹配,匹配不过则 App拒绝运行并提示错误,从而达到加密的目的。

如果你勾选 “Enable IO”将看到这样的界面:

你可以在这里设置每一个 IO口的电平。这是考虑到在某些应用中 USBS在运行时某些 IO需要特定的电平(而不是默认)而特别设计的。"Enable"跟"Value"都是十六进制数,每个 bit对应一个 GPIO,如果你是开发者我想你应该看得明白怎么去设置。

可能你还注意到在 usbs目录下还有一个 "Update_QiFreeUSBS_V1.20.8_Beta.bin"文件,该文件是用来将 USBS升级到 Beta版本。因为软件在升级的过程中可能由于某种原因修改 USBS自身使用的加密算法,而 Free版本需要 Beta版本提供加密信息,所以新版本推出如果直接升级到 Free版本可能会导致校验错误而使得程序不能继续往下运行。

最后需要说明的是,由于 USBS需要用到 USB接口,管脚为 PA11跟 PA12(请查阅 资料),所以如果你用的 IC不支持 USB那么 USBS升级你是用不了的。

责任编辑:

stm32f4 usb 升级程序_STM32在线升级之 QiFreeUSBS相关推荐

  1. 火狐怎么在线升级 火狐浏览器在线升级方法分享

    想要尝试最新版本的火狐浏览器,不仅可以前往火狐官网下载最新版本的客户端,还可以将现有的版本进行升级.那么,火狐该怎么在线升级呢?下面小编就来分享一下火狐浏览器在线升级的方法,不清楚具体操作的朋友可以稍 ...

  2. iap升级问题 stm32f103r8_STM32在线升级OTA,看这一篇就够啦~

    EDA365欢迎您登录! 您需要 登录 才可以下载或查看,没有帐号?注册 x 本帖最后由 Ber_thaw99 于 2020-12-3 13:33 编辑 " \; [( t3 j4 {&qu ...

  3. 苹果手机软件升级密码_iPhone在线升级好?还是电脑上升级好?看完不再纠结

    手机已经成为每个人的必需品,除了一些非智能机.智能机都是需要更新系统的,比如我们iOS12更新到iOS13. 更新系统会带来一些新的版本号,新的功能,修复此前系统中的bug,优化手机性能等等.正常来说 ...

  4. android 在线升级apk,Android 在线升级APK

    @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC ...

  5. STM32F4单片机bootloader及在线升级IAP基本原理

    STM32F407基础总结系列(三) STM32F4bootloader及在线升级IAP基本原理 一 .前言 二.背景知识补充 2.1 系统启动过程 2.2 内存映射分布 三.bootloader 3 ...

  6. 基于串口通信的DSP应用程序在线升级方法

    摘  要:为解决特殊场合DSP程序升级困难的问题,以TMS320F28035为例,介绍了一种基于串口通信的适合于TMS320C2000系列DSP实现程序更新的在线升级方法.描述了该在线升级方法的基本思 ...

  7. STM32 IAP 在线升级原理全解析

    点击左上角的"关注",定期更新 STM32 最新资讯,总有你想要的信息! STM32 IAP 在线升级原理全解析 1. 什么是 IAP?    IAP(In-Application ...

  8. Eclipse 版本升级:如何不卸载旧版本 Eclipse 实现在线升级到最新版本?

    文章目录 前言 一.网上没"升级 Eclipse"相关资料吗? 1.1.相关资料很少,我也生气 1.2.升级新版本与在线升级插件傻傻搞不清 二.版本升级准备 2.1.Eclipse ...

  9. 基于FPGA的在线升级

    基于FPGA的在线升级 在线升级的意义 在线升级的策略 整体框架 总结 参考文献 结束语 在线升级的意义 首先什么是FPGA的在线升级? 所谓FPGA的在线升级其实就是不对FPGA进行常规意义下的下载 ...

最新文章

  1. [03]常用正则表达式
  2. 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 2.)(python/c/c++版)(笔记)
  3. [NOI2017]泳池
  4. TextView之二:常用属性
  5. 只针对异常的情况才使用异常_如何以及何时使用异常
  6. 二维码研究综述--传统图像处理方法
  7. mysql安装版卸载_MYSQL安装与卸载(一)
  8. 数学建模笔记(七):综合评价模型
  9. 小游戏《堆木头》开发
  10. html5广告的版式设计,永不过时!5种网页版式设计分享
  11. 贴图知识汇总: 漫反射贴图、凹凸贴图、高光贴图、 AO贴图、环境贴图、 光照纹理及细节贴图
  12. (47)【漏洞发现】漏扫工具合集、WAF绕过分类
  13. 挖掘长庄股及案例分析
  14. java用面向对象写吃货联盟,火星车(面向对象思想编程)
  15. C语言中的二等公民在C++是如何翻身的?
  16. linux串口输出系统日志,linux系统连接串口工具打印log
  17. 华为云平台web架构部署
  18. 【电源模块】ME3116 DCDC降压模块设计
  19. jvm常用参数 对jdk7 jdk8
  20. 如何通过txt文本编辑一个页面

热门文章

  1. 如何使用万能地图下载器下载矢量路网
  2. 无锡设计培训——做室内设计师的几点建议
  3. java毕业设计的自助旅游导航系统mybatis+源码+调试部署+系统+数据库+lw
  4. 移动端touch事件---利用bootstrap实现轮播图手指左右滑动事件
  5. 让流媒体服务SRS支持P2P通信
  6. 仿抖音--音乐裁剪控件,android实现IOS版本效果
  7. 2018排行VR眼镜哪个好,什么VR眼镜好?VR评测:UGP VR眼镜就是牛!
  8. python交互界面实例_什么是“面向对象”程序设计-以Python为例
  9. 带你深入了解机器人热潮中的伺服系统
  10. Flutter 1.0 正式版: Google 的跨平台 UI 工具包