BlueNRG的应用程序命令接口ACI解读
1、应用程序命令接口概述
BlueNRG定位于BLE网络协处理器(BLE Network Co-Processor),也就是为系统的应用程序(Application)增加BLE通讯功能。
BlueNRG通过SPI接口与Application通讯,其中Application通过SPI的MOSI发送命令(Command)给BlueNRG,BlueNRG通过SPI的MISO返回事件(Event)给Application。双方遵循ACI命令接口的约定。
2、SPI硬件物理接口
SPI接口是标准的四线接口,BlueNRG只能作为SPI的slave,Application Processor必须做为SPI的master, 同时BlueNRG提供另一根线IRQ,用于通知Application Processor,BlurNRG。
SPI的数据帧如下图:
实测图如下:
也即:Application在读BlueNRG时,先使用0x0b 00 00 00 00来查询RBuf大小,如果RBuf大于零的话,再开启SPI的读操作,也就是输出SPI_CLK,在MISO上读回数据
Application在写BlueNRG时,先使用0x0a 00 00 00 00来查询WBuf的大小,然后写入不超过WBuf大小的数据。
3、ACI格式与命令
BlueNRG接收标准HCI命令格式。并支持标准HCI命令和厂商自定义命令(vendor specific command),标准HCI命令在Bluetooth specification中已经规定。而厂商自定义命令则是BlueNRG专用的自定义命令。
BlueNRG专用的自定义命令包括HCI扩展、L2CAP、GAP、GATT四大类。这些命令基本上都可以通过BlueNRG GUI软件来发送。
如图:
HCI厂商自定义命令
GAP命令
GATT命令
L2CAP命令
4、软件协议栈代码实现
在ST提供的开发包中,协议栈代码实现上述ACI为:在X-CUBE-IDB04\Middlewares\ST\STM32_BlueNRG中实现,主要格式为:
由于缺少BlueNRG的dongle,上述HCI命令和event只能看,不能实践了。
很显然,掌握BLE协议栈的最佳方法,莫过于直接用HCI命令来控制BLE的LL和PHY,HOST部分的协议栈自己来实现,QQ群里面也有人想自己来开发一个BLE协议栈。
不过很显然目前咱不具备这个实力,努力奋斗,早日掌握精通这门技术。