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文件在项目目录下使用编译器名与版本号命名的文件夹中,例如这样: