模拟BLHeli 电调固件升级,实现电调的空中升级

电调供应商:飞盈佳乐 15A 4in1 多轴电调 BLHeli-S 

用上位机刷固件的流程:

正常使用BLHeli刷电调固件的时候需要用到arduino nano转接板,然后刷转接板的固件

 转接板的固件刷完后,则正常连接电调,点击connect成功连接后,点击falsh other刷电调的APP固件,falsh BLHeli 刷bootload的固件

注意的是arduino nano转接板的D3 连接电调的S1~S4,单个连接,连接如下图

 正常连接,并且能读取出电调的参数信息

 以上用上位机刷电调固件的流程就是 电调固件一>上位机一>arduino nano转接板一>电调

参考上面的操作,想要空中升级电调固件,即是在飞控代码里添加代码替代arduino nano转接板的角色,流程:电调固件一>上位机一>服务器一>飞控外部falsh一>电调,此处忽略固件从上位机到飞控外部falsh的过程,相当于固件已经存放在飞控外部falsh,我们只需要从中拿出按电调BootLoader的要求写入即可。

原理上跟读和写falsh操作一样,只是模拟转接板的代码,根据交互协议去做读写flash。

此款电调的波特率19200,BootLoader与arduino nano转接板的交互是软件模拟串口,单总线,软件上IO需要配置通用开漏模式,硬件上IO需要接上拉电阻。做电调控制的是4个芯科的51单片机EFM8BB21F16G,实际上就是对此款芯片进行IAP空中升级。

关于电调的BootLoader,按我了解到的供应商会根据每个客户去修改CRC16的校验初始值与多项式的值,至于BootLoader协议中的指令则不知道通不通用,这个最好自己先用上位机软件升级,然后用串口抓数据判断协议指令。

例如以下是分析抓取的数据:

 然后得出该电调的交互指令:

 读写电调flash的数据格式:

此款电调需要注意的:

1、擦除区域为0X00~0X1BFF,0X1C00后是BootLoader的地址。

2、升级过程中有可能失败,主要是擦除过程中数据出现错误或者掉电了,导致电调的51芯片flash擦除了,无法再次访问,需要条IC引脚刷固件,或者给回供应商刷固件

3、交互数据采用的是单总线,IO口配置为通用开漏输出,硬件上需要上拉

猜你喜欢

转载自blog.csdn.net/cuncun666/article/details/129387572
今日推荐