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.

[参考译文] CC2340R5:处理 UART 数据缓冲器

Guru**** 2589275 points
Other Parts Discussed in Thread: CC2340R5

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1386985/cc2340r5-handling-uart-data-buffer

器件型号:CC2340R5

工具与软件:

您好!

我们使用的 UART 波特率为9600、主机控制器将发送 1000-2000字节的数据、时间间隔为500ms。

我们必须使用 MTU 247通过空气传输相同的数据。  

如果我们以1秒的间隔发送1000字节、则只能正确地查看所有数据、低于1秒时可以观察到数据包不匹配/缺失、

以下是我们的 UART 回调实现。

#define UART_MAX_READ_SIZE	1000

uint8_t uartReadBuffer[UART_MAX_READ_SIZE];

void UARTCallback(UART2_Handle handle, void *buffer, size_t count, void *userArg, int_fast16_t status)
{
   
    uint8_t *idx = NULL;
    uint8_t *data = BLEAppUtil_malloc(count + 2); 
    idx = data;
    *idx = count;
    idx++;
    *idx = count >> 8;
    idx++;
    memcpy(idx, buffer, count);
    BLEAppUtil_invokeFunction(HandlingFunction, data);
    memset(uartReadBuffer,0,sizeof(uartReadBuffer));
    UART2_flushRx(handle);
}

void HandlingFunction(char *pData)
{
	//sending over the air
	UART2_read(uart, &uartReadBuffer, UART_MAX_READ_SIZE,0);
}

这里、如果主机控制器发送的数据超过1000字节、我们希望忽略额外的字节、并希望处理新的数据包、

但我们观察到的是、下一次 UART 读取中将添加旧的额外字节、以及新的数据包数据。

请建议处理此场景的正确方法。

此致、  

Vignesh。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    波特率9600看上去像是发送1000-2000字节的速度有点慢。 我建议使用更高的波特率。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vignesh:

    使用9600的 UART 波特率时、您可以获得~960字节/秒的吞吐量- 详情请参见此处。 您提到过、您希望传输"1000-2000字节、间隔为500ms"、即最多4000字节/秒 那么、选择的波特率太小。 您应该增大它。 由于 CC2340R5支持高达3MBaud 的 UART 波特率、因此这应该不是问题。

    在这里、我建议将 UART 波特率设置为115200。

    我希望这将有所帮助、

    此致、