BlueNRG 错误 header
BlueNRG wrong header
我买了ST的STEVAL-MKSBOX1V1,想自己写一个库来创建BLE应用
板载BLE模块是SPBTLE-1S,搭载BlueNRG-1,我自己写了固件,为了使用SPI协议进行通信。
使用引脚重置模块后,我从 MCU 向 BLE 模块发送读取请求,
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,0);
HAL_SPI_TransmitReceive(&hspi2,tx,rx,5,1);
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,1);
我发:
{0x0b,0x00,0x00,0x00,0x00}
我得到:
{0xff,0x08,0x00,0x06,0x00}
所以显然没有什么好,因为第一个字节是 0xff 而不是 0x02(对吗?),但第 4 位 (0x06) 应该指示读取缓冲区内的数据量。
如果我读取 6 个字节,我得到
{0x04,0xff,0x03,0x01,0x00,0x01}
根据 AN4494,这正是我在模块上发生重置事件后应该阅读的内容。
那么我的问题是为什么我一直收到 {0xff,0x08,0x00,0x06,0x00} 而不是 {0x02,....} 之类的东西?
BlueNRG1 与 BlueNRG2 有什么不同之处吗? (很难找到好的文档)
如果有人对这个模块的 SPI 通信有一些经验,我想咨询一下。
提前致谢
{0xff,..} 是正确的。
AN4494 用于 BlueNRG-MS,MISO 的 5 字节 SPI header 为:{Ready, WBufLen, 0x00, RBufLen, 0x00}。在 BlueNRG-1 和 BlueNRG-2 中,SPI header 已修改为:{0xff, CmdLen0, CmdLen1, DataLen0, DataLen1},以便在单个 SPI 事务中支持长度超过 127 字节的 ACI 数据包. header中第一个字节固定为0xff。
很遗憾,目前没有描述修改的文档。您可能需要参考 DTM SPI 示例项目以了解详细信息。
在您的事务中,如果执行读取命令并继续读取 6 字节数据的 MISO:
- {0xff,0x08,0x00,0x06,0x00},{0x04,0xff,0x03,0x01,0x00,0x01}
那是ACI Blue初始化事件,表示固件已经正常启动。即可以解析:
- Header
- 0x0006: 6 个字节(数据)可供读取
- 数据
- 0x04: HCI 事件数据包
- 0xFF:ACI(供应商特定)事件
- 0x03: 参数长度
- 0x10 0x00:事件=0x0001,即ACI_BLUE_INITIALIZED_EVENT
- 0x01:原因码=1,表示固件正常启动
我买了ST的STEVAL-MKSBOX1V1,想自己写一个库来创建BLE应用
板载BLE模块是SPBTLE-1S,搭载BlueNRG-1,我自己写了固件,为了使用SPI协议进行通信。
使用引脚重置模块后,我从 MCU 向 BLE 模块发送读取请求,
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,0);
HAL_SPI_TransmitReceive(&hspi2,tx,rx,5,1);
HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,1);
我发:
{0x0b,0x00,0x00,0x00,0x00}
我得到:
{0xff,0x08,0x00,0x06,0x00}
所以显然没有什么好,因为第一个字节是 0xff 而不是 0x02(对吗?),但第 4 位 (0x06) 应该指示读取缓冲区内的数据量。
如果我读取 6 个字节,我得到
{0x04,0xff,0x03,0x01,0x00,0x01}
根据 AN4494,这正是我在模块上发生重置事件后应该阅读的内容。
那么我的问题是为什么我一直收到 {0xff,0x08,0x00,0x06,0x00} 而不是 {0x02,....} 之类的东西?
BlueNRG1 与 BlueNRG2 有什么不同之处吗? (很难找到好的文档)
如果有人对这个模块的 SPI 通信有一些经验,我想咨询一下。
提前致谢
{0xff,..} 是正确的。
AN4494 用于 BlueNRG-MS,MISO 的 5 字节 SPI header 为:{Ready, WBufLen, 0x00, RBufLen, 0x00}。在 BlueNRG-1 和 BlueNRG-2 中,SPI header 已修改为:{0xff, CmdLen0, CmdLen1, DataLen0, DataLen1},以便在单个 SPI 事务中支持长度超过 127 字节的 ACI 数据包. header中第一个字节固定为0xff。
很遗憾,目前没有描述修改的文档。您可能需要参考 DTM SPI 示例项目以了解详细信息。
在您的事务中,如果执行读取命令并继续读取 6 字节数据的 MISO:
- {0xff,0x08,0x00,0x06,0x00},{0x04,0xff,0x03,0x01,0x00,0x01}
那是ACI Blue初始化事件,表示固件已经正常启动。即可以解析:
- Header
- 0x0006: 6 个字节(数据)可供读取
- 数据
- 0x04: HCI 事件数据包
- 0xFF:ACI(供应商特定)事件
- 0x03: 参数长度
- 0x10 0x00:事件=0x0001,即ACI_BLUE_INITIALIZED_EVENT
- 0x01:原因码=1,表示固件正常启动