CPU:CC2640R2F
SDK:simplelink_cc2640r2_sdk_4_10_00_10
问题描述:
1、设置串口波特率为 1000000 bsp。
2、将 PHY 设置为 2M。
3、整个程序操作过程是:STM32 通过串口发送 256 个字节的透传命令给 CC2640R2F,CC2640R2F 收到后调用 GATT_Notification() 发送 244 个字节数据给连接的蓝牙设备。当 GATT_Notification() 函数返回 SUCCESS 时,CC2640R2F 则通过串口返回发送成功命令给 STM32,STM32 收到后再发送透传命令给 CC2640R2F。
4、当发送 PHY 为 1M 时,如此发送透传数据不会出现任何问题,当 PHY 设置为 2M 时,串口会出现 Uart Error over run 错误,我已经将 uint8_t uartCC26XXRingBuffer[CC2640R2_LAUNCHXL_UARTCOUNT][600];,查看了串口缓存也是没有满的,但是会莫名出现 Uart Error over run 错误。下面是串口缓存的 ringBuffer。
请问这可能是什么问题?
Kevin Qiu1:
你看一下是否在应用程序中调用了API: HCI_LE_SetDefaultPhyCmd(),具体看下这里:http://leconiot.com/download/cc2640r2f/ble_stack_app/stack/le_2m_phy/le_2m_phy.html
如果回答解决了您的疑问,请帮忙确认答案,谢谢
Jesse Huang:
回复 Kevin Qiu1:
peripheral 中没有调用 HCI_LE_SetDefaultPhyCmd() 函数。连接后 center 通过调用 HCI_LE_SetPhyCmd() 函数将 PHY 改为 2M。
抓包可以看到 PHY 的确变为 2M 了,peripheral 自己循环发送 GATT_Notification() 发送速率也能达到 100 多KB每秒,就是当进行串口透传时,串口会出现 Uart Error over run 错误。当 PHY 是 1M 的时候是不会发生这种情况的,当 PHY 设置为 2 M 时会对串口有影响吗?
Kevin Qiu1:
回复 Jesse Huang:
设置为2M对串口应该没有影响,PHY的相关设置可以参考这里:dev.ti.com/…/phy.html
Jesse Huang:
回复 Kevin Qiu1:
设置为 2M 是对串口是没有影响,我的意思是这样的。
当 PHY 设置为 2M 时,直接用 event 循环 GATT_Notification() 244 个字节给远程蓝牙设备,速率可以达到 140+ kb/s,这个没问题。
但是当你用 STM32 通过串口发送 244 字节数据给 CC2640R2F,CC2640R2F 再 GATT_Notification() 给远程蓝牙设备,这时候串口就会出现错误。但是设置 PHY 为 1M 时是不会有这个问题的,而且速率也能达到 45 kb/s。
我怀疑是将 PHY 设置为 2M 时,发送速率增大了 2 倍,导致一直在进行 RF 中断,UART 中断无法进行,所以导致 uart over run error,你觉得有可能吗?
你们有做过 PHY 为 2M 时的串口透传测试吗?
Kevin Qiu1:
回复 Jesse Huang:
目前的例程是默认 PHY 为 1M 的