基于electronbot作品bootLoader设计

文章目录


前言

说到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占了一个

所以electronbot native interface 索引为2

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

 2、electronbot复合设备

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

所以electronbot native interface 索引为1

 第一次枚举后,需要用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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值