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.

[参考译文] CC2652P:无法更改波特率、流控制(或者更确切地说、设置无效)

Guru**** 1810550 points
Other Parts Discussed in Thread: CC1352P, Z-STACK
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1401511/cc2652p-cannot-change-baudrate-flowcontrol-or-rather-the-settings-have-no-effect

器件型号:CC2652P
Thread 中讨论的其他器件:CC1352PZ-stack

工具与软件:

您好!

我要在 Sonoff Zigbee 记忆棒上启用硬件流控制、该记忆棒已布设这些线缆(通过开关)。 我想,应该容易,对吗? 我从 ZNP 示例中删除/禁用了 XGS110、并将其替换为正常的 UART2。 然而、令人遗憾的是、启用流控制并未产生实际的功能流控制。 一切都和以前一样。 那么、我想、让我们更改波特率、这应该起作用? 但可惜,通信仍然在115200。 我的 UART 是否也在使用? 肯定地交换(TX -> CTS、RX -> RTS)引脚会导致非正常通信。 焊盘设置可正常工作、多路复用器设置可正常工作、只是流控制或波特率不会改变。

这是我与常规 ZNP.syscfg 相比的 diff

```dIF

diff -u --color znp.syscfg ../../coordinator/Z-Stack_3.x.0/znp_CC1352P_2_LAUNCHXL.syscfg 2024年08月17日22:11:36 [0]
-- znp.syscfg 2024年08月17日22:10:34.160240772+0200
++../../coordinator/Z-Stack_3.x.0/znp_CC1352P_2_LAUNCHXL.syscfg 2024年08月17日21:35:53.842245876+0200
@@-11、7 + 11、7 @@μ s
*/
const CCFG = scripting.AddModule ("/ti/devices/CCFG);
const rfdesign = scripting.AddModule ("/ti/devices/radioconfig/rfdesign);
-const Display = scripting.AddModule ("AddModule"/ti/display/Display、{}、false);
+const Display = scripting.AddModule ("/ti/display/Display);
const Display1 = Display.addInstance();
const AESCBC = scripting.AddModule ("/ti/drivers/AESCBC);
const AESCBC1 = AESCBC.addInstance();
@@-73、17 + 73、12 @@μ s

rfdesign.rfDesign ="LAUNCHXL-CC1352P-2";

-Display1.$name ="config_display";
-Display1.baudrate = 57600;
-Display1.uart.$name ="CONFIG_DISPLAY_UART";
-Display1.UART.FlowControl = true;
-Display1.UART.UART.$ASSIGN ="UART0";
-Display1.UART.UART.txPin.$assign ="BoosterPack.4";
-Display1.UART.UART.rxPin.$assign ="BoosterPack.3";
-Display1.UART.UART.ctsPin.$assign ="BoosterPack.19";
-Display1.UART.UART.rtsPin.$assign ="BoosterPack.36";
-scripting.suppress ("已连接到硬件、@@@…+?@@@已连接到 CC1352P-2 LaunchPad\\上的 XDS110 UART。 请考虑在上面的"使用硬件"中选择它。 @@@.+?@@@"、Display1.UART.UART、"txPin");
-scripting.suppress ("已连接到硬件、@@@…+?@@@已连接到 CC1352P-2 LaunchPad\\上的 XDS110 UART。 请考虑在上面的"使用硬件"中选择它。 @@@.+?@@@"、Display1.UART.UART、"rxPin");
+Display1.$hardware = system.deviceData.board.components.XDS110UART;
+Display1.$name ="config_display";
+Display1.uart.$name ="CONFIG_DISPLAY_UART";
+Display1.UART.UART.$ASSIGN ="UART0";
+Display1.UART.UART.txPin.$ASSIGN ="BoosterPack.4";
+Display1.UART.UART.rxPin.$assign ="BoosterPack.3";

AESCBC1.$name ="CONFIG_AESCBC_0";

```μ A

不确定第一项更改是关于什么、但 UART 配置看起来正确吗? 这是我的完整 ZNP.sysfg `github.com/.../znp_CC1352P_2_hwfc.syscfg`

如果我查看`ti_drivers_config.c`我还会看到配置了重要位。

