主题中讨论的其他器件: MSP432P401R、 MSP432E401Y、 CC2564C
下午好。
我们在项目中尝试使用 Bluetopia 蓝牙堆栈时面临一些挑战。 我们使用基于 MSP432E401Y MCU 修订版 B 和 CC2564MODA 修订版1.0的定制硬件。 我们的测试基于堆栈提供的 SPPDemo。 由于该示例基于 MSP432P401R、因此我们必须更新 MCU 的一些代码。 我们更新的唯一文件是:
- Bluetopia/hcitrans/HCITrans.c
- 平台/MSP-EXP432P401R/HAL.c
- 平台/MSP-EXP432P401R/HAL.h
- 平台/MSP-EXP432P401R/HRDWCFG.h
主要更改是将 MSP432P401R 函数直接转换为 MSP432E401Y driverlib 函数。 我们能够通过 UART 与 CC2564MODA 进行通信、并使用 HCI 传输层函数 HCITR_COMWrite 发送 HCI_RESET (0x01 0x03 0x0C 0x00)命令。 我们成功接收到来自 CC2564MODA 的有效响应、CC2564MODA 是命令完成事件(0x04 0x0E 0x04 0x01 0x03 0x0C 0x00)。 接收到的数据成功存储在 UARTContext.RxBuffer 中、并 由 HCITR_COMProcess 传递给_COMDataCallback。 但是、在我们将所有七个字节传递到上层后、会调用函数 HCITR_COMClose、并且 BSC_Initialize 返回 BTPS_ERROR_HCI_INITIATING_ERROR (-4)。 我们确认数据以正确的顺序正确发送到上层、并通过分解调试正确调用回调。
我们不理解为什么栈无法处理数据并继续执行初始化过程。 我们对如何处理这一问题没有什么想法。 我们还使用 CC256X_Logger 进行调试、但它仅记录数据、直到处理 HCI_Reset。 我将留下记录器以及 HCITR_COMProcess 和 HCI UART RX ISR 的屏幕截图。 HCI UART 配置有硬件流控制和115200波特率。 在示波器上、所有数据均已正确可视化。
这也是堆栈中看似奇怪的行为。 在使用最后一个字节调用_COMDataCallback 后、它指向的地址更改为0x00000000。 这是预期的行为。 在指向 HCITR_COMDataCallback_UART (0x000047DF)之前。 因此、当调用 HCITR_COMClose 时、不会在以下行中再调用回调:
/* All finished, perform the callback to let the upper layer know */
/* that this module will no longer issue data callbacks and is */
/* completely cleaned up. */
if(COMDataCallback)
(*COMDataCallback)(HCITransportID, 0, NULL, CallbackParameter);
我们还有其他问题可能会干扰堆栈的工作方式。 我们注意到、该堆栈附带了2015年的 CC256XB.h 文件。 我们下载了具有相同文件但日期为2017年的 Service Pack 1.8。 我们正在使用新的解决方案,但它仍然没有解决问题。 我们是否正确地假设我们应该为 CC2564MODA 使用文件 CC256XB.h 而不是 CC256X.h?
我们还阅读了一些论坛帖子、我们可以使用 BHET 工具将 BTS 文件转换为.H 文件、但似乎无法下载。 我们只能订阅通知。
是否可能缺少任何项目配置或文件? 我们使用 Code Composer Studio 10.1.1.00004来编译和运行该项目。
我们已经花了几周时间来解决这个问题。 我们确实需要您的一方提供一些输入。
非常感谢您的支持。