我购买了ST的STEVAL-MKSBOX1V1,并想编写自己的库来创建一个BLE应用程序。
机上的BLE模块是SPBTLE-1S,它安装了BlueNRG-1,我编写了自己的固件,以便使用SPI协议进行通信。
在用引脚重置模块后,我向BLE模块发送一个从MCU读取的请求,
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,0x00}
我得到:
{0xff,0x08,0x00,0x06,0x00}
所以显然没有什么好的,因为第一个字节是0xff而不是0x02 (对吗?),但是第4位(0x06)应该表示读取缓冲区内的数据量。
如果我读了6个字节
{0x04,0xff,0x03,0x010x00,0x01}
而根据AN4494,这正是我应该阅读后,重置事件的模块。
那么我的问题是为什么我总是得到{0x08,0x00,0x06,0x00}而不是{0x02,.}之类的东西?
有什么与BlueNRG1有关的与BlueNRG2不同的地方吗?(很难找到好的文档)
如果有人在SPI与这个模块的通信方面有一些经验,我想有一点咨询。
提前感谢
发布于 2021-04-19 07:32:30
{0xff,.}将是正确的。
AN4494用于BlueNRG,MISO的5字节SPI头为:{Ready,WBufLen,0x00,RBufLen,0x00}。在BlueNRG-1和BlueNRG-2中,SPI报头已被修改为:{0xff、CmdLen0、CmdLen1、DataLen0、DataLen1},以便在单个SPI事务中支持长度超过127个字节的ACI数据包。头中的第一个字节固定为0xff。
不幸的是,目前没有描述修改的文件。您可能需要参考DTM SPI示例项目来了解细节。
在您的事务中,如果执行Read命令并继续对6字节数据读取MISO:
这是一个ACI蓝色初始化事件,表示固件已正确启动。可分析的:
read可用
ACI_BLUE_INITIALIZED_EVENT
H 1210x100x00:Event= 0x0001,即事件原因代码= 1,这意味着固件启动了properly
https://stackoverflow.com/questions/65688284
复制相似问题