电调供应商:飞盈佳乐 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口配置为通用开漏输出,硬件上需要上拉