基于electronbot作品bootLoader设计

news2024/11/23 3:31:27

文章目录

前言

一、芯片程序区规划和流程

1、flash区规划

 2、两区运行流程

3、bootLoader代码体现 

 4、electronbot代码体现:

二、bootLoader代码设计

1.下载程序步骤

2.通讯协议格式

 三、libusb开发及需要注意的事情

1、bootLoader复合设备

 2、electronbot复合设备

3、注意的事情

四、成功演示

总结



前言

说到electronbot,不得不提及稚晖君,本人一直以来也想做一个能动,有声音,有显示,能遥控等功能的玩具,投入成本和懒散一直搁浅,看了稚晖君electronbot后,感觉是入手不错的选择,模具和结构也不用考虑了,同时被他这种全栈式开发精神所打动!

看了该视频演示,第一个想法就是小人装配好之后,如果有新的固件更新,再打开就显得麻烦,所以借用usb通道进行固件更新显得很必要。


一、芯片程序区规划和流程

1、flash区规划

boot和electronbot两个区在flash中划分如下图所示:

 2、两区运行流程

3、bootLoader代码体现 

STM32F405RGTx_FLASH.ld 里修改:

跳转应用区代码判断:

startup_stm32f405xx.s里

   

void early_start_checks(void) {
  uint32_t _reboot_cookie;
  _reboot_cookie=*(uint32_t *)0x8008188;
  if(_reboot_cookie == 0xcafebeef) 
  {
  //   __set_MSP((uintptr_t)&_estack);  //没有ucos 不需要此行代码
    // printf("tttt begin...\r\n");
    __set_MSP(*(uint32_t *)0x8008000);
    void (*electronbotApp)(void) = (void (*)(void))(*((uint32_t *)0x8008004));
    electronbotApp();
 
  } 
} 

 4、electronbot代码体现:

 STM32F405RGTx_FLASH.ld 里修改:

makefile里 增加宏定义:

system_stm32f4xx.c里修改 VECT_TAB_OFFSET 为 0x8000

 应用区代码标志 startup_stm32f405xx.s里 在程序收到pc上位机通知下载程序时,改写该地址的值后,再复位,即可进入bootLoader代码主流程。

 

至此,框架方面的事宜已经完成。 

二、bootLoader代码设计

1.下载程序步骤

框图如下:

2.通讯协议格式

usb通信数据包为了兼容electronbot代码,在收发缓存机制保持一致,格式如下:

 

 三、libusb开发及需要注意的事情

1、bootLoader复合设备

bootLoader复合设备为CDC+WINUSB  接口有三个,CDC占了两个,winusb占了一个

第一次枚举后,需要用zadig-2.7.exe 软件替换驱动,才能与上位机libusb开发进行通讯

 2、electronbot复合设备

 electronbot复合设备为MSC+WINUSB  接口有三个,MSC占了一个,winusb占了一个

 第一次枚举后,需要用zadig-2.7.exe 软件替换驱动,才能与上位机libusb开发进行通讯

3、注意的事情

由于boot区与electronbot区枚举的复合设备不相同,防止电脑识别冲突,故采用了不同的vid 和pid

所以在两区进行跳转时,pc端上位机需要重新进行重新连接,该过程中要作好资源回收和重建。

四、成功演示

electronbot _bootLoader演示

总结

整个过程还是比较顺利的,需要注意的就是pc端重连策略和延时处理上,以及两区跳转时遇到一个问题就是electronbot区进行jump bootloader时没有成功,可能与freertos有关系,没有进行深究,用了NVIC_SystemReset() 替代解决了。

整个代码均已上传到github:https://github.com/wenyezhong/electronbot

branch :  electronbot_bootLoader_design_branch

测试代码:
boot代码:2.Firmware/bootLoader(HS)
应用代码:2.Firmware/electronbot_testBootLoader
上位机 :  pc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101671.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础算法系列--[基本数据结构KMP]

文章目录前言链表单链表双链表栈和队列栈队列单调KMP前言 今天要搞的是基本的一些数据结构,当然咱们这个不是那么“正经”。当然今天也没啥代码,因为太简单了(其实我也想水一下~) 链表 单链表 单链表这个东西,应该…

Prometheus+Grafana

K8S prometheusK8S1.Prometheus(普罗米修斯)2.Prometheus可以做什么3.Prometheus的特点4.prometheus 相关组件二、prometheus与zabbix的区别zabbix架构区别三、prometheus架构分析1.TSDB2.时间序列数据库的特点3.prometheus 相关组件1.prometheus 核心组…

【计算机网络】实验五 网络层与链路层协议分析(PacketTracer)

一、实验目的 通过本实验,进一步熟悉PacketTracer的使用,学习路由器与交换机的基本配置,加深对网络层与链路层协议的理解。 二、实验内容: 4.1 路由器交换机的基本配置 打开下面的实验文件,按提示完成实验。 4.2…

直流微电网中潮流(Matlab代码实现)

目录 1 概述 1.1 直流电网中的潮流 1.2 创新点和相关工作 1.3 本文结构 2 数学/网络模型 2.1 主-从操作 2.2 孤岛运行 3 牛顿法 4 案例及Matlab代码实现 1 概述 潮流是一个非线性问题,需要用牛顿法求解具有恒定功率端子的直流微电网。本文提出了牛顿法在…

