蓝牙发展到今天,有太多新特性了,去年年底(2019/12/31)推出的蓝牙5.2再一次更新了HCI物理特性,包括多重串流音频、低功耗音频解码器LC3、广播音频等等新特性,各家厂商也未停下创新的脚步,手头上的MM32W373就是集成了巨微集成电路的蓝牙射频方案的Cortex –M3内核主控的BLE SoC。由于是方案集成,加之刚入局,所以一些东西在蓝牙这块有待整理,规格书全文都少提蓝牙规格,都是在讲MCU那块,BLE方面的SDK也是没有,只是放出一个乱七八糟的例程:
1. 接口混乱,比如蓝牙接口居然有两个版本,但却同时存在,具体app_hogo.c和app.c定义重复,前者是新版本5.3.1,后者是2.0.1旧版本。还有一些ATT属性句柄明显访问不到,定义失误,比如softwareRevision(0x2a28)。
2. 写的非蓝牙部分也是混乱,比如uart.c里uart_initwBaudRate函数惨传进来的参数没有用到,但使用的时候又偏偏传进来了一个无用的参数。
3. 文档也是混乱MiniBoard和eMiniBoard,又是MM373W和MMW373L。也是待整理。
言归正传,由于蓝牙都是基于service来处理,而恰巧有一个LED Service,就来点灯看看,所有的API都放在mg_api.h(进一步实锤是MacroGiga巨微写的API),实现全部开放,做成静态库.lib(有OTA、连接、dtm检测定频3个库)分别对应mg_BLEOTA_lib_m3.lib、mg_BLEpair_lib_m3.lib、mg_TEST_Lib.lib,可供使用的API也只能修改广播类型(ble_set_adv_type)、广播间隔(ble_set_interval)、广播名称(ble_set_name)等,涉及到广播角色、连接参数、信号确认、连接状态机等很多关键过程全都没有,所以只能等待后续更新了。主框架是3个函数:
1) SetBleIntRunningMode:设置中断SVC和协议栈通信
2) radio_initBle:设置默认发射功率和MAC
3) ble_run_interrupt_start:中断方式开启协议栈广播工作
看不到任何GATT、GAP初始化设置等等步骤,但service、att的声明也有,所以可以去添加自己的特征值,具体文件app_hogo.c里数组AttCharList就是所有服务、特征的声明,比如0x2a29对应Manufactuer Name,0x2a26对应Firmware Revision,0x2a28对应0x2a28:
因为是写属性,干脆就以第二个特征属性来操作,它的properties就有写和无回复写,修改句柄范围为0x16到0x17,然后在写回调ser_write_rsp里添加操作内容:
实际操作如下(操作LD2绿灯,对应PC10), 开灯:
关灯
其他修改名称、间隔、MAC、发射功率也都可以改,比如改名字(URL编码):
也可AT指令动态修改:
不过时机不对会让协议栈工作不正常。高级特性mesh暂时官方没更新,OTA还没试,暂且这样。
作者: 南霁云, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-1821704.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论