This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2640R2F 串口透传速率问题。

Other Parts Discussed in Thread: 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数据。

这是为什么呢?