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.

[参考译文] CC2541:每次调用 HalUARTPoll()时、UART 3µs 流控制高电平为1 μ s

Guru**** 2609555 points
Other Parts Discussed in Thread: CC2541

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/817567/cc2541-uart-hardware-flow-control-high-for-1-3-s-every-time-haluartpoll-is-called

器件型号:CC2541

大家好、

在使用 CC2541进行开发时、我偶然发现了一个奇怪的行为、我无法解释、因此无法防止。 感觉我在这里遗漏了一些东西:
设置:

CC2541通过具有激活的硬件流控制功能的 UART 连接到主机。 BLE 始终运行、并广播、连接等

连接主机的 UART RX 缓冲区大小为一个字节。 因此、在 CC2541发送的每个字节之后、主机将其流控制线拉高、将该字节从 RX 缓冲区中获取、将该字节回传给 CC2541并清除流控制线、并准备好接收另一个字节。 只要主机将其流量控制线拉为高电平、CC2541就会在发送下一个字节之前等待、这会按预期正常工作。 您可以在随附的逻辑分析仪屏幕截图中看到它。

由 CC2541 µs 的流控制线路上会发生怪异的行为:该线路被反复拉高几 μ s。 我发现 、当函数 HalUARTPoll()被调用时、这会一直发生。 通过在 UART 回调函数中包含硬编码延迟(由 POLL 函数调用)(通常用于按压不同的 HAL UART 事件)、我看到流控制中高电平状态的持续时间分别更长。  

您可以看到此行为的屏幕截图。 在较长的时间刻度上、可以看到、由于连接间隔为30ms 的已连接 BLE 状态、每30ms 轮询就会停止(在 BLE 事件期间、OSAL 不会调用 UART 轮询)。

此行为不会干扰系统的运行、因为流量控制上的峰值太短而导致问题。 不过、这种行为对我来说看起来很乱、我不会按预期对我进行查看。  

我的问题:如何防止硬件流控制线路在 HalUARTPoll()期间被拉高

感谢大家的帮助! :-)


附录:
基于 simpleBLEPeripheral 的固件
相关固件代码:

定义的预处理器符号:

INT_HEap_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TESS=1
xPOWER_Saving
HAL_AES_DMA=true
HAL_DMA=true
xPLUS_Broadcaster
HAL_LCD=false
HAL_LED=false
HAL_key=false
HAL_UART=true
HAL_UART_DMA=2
HAL_UART_ISR=0
HAL_UART_DMA_IDLE=5
HAL_UART_DMA_HIGH=48
HAL_UART_DMA_TX_MAX=128
HAL_UART_DMA_RX_MAX=128

UART Init 例程:

serialInterface_uartConfig.configured = true;
serialInterface_uartConfig.波特 率= HAL_UART_BR_115200;
serialInterface_uartConfig.FlowControl = true;
serialInterface_uartConfig.flowControlThreshold = 48;
serialInterface_uartConfig.Rx.maxBufSize = 128;
serialInterface_uartConfig.TX.maxBufSize = 128;
serialInterface_uartConfig.idleTimeout = 5;
serialInterface_uartConfig.intEnable = false;
serialInterface_uartConfig.callBackFunc =(halUARTCBack_t) serialInterface_uartCallback;
(空) HalUARTOpen (HAL_UART_PORT_1、&serialInterface_uartConfig);



UART 回调例程

void serialInterface_uartCallback (uint8端口、uint8事件)

//未使用的输入参数,函数目前不执行任何操作
(空)端口;
(无效)事件;

返回;



UART 写入(在主任务中、定期调用、每1000ms 一次):

HalUARTWrite (HAL_UART_PORT_1、"Test"、4);

UART 读取(在主任务中、定期调用(每500ms 一次)):

Len = hal_UART_RxBufLen (HAL_UART_PORT_1);
HalUARTRead (HAL_UART_PORT_1、&buf、len);

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

    Matthias、您好!

    我会要求中小型企业就这篇帖子发表意见。 请给我们几天时间回来。

    谢谢、

    SAI

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

    您好!

    您能否通过仅将外设软件示例用于 UART 而不是 BLE 堆栈来重复相同的行为?  是否仅在涉及 BLE 操作时发生?

    请在 此处查看外设软件 http://www.ti.com/litv/zip/swrc257

    谢谢、

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

    您好!

    您是否能够验证仅在 BLE 运行期间发生?

    谢谢、

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

    您好!

    一旦 UART 被初始化、我会在整个过程中看到这种行为。 TI BLE 堆栈包含在内、并且始终在后台运行。 我刚才使用了 simpleBlePeripheral 示例、并通过包含相应的 HAL 元素添加了 UART 支持。

    在激活流控的情况下运行 HostTestExampline 时、我在流控线路上看不到这种行为。 也许这些信息有助于找出此行为的原因?

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

    抱歉、刚才看到您的回复(未收到有关此回复的电子邮件通知)、我将立即检查

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

    您好!

    我刚刚尝试了您提供的 UART 示例、CC2541在流控制线上未显示所述的行为。

    与我的实现不同、您的示例不使用 HAL UART 库、也不使用 HalUARTOpen 为 UART 事件设置回调函数。  

    在我的应用中、无论我要禁用哪种功能、只要 OSAL 正在运行并实现、我就一直在使用闪烁的流量控制线路。

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

    您好!

    您能否模仿 HostTest 中使用的实现、因为这似乎符合您的意见?

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

    您好!

    在讨论 HostTestRelease 时、我发现我没有看到 HAL_UART_PORT_1上的闪烁线、因为我启用了 HAL_LCD 功能、同时使用 UART_DMA_2端口、因此阻止了流控制。 设置 HAL_LCD=false 我能够再现 TI 的主机测试示例问题。

    使用 HAL_UART_PORT_1上的 HostTestRelease 示例、以下预处理器符号获得相同的闪烁流控制线路:

    INT_HEap_LEN=3000
    HALNODEBUG
    OSAL_CBTIMER_NUM_TESS=1
    xPOWER_Saving
    HAL_key=false
    HAL_LED=true
    HAL_LCD=false
    HAL_AES_DMA=true
    HAL_DMA=true
    HAL_UART=true
    HAL_UART_DMA=2
    HAL_UART_ISR=0

    在我看来、当前的 HAL 版本似乎无法避免流控制上的闪烁。 这是错误还是 预期行为?

    感谢你的帮助。 此致、Matthias

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

    这显然不是预期行为

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

    您好 Tim、您能否 使用我提供的预处理器设置通过 HostTestRelease 重现此行为? 您是否已经有过建议、我可以采取什么措施来避免这种行为?

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

    您好!  

    我仍在等待有关如何避免控制线路闪烁的响应、在上述主机测试版配置中、我也具有该控制线路闪烁。