```C

const DisplayUart2_HWAttrs displayUart2HWAttrs ={
.uartIdx = CONFIG_DISPLAY_UART、
.baudrate = 57600、
.mutexTimeout =(unsigned int)(-1)、
.strBuf = displayUART2缓冲器、
.strBufLen = Display_UART2BUFFERSIZE
};

...


静态 const UART2CC26X2_HWAttrs uart2CC26X2HWAttrs[CONFIG_UART2_COUNT]={

baseAddr = UART0_BASE、
.intNum = INT_UART0_COMB
.intPriority =(~0)、
.rxPin = CONFIG_GPIO_DISPLAY_UART_RX、
.txPin = CONFIG_GPIO_DISPLAY_UART_TX、
.ctsPin = CONFIG_GPIO_DISPLAY_UART_CTS、
rtsPin = CONFIG_GPIO_DISPLAY_UART_RTS、
.FlowControl = UART2_FLOWCTRL_hardware、
.powerId = PowerCC26XX_PERIPH_UART0、
.rxBufPtr = uart2RxRingBuffer0、
.rxBufSize = sizeof (uart2RxRingBuffer0)、
.txBufPtr = uart2TxRingBuffer0、
.txBufSize = sizeof (uart2TxRingBuffer0)、
.txPinMux = IOC_PORT_MCU_UART0_TX、
.rxPinMux = IOC_PORT_MCU_UART0_RX、
.ctsPinMux = IOC_PORT_MCU_UART0_CTS、
.rtsPinMux = IOC_PORT_MCU_UART0_RTS、
.dmaTxTableEntryPri =&dmaUart0TxControlTableEntry
.dmaRxTableEntryPri =&dmaUart0RxControlTableEntry、
.rxChannelMask = 1 << UDMA_CHAN_UART0_RX、
.txChannelMask = 1 << UDMA_CHAN_UART0_TX、
.txIntFifoThr = UART2CC26X2_FIFO_THRESHOLD_1_8、
.rxIntFifoThr = UART2CC26X2_FIFO_THRESHOLD_4_8
}、
};

```μ A

除了名称之外、我都看不到 UART2与显示器有什么关系;但是、由于波特率是显示器的一部分、引脚多路复用器是 UART 的一部分、因此我很高兴地认为这只是正常工作(TM)。 同时调查代码,没有什么明显的事情没有传递到 uart2驱动程序。

我已经进行了很多次设置(rm -rf 工作区、导入、配置、构建)、因此不是很遗憾未清除对象。

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

    你(们)好

    对于 ZNP、我相信其串行接口的波特率会设置为自身定义的值、而不是 syscfg 文件。

    快速看一下、它似乎在"NPITLUART_initializeTransport"(NPI_tl_uart.c)中设置、其中 NPI_UART_BR 在 NPI_tl_uart.h 中定义

    您能否尝试在此处设置 UART 设置? (可能是首先确认您可以先在该文件中更改波特率的最简单方法)。

    谢谢!
    Toby

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

    更改波特率实际上是我查看是否可以更改双面打印的一种方法。 我大部分都是沿着兔子洞往下走,但让我检查一下这个文件。 我在`source/ti/drivers/UART2.c`中对其进行了硬编码、但无效。 我会在几天内尝试您的建议! 谢谢您的提示、我会回复您。

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

    我已经在 NPI 中读到一点、NPI 代表网络处理器互连、例如实际无线电芯片和应用处理器之间的链路。 假设无线电芯片是 CC1352 (那不是 M0吗?) 和 CC2652之类的应用处理器(不是 M4吗?) (我确信这在数字上不是很正确、但要点应该是)、那么这将涉及这两个组件之间的速度。 如果 UART 在内部出现这种情况会感到意外、但这些配置选项存在这 一事实表明这两个器件内部使用的是 UART 内部协议、您的发现意味着它们内部的讲话波特率为115200。 因此、即使我找到了波特率的正确旋钮、比如3M 波特、应用处理器和无线处理器仍将以115200波特进行通信。 一定会有一些好处,比我希望的要少。 当然、除非也可以增加内部协议。 这就是为什么我会惊讶于他们内部会使用一些"丑"作为 UART、而不是更好的东西、如 SPI。 我认为 CC1101-ish 芯片不是 SPI 所做的吗?

    但是、芯片同时支持这两种方法、这就是 μ`错误"NPI 错误:NPI_USE_UART 或 NPI_USE_SPI 必须定义。"` 它们告诉我们。

    不过、编译器输出为`-DNPI -DNPI_USE_uart`(来自 projectspec 文件)。 遗憾的是没有 projectspec 设置`NPI_USE_SPI`、因此我想知道它是否像翻转芯片那样简单、一切都能正常工作。

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

    是的、正确的答案是 CC2652中有两个内核、即主应用内核(M4F)和无线电内核(M0)。 用户无法配置这两者之间的接口、但该接口应足以支持 Zigbee 和低功耗蓝牙等协议。

    NPI 串行接口是指 CC2652和外部控制器之间的接口。 这是可配置的、包括波特率。

    ZNP NPI 目前仅支持 UART。

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

    是的, 所以应用程序内核在 simplelink 中被称为网络处理器互连;一点也不令人困惑:)

    我会告诉你,如果我让它工作!

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

    那么、这确实有效。 这使我认真地去 wtf 然而。

    我们在 syscfg 中配置所有功能、它会生成这些文件。 通过这些设置会执行引脚/焊盘配置、但波特率(以及可能的双工配置)不会?! 发生了什么事...