TI中文支持网
TI专业的中文技术问题咨询交流网站

CC2640R2F 串口透传速率问题。

SDK:simplelink_cc2640r2_sdk_3_30_00_20

CPU:CC2640R2F

问题描述:

(1)串口速率:1024000,串口采用 UART_MODE_CALLBACK 模式,在 uartReadCallback() 函数中再调用 UART_read() 函数,读取到的串口数据写入串口数据队列中,再启动一个发送事件 Event_post(syncEvent, TRANSMIT_DATA_EVT);,事件里调用 GATT_Notification() 函数发送无线数据给手机,只要串口数据队列不为空则一直调用发送事件发送数据,实测数据可达到 90KB/s 的速率。但是串口数据队列只有1000byte,发送速率不如串口接收速率,所以队列会溢出,导致发送的数据比串口收到的数据少。

(2)串口速率:1024000,串口采用 UART_MODE_CALLBACK 模式,直接将串口 uint8_t uartCC26XXRingBuffer[CC2640R2_LAUNCHXL_UARTCOUNT][UART_RING_BUFF_SIZE]; 的 ring buff 从 32 扩大到 1000byte,在 uartReadCallback() 函数中只将读取到的串口数据写入串口数据队列中,然后启动发送事件 Event_post(syncEvent, TRANSMIT_DATA_EVT);,当 GATT_Notification() 返回 SUCCESS 时再调用 UART_read() 函数直接读取串口 ring buff 中的串口数据而不需要等待,可是传输速率才 20KB/S。

按道理来说第二种不应该这么慢才对的,经测试后我发现第一种方法发送 614400 byte数据时,调用 GATT_Notification() 函数 SUCCESS 次数为 2519 次,不为 SUCCESS 的次数为 949 就可以发送完 614400 byte数据。而第二种方法发送 614400 byte数据时,调用 GATT_Notification() 函数 SUCCESS 次数为 2519 次,不为 SUCCESS 的次数却要 11581 次才能发送完 614400 byte数据。

这是为什么呢?

Viki Shi:

串口波特率太高,BLE协议栈受限于连接参数,可能来不及处理这么大量的数据,导致数据丢失或被覆盖

Jesse Huang:

回复 Viki Shi:

不是的,用上述的第一种方法的时候透传速率可以达到 90 kb/s,但是用第二种方法的时候 notify 失败返回 blePending 的次数增加了很多,导致透传速率慢了 4 倍。

会不会是 UART 的 SWI 和 HWI 与 RF 的 SWI 和 HWI 之间的协调问题?

赞(0)
未经允许不得转载:TI中文支持网 » CC2640R2F 串口透传速率问题。
分享到: 更多 (0)