蓝牙通讯 与 MCSDK协议浅析
电机调试的时候能够无线调试时非常爽的,我认为有以下两点:
1、在实际的电机调试场景里,电机都是要带负载的,有时候由于负载太大、太吵、太热的时候是很难受的,还有调试小车类的应用的时候就不用拉着几根串口线追着小车跑了
2、调试高压电机的时候稍有不注意会烧电脑的USB口,所以无线也可以避免这个问题(最多损坏蓝牙模块)。
一、nRF52840 Dongle 上位机安装 与 使用
1、安装nRF Connect for Desktop
下载链接
下载后无脑安装即可。
2、使用nRF52840 Dongle
打开nRF Connect for Desktop后,下载BLE
第一次插入Dongle就会询问是否要下载固件,直接同意就可以了
完成后就有以下界面,这里就可以选择设备并且通讯了!
扫描到的附近的蓝牙设备
连接设备 并且发送数据
接线框图
发送的数据由BLE模块使用串口打印出来,后续是将串口接到B-G431-ESC1上,从而控制电机
二、5-nRF52840 Dongle 与 B-G431B-ESC1通讯
1、接线确认
由于B-G431B-ESC1没有蓝牙功能,所以需要另外的蓝牙模块进行透传数据功能,接线框图如下。
查阅PCBA后,确认J3的3号脚是接到G431的
由原理图确认J3的3号脚是USART2 的 RX脚
2、蓝牙数据接收
经过一番查找,实验后确认ASPEP_HWDataTransmittedIT是接收数据后处理与缓存判断数据的接口,所以仿真查看。
大图
细节图
以上就完成了蓝牙数据的发送,与B-G431B-ESC1的数据接收
三、MCSDK协议浅析
在上文我们了解了ASPEP_HWDataTransmittedIT接口,可以看见传入的数据是个结构体aspepOverUartA,这个结构体很复杂,结构体里包结构体,没有协议文档,看透非常难,先从头开始看一下协议流程。
1、数据结构
ASPEP_Handle_t aspepOverUartA,数据结构
可见,有多个数据类型一致的buff,这些都是缓存的数据包,串口接到的数据会经过一系列处理,然后分为上一包、下一包等
最终协议数据控制包
跳转后发现:
typedef enum
{
available = 0,
writeLock = 1,
pending = 2,
readLock = 3,
} buff_access_t;
状态类型只有4种
#define ASPEP_HEADER_SIZE 4
数据包长4字节
所以控制协议包的有效协议总长5字节
根据控制包的数据流向,查找后,确认ASPEP_HWDataReceivedIT是协议的解析、调度功能函数处
2、MCSDK协议流程
Main 的MX_MotorControl_Init --> MCboot(pMCI) -->ASPEP_start(&aspepOverUartA)
这里开始使能整个串口协议栈,将串口数据的地址传入协议栈、修改协议栈状态等
在滴答定时器的Handler中不间断的去取处DMA中的数据 与 解析协议。并且在该Handler中也调度了电机控制的状态机
想要按照原有协议、流程去驱动、控制电机比较复杂。
本帖最后由 dvacos 于 2024-8-16 16:30 编辑