BLE芯片有一大用处就是用于作为某一个主机的BLE功能扩展芯片,比如通过UART挂在某个MCU或者MPU下,为其提供BLE功能.
这方面,Nordic对于他们经典的nrf52 sdk,有提供pc-ble-driver这个库.对于他们新的NCS框架,有一套BLE HCI例程可以直接让NRF52840作为USB BLE HCI设备挂在linux设备下提供BLE服务.
本文讲的是SiliconLabs的相关实现,他们也有一套例程可以通过串口协议将原本用于MCU开发的BLE sdk暴露给主机(与HCI完全不相关),他们叫做NCP(网络协处理器).并且,他们除了有对应的MCU端的例程提供(可以理解为能直接编译出hex烧录后使用),还有对应的PC端的调试工具可以使用(Bluetooth NCP Commander).
要想测试这套机制.需要先准备一个可以与PC建立串口通讯的EFR32BG系列的开发板或自定义板(我这边使用的是EFR32BG27的自定义板,并配合Jlink的串口功能).
SiliconLabs提供的NCP例程无法直接在MCU上运行,需要先烧写Bootloader.
打开SiliconLabs的开发环境(Simplicty Studio5,我们这里假设你已经配置好了IDE,可以正常编译EFR32BG系列的BLE固件).点击窗口左上角的菜单栏的File里的New里的New Project Wizard,来新建一个工程.
先选择你的目标芯片,以及使用的SDK版本和IDE类型.

然后NEXT进入下一个页面,先勾选左边分类里MCU分类下的Bootloader分类,并找到符合你目前使用的芯片的Bootloader(因为我使用的EFR32BG27是内部768KB的Flash,所以我选择了下图中的这个例程).

然后NEXT,确认下创建项目的名字以及路径和SDK的复制方式.再点击FINISH即可完成工程创建.

然后直接在左边的项目列表对着Bootloader项目右键然后选择Build Project.等待编译完成即可.

编译结束后对应的HEX文件在项目目录下使用编译器名与版本号命名的文件夹中,例如这样:

保留这个HEX文件,以备后续烧录.
然后开始获取NCP固件,还是按之前新建项目的方式,只是这次,在选择例程的时候在左侧分类选择Bluetooth和NCP.并在展示的例程列表中选择Bluetooth - NCP.

一路NEXT,NEXT然后FINSH后.项目创建完毕.这个时候,如果你直接和之前一样Build Project的话,编译会报错.提示缺少串口的定义(仅针对于创建工程时通过芯片型号创建的自定义板,对于通过开发板型号创建的工程会自动补充串口信息,接下来的操作可以省略,直接进行烧录).

这个时候,需要打开项目目录下的config文件夹.找到sl_uartdrv_usart_vcom_config.h文件,打开,翻到最后.他原本的样子是这样的:

你需要根据你自己使用的串口引脚,修改宏定义.比如说,我的串口使用了芯片的PC6,PC7,那么我就需要改成这样:

然后再Build Project即可生成HEX文件.
最终再将Bootloader hex和NCP hex依次烧录到芯片中(我这边使用j-flash烧录).重新上电后即可运行NCP固件.
确认好芯片的串口与PC连接正常,并找到PC上对应的COM口.在IDE的右上角有个Tools的按钮.

并选择Bluetooth NCP Commander Standalone并点击OK.

然后选择对应的COM口并Connect.

即可发现软件已经完成初始的通讯,并获取了NCP端的版本信息.

这时,可通过左侧功能分类来体验各种功能细节.例如扫描广播:

本篇内容就到这里了,期待下文.

Comments | 1 条评论
这篇文章写得深入浅出,让我这个小白也看懂了!