曙光来临!Nature终于发现了新冠特效药?或将彻底终结新冠时代!

百趣代谢组学文献分享:2022年即将过去,随着疫苗的全面接种和三年以来“动态清零”的坚持,我们在应对新冠病毒如潮水般的攻击中取得了阶段性成果。虽然大家陆陆续续投入到正常的工作生活中,但是我们都知道新冠并未被“打败”&#…

MySQL中这14个有用的小知识,快学起来吧

前言 我最近用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。 1.group_concat 在我们平常的工作中,使用group by进行分组的场景,是非常多的。 比如想统计出用户表中&…

如何在产品开发中讨论概念设计?

每当你看到一辆在路上行驶的汽车、书桌上的笔记本电脑、工业包装生产线、医院设备、家用仪器和其他形式的概念设计创意产品会感到难以置信,这就是我们在产品开发中讨论概念设计的原因。 概念设计是一个尚未解决或到目前为止尚未令人满意的问题。这是一个深思熟虑的解…

研究区域制图 | 在 ArcGIS Pro中创建地图布局

研究区域制图 | 在 ArcGIS Pro中创建地图布局 数据准备 首先需要两个图层,一个是市区图层,一个是省行政区划图层,我这里以吉林省以及吉林省长春市为例 新建布局 选择横向A5即可 添加参考线 不知道你们知不知道这个功能,反正小…

kotlin协程笔记:Dispatchers

Kotlin 的 launch 会调用 startCoroutineCancellable(),接着又会调用 createCoroutineUnintercepted(),最终会调用编译器帮我们生成 SuspendLambda 实现类当中的 create() 方法。 public fun CoroutineScope.launch(context: CoroutineContext EmptyC…

【JVM】本地方法栈与堆与方法区

文章目录1. 本地方法栈2. 堆3. 方法区1. 本地方法栈 本地方法栈和虚拟机栈有点类似,均具有线程隔离的特点以及都能抛出StackOverflowError和OutOfMemoryError异常。 但是不同之处在于本地方法栈服务的对象是JVM执行的native方法,而虚拟机栈服务的是JVM…

[附源码]Nodejs计算机毕业设计教师职称评定系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

免费提供POSMV的GNSS数据解算服务,验潮仪丢失的一种补救

前两天有个网友问干活的区域附近是否有长期验潮站,因为他的临时验潮仪丢失了,随后问了一下搞水文的同事,他推了一个网址: http://publictide.nmdis.org.cn/tide?SiteGroup3&TideType0,中文名叫:潮汐潮…

C型利钠肽 ,101135-67-5

Bz-VGR-pNA, chromogenic substrate for trypsin and for bacterial trypsin-like proteases.Bz-VGR-pNA,胰蛋白酶和细菌胰蛋白酶样蛋白酶的显色底物。 编号: 127015中文名称: C型利钠肽 (TYR0)-C-PEPTIDE (DOG)英文名: (Tyr0)-C-Peptide (dog)CAS号: 101135-67-5单…

机房动环监控系统3大价值,第一个太惊艳了

在中小学、大学院校中,机房已经是不可缺少的部分,但由于管理缺陷、设备复杂等缘故,学校机房得不到安全保障。 因此,要实现学校机房监控系统,来对机房的运行情况实时监测,以此提高风险预防及设备运行环境质量…

C++利用模板实现消息订阅和分发

解耦是编写程序所遵循的基本原则之一,多态是提高程序灵活性的重要方法。C语言支持重载,模板,虚函数等特性,为编写高性能可扩展的程序提供了利器。编写大型项目时,免不了需要各个模块之间相互调用,从而产生了…

【LeetCode题目详解】(四)20.有效的括号、225.用队列实现栈

目录 一、力扣第20题:有效的括号 1.解题思路 2.写出代码 3.完整代码 二、力扣第225题:用队列实现栈 1.思路分析 2.代码实现 3.完整代码 总结 一、力扣第20题:有效的括号 题目链接:20. 有效的括号 - 力扣(Leetc…

计算机毕设Python+Vue学生寝室管理系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

哈夫曼树的构造及应用

哈夫曼树的构造及应用 文章目录哈夫曼树的构造及应用带权路径长度哈夫曼树定义哈夫曼树的性质:构造哈夫曼树构造哈夫曼树存储及生成算法算法框架代码实操:应用: 哈夫曼编码带权路径长度 设二叉树具有n个带权值的叶子节点,那么从根节点到各个叶子节点的路径长度与相应…

【图像分割】模糊聚类算法FCM图像分割【含Matlab源码 084期】

⛄一、模糊聚类算法FCM简介 1 前言 图像分割是图像进行后续分析处理的基础,它将图像分成不同特征部分并获得所需目标,广泛应用于诸多领域.彩色多目标图像具有更为丰富的图像信息,目标色彩较多,且同一色彩的目标有时具…

统计学习方法 | 感知机

感知机是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取1和-1二值 感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型 一.模型介绍和学习策略 1.模…