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.

[参考译文] TMDSCNCD263:AM2634C 和 CC2652的 UART 连接问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1249238/tmdscncd263-uart-connection-issue-with-am2634c-and-cc2652

器件型号:TMDSCNCD263
主题中讨论的其他器件:TMDSHSECDOCKLP-CC2652RBSysConfig

主题:AM2634C 和 CC2652的 UART 连接问题

尊敬的德州仪器支持:

我目前正在从事一个项目、涉及在 AM2634C 和 CC2652之间以及在 AM2634C 和在通过 USB 连接到电路板的 PC 上运行的 Putty 软件之间建立 UART 连接。

我使用的 AM2634C 器件连接到 TMDSHSECDOCK 集线站、还使用包含 CC2652芯片的 LP-CC2652RB 模块。

对于 AM2634C、我使用了"mcu_plus_sdk_am263x_08_06_00_34" SDK、对于 CC2652、我使用"simplelink_wbms_sdk_2_00_02_23_eng" SDK。

尝试在 AM2634C 和 CC2652之间建立 UART 连接时遇到一些问题。 具体来说、我已经设法在 UART echo 工程的 SysConfig 中声明了一个新的 UART 接口(效果非常好)、并选择了可用的 GPIO 引脚进行映射。 例如、Sitara 处理器的端口 L3和 M3映射至底座的引脚161和162。

我从"mcu_plus_sdk_am263x_08_06_00_34" SDK 修改了 UART echo 工程、方法是将 UART_console 的所有实例替换为新的 UART 接口。 然后、我将 TMDSHSECDOCK 的引脚161和162与 TM4C129的 Rx 和 Tx 引脚连接在一起、首先需要测试通过 TM4C129发送字符并将它们取回。

但是、我目前遇到的结果不一致。 大多数情况下、我只能通过 TM4C 接收来自 AM 的字符、但不能相反。 在极少数情况下、设置会起作用、但如果我再次刷写相同的代码、则会失败。

在我的请求结束时、我将最简单地演示我的问题的协议放在了末尾。

我已经用示波器进行了测试、并且 TM4C129是通过 UART 正确发送字符的(我还使用 secound TM4C129进行了测试、它们一起很好地交换信息)。

我不确定导致这种不一致的原因是什么、非常感谢您为帮助我解决此问题而提供的任何指导或支持。

感谢您投入宝贵的时间给予大力支持。

此致、

泰奥·盖兰


 UART 测试过程

I- UART0测试
创建新的工作区。
从 mcu_plus_sdk_am263x_08_06_00_34中导入 uart_echo_am263x-cc_r5fss0-0_freertos_ti-arm-clang 工程。
刷写器件(取消选择 M4处理器)。
选择 S26A0200调试器。
测试 UART 0。
在终端中打开串行端口并键入字符(8)、这些字符通过 UART 0发送到 Sitara。 然后、它们将返回给我们并显示在串行端口终端中。
验证了 UART 0测试。

现在、我们将 uart_echo.c 中的 APP_UART_RECEIVE_BUFSIZE 的缓冲区大小更改为(1U)。
我们在块"{/*读取8个字符*/和/*回声字符输入*/}"周围添加一个无限循环。
重新闪存设备。
现在它将字符一个接一个地发回给我们。

II-测试 UART 1.
1) Sitara Tx
打开 SysConfig。
添加 UART 接口。
将其重命名为 CONFIG_UART1并在 L3上设置 Rx、在 M3上设置 Tx。
现在、我们复制所有 UART_WRITE 行、将 CONFIG_UART_CONSOLETE 替换为 CONFIG_UART1。
transferOK = UART_WRITE (gUartHandle[CONFIG_UART1]、&Trans);
再次刷写器件。
接下来、我们交叉连接 TM4C129和 Sitara 的 Rx 和 Tx 引脚(引脚161和162)。
在终端中打开 TM4C129的串行端口并将字符发送到 Sitara 的串行端口。 然后、这些数据返回到 TM4C129的串行端口。
验证了 UART1 Tx 测试。

2) Sitara Rx。
在此之后、我们通过放置 CONFIG_UART1来更改 UART_READ 行。 因此、我们希望能够在 TM4C129的串行端口控制台中发送字符、这些字符将通过 UART 1中的 Sitara 进行读取。
当我们进行测试时、它不起作用。
未验证 UART1 Rx 测试。

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

    尊敬的 Theo:

    您能否将 AM263x 连接到 PC 仿真器(如 TaraTerm)并持续尝试 UART echo 示例(通过 UART1)? 如果它能够正常工作、则问题不在 AM263x 侧。

    此致、

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

    尊敬的 Texas Ming Wei:

    感谢您的提示响应和建议的故障排除步骤。

    但是、我想澄清一下、在我当前的设置中、只有 UART0可通过 USB 连接使用。 这已经过测试、证明工作正常。 至于 UART1、它没有直接 USB 连接、因此使用 TaraTerm 或类似 PC 仿真器进行的测试难以实现。

    我可以考虑的一种可能的解决方案是使用 UART 转 USB 转换器将 UART1的引脚连接到我的 PC。 但是、目前我手头没有这种转换器。

    期待收到您的回复。

    此致、

    泰奥

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

    尊敬的 Theo:

    是否可以使用  TMDSHSECDOCK 集线站将 UART1连接到 UART 电缆、然后使用 UART 连接器将 UART 电缆连接到台式计算机?

    此外、请确保 CC2652 UART 和 AM263x UART (TX 到 RX、RX 到 TX)交叉连接。

    此致、

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

    尊敬的支持团队:

    感谢您的建议。 我想澄清一点、我已经在 LP-CC2652RB 上使用 TM4C129执行了类似的测试。 此模块用作 USB 和 UART 之间的桥接器、使我能够测试 AM2634C 上的 UART1连接。

    下面我再把 我使用的协议:

    一.30. UART0测试:
    创建了一个新的工作区、并从 mcu_plus_sdk_am263x_08_06_00_34导入 uart_echo_am263x-cc_r5fss0-0_freertos_ti-arm-clang 工程。
    2.已使用 S26A0200调试器刷写器件(取消选择 M4处理器)。
    3.在终端中打开串口,键入的字符通过 UART 0发送到 Sitara 并返回给我们,显示在串口终端中。
    4.将 uart_echo.c 中 APP_UART_RECEIVE_BUFSIZE 的缓冲区大小调整为1U、并在块周围添加了一个无限循环"{/*读取8个字符*/和//*回波字符已输入*/}"。
    5.设备已再次进行刷新,现在不断逐一发回字符。

    二. UART1测试:
    1.对于 Sitara Tx:
    -打开 SysConfig 并添加了一个 UART 接口,将其重命名为 CONFIG_UART1 ,并在 L3上设置 Rx 和在 M3上设置 Tx。
    -复制了所有 UART_WRITE 行、将 CONFIG_UART_CONSOLETE 替换为 CONFIG_UART1。
    -再次刷新设备。
    -交叉连接 TM4C129和 Sitara 的 Rx 和 Tx 引脚(引脚161和162)。
    -在终端中打开 TM4C129的串行端口,并将字符发送到 Sitara 的串行端口,然后返回到 TM4C129的串行端口。
    2.对于 Sitara Rx:
    -通过输入 CONFIG_UART1更改了 UART_READ 行,并期望能够在 TM4C129的串行端口控制台中发送字符,供 UART 1中的 Sitara 读取。 但是、这不起作用。

    根据上述协议、AM2634C 上的 Tx 工作正常、但 Rx 无法正常工作。 如果一个方向(Tx)工作成功、则可确保线路正确连接(Tx 到 Rx 和 Rx 到 Tx)。

    我希望这些信息有助于阐明我已经采取的步骤。 如果您有进一步的建议或有任何其他测试建议、请告诉我。

    此致、

    泰奥

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

    尊敬的 Theo:

    是否可以在系统配置中使用 UART1的默认设置(A9表示 RXD、B9表示 TXD)?

    2.您是否使用 UART_WRITE ()与  CONFIG_UART1来确认 UART1 TX 是否正常工作?

    3.是否可以使用两个 AM263x CC 测试 UART1?

    此致

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

    您好!

    1. AM2634C 的 A9和 B9端口映射到 TMDSHSECDOCK 上为 UART 或 LIN 功能保留的引脚76和78。 默认情况下、这些引脚都是针对 LIN 通信进行配置的。 要将其切换至 UART 模式、多路复用器的1:2选择线必须设置为高电平。 该选择线路由来自 IO 扩展器的 GPIO 信号(LIN_MUX_SEL)进行控制、并且与 IO 扩展器的通信通过 I2C 完成。 我不确定我是否知道如何配置该功能、因为我已经尝试过、但从未使用过。 但我已经尝试了 UART5的引脚、它可以配合 Tx 使用、而不能配合 Rx 使用。

    2.事实上,这就是我所做的。

    3.我可以尝试。 如果您有一个双端口 TM4C129、我有两个这样的器件、当我交叉连接每个引脚的 Rx Tx 引脚时、它们可以正确地交换信息。 要使用 两台 AM263x 进行测试、我需要两台计算机、因为当我连接其中两台时、我无法选择刷写一张或另一张卡。

    此致

    泰奥

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

    尊敬的 Theo:

    您能否向我发送将 UART_READ()与调用参数一起使用的代码?

    我看了一下 UART_READ()的实现。 基本上每次读取一个字符的 UART FIFO、直到读取的字符数与 trans.count 中指定的字符数相匹配。 如果您使用原始的 APP_UART_RECEIVE_BUFSIZE (8),那么 UART_READ ()将不会返回,直到读取的字符数达到8。

    可执行的快速测试是将 APP_UART_RECEIVE_BUFSIZE 更改为1。

    此致、

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

    您好!

    根据要求,这里是我的代码的相关部分,我使用`uart_read ()`函数:

    /*读取1字符*/
    gNumBytesRead = 0u;
    TRANS.buf =&gUartReceiveBuffer[0U];
    TRANS.COUNT = APP_UART_RECEIVE_BUFSIZE;
    transferOK = UART_read (gUartHandle[CONFIG_UART1]、&trans);
    APP_UART_ASSERT_ON_FAILURE (transferOK、TRANS);

    正如 我在测试协议中提到的、在本节中、`APP_UART_RECEIVE_BUFSIZE`确实设置为1。 定义如下:

    #define APP_UART_RECEIVE_BUFSIZE (1U)

    此配置允许我一次读取一个字符。 但是、尽管将`APP_UART_RECEIVE_BUFSIZE`设置为1、但 UART1在我的测试中未正确运行、尤其是在数据接收(Rx)方面。 这 仅在 UART1测试中发生、因为如果在上述代码中、我将 CONFIG_UART1替换为 CONFIG_UART_CONSOT 、则会正常工作

    接下来的行是  

    /*输入的回声字符*/
    gNumBytesWritten = 0u;
    TRANS.buf =&gUartReceiveBuffer[0U];
    TRANS.COUNT = APP_UART_RECEIVE_BUFSIZE;
    transferOK = UART_WRITE (gUartHandle[CONFIG_UART_CONSOLE]、&Trans);
    transferOK = UART_WRITE (gUartHandle[CONFIG_UART1]、&Trans);
    APP_UART_ASSERT_ON_FAILURE (transferOK、TRANS);


    这会返回我在 UART 0中输入的值(我可以在 TM4C129控制台和 Sitara 控制台看到它、因为有两个 UART_WRITE)、但当输入来自  CONFIG_UART1时、它不会返回任何内容。

    我希望此信息有助于解决此问题。 我期待您提供有关后续步骤的指导。

    此致、

    泰奥

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

    尊敬的 Theo:

    很难解释那里发生了什么。 TX 工作、RX 不工作。 为了进一步调查、我需要找到另一个 AM263x CC 和集线站。 这需要几天时间。 尤其是周末即将到来。 我会在下周早些时候回复您。

    此致、

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

    Ming 您好、

    非常感谢您的帮助、

    我会等 你得到你需要的东西。

    祝您在周末愉快、

    此致

    泰奥

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

    尊敬的 Theo:

    我已找到另一个带有扩展坞的 AM263x CC。 我将开始处理此问题、下周早些时候与您联系。 祝你度过一个愉快的周末!

    此致、

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

    尊敬的 Theo:

    我使用一个 AM263x CC 和一个扩展坞进行了以下测试:

    1.连接引脚161和162 (将 UART1_TXD 环回至 UART1_RXD)

    2.在 syscfg 文件中使用 L3和 M3添加 UART1实例。

    3.在 uart_echo 中,添加用于向 UART1发送8个字符的代码,然后立即从 UART1接收8个字符,再对发送缓冲区和接收缓冲区进行比较。 进行100次相同的测试、然后在 UART0上打印统计数据。

    UART0显示屏如下所示:

    UART1_RXD 和 UART_TXD 的 Saleae 捕获:

    结果证明 AM263x UART1在 TX 和 RX 下均能正常工作。 我在测试过程中注意到了一件事。 如果我在 TX 之后和 RX 之前设置一个断点、则环路无法完成。 我猜接收中断可能会丢失。 如果我在 TX 和 RX 之后设置断点、那么它会正常工作。

    随附、请查找我的 uart_echo.c 和 example.syscfg 文件。

    此致、

    e2e.ti.com/.../0268.uart_5F00_echo.c

    e2e.ti.com/.../6354.example.syscfg

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

    您好!

    感谢您的详细指示。 我通过将相同的 AM263x CC 与扩展坞一起使用来复制您的测试、测试结果与您的测试结果一致。 当我连接了 Rx 和 Tx 时、我可以读取我在 Tx 中发送的内容。 但是、我注意到、您在 SysConfig 文件中添加了一个 i2c 实例。 您能解释一下您选择这样做的原因吗?

    尽管取得了这些积极的结果、但 UART1在从 TM4C129接收数据时仍无法正常运行。 我无法在 UART1的 Rx 中读取从 TM4C129发送的内容。  

    此致、

    泰奥

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

    尊敬的 Theo:

    我在 IO 扩展器上的实验中添加了 I2C 实例。 事实证明、最终测试没有必要。 您将其删除。

    从  TM4C129的 UART 开始、您可以检查信号电压吗? AM263x 的 UART1_RXD/UART1_TXD 为3.3V。  信号电压上的任何不匹配都可能导致问题。

    此致、

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

    尊敬的 Theo:

    我还使用引脚161和162 (交叉连接)将两个 AM263x CC 连接在一起。 初始时不起作用。

    我将两个 AM263x CC 的 GND 连接在一起后、每次都通过测试。

    您是否可以尝试连接 AM263x CC 的 GND 和  TM4C129 LP 并再次进行测试?

    此致、

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

    你好 Ming  

    你绝对是对的! 当两个 GND 都已连接时工作! 当我将 CC2662连接到 Sitara (同时连接 GND)时、这个问题甚至会很糟糕

    但是现在、当我在 Sitara 上刷新一个代码时、会出现以下错误:

    该代码仍在 Sitara 上进行通信和执行、因此我不明白为什么会出现此错误。

    非常感谢您的帮助!

    此致、

    泰奥

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

    尊敬的 Theo:

    AM263x 中基本上有两种应用程序执行模式:使用 CCS + JTAG 加载和运行应用程序、以及从 QSPI 闪存引导(SBL_QSPI+ appImage)。 好像您现在正在从 QSPI 闪存运行应用程序、但错误在于您尝试连接到目标时的 CCS。

    通常、您将使用上述两种模式之一(不是同时使用两种模式)。 第一种模式通常用于应用代码开发和调试。 第二种模式通常用于生产。

    第一种模式通常与两种 SoC 初始化方法之一结合使用:将 SBL_NULL 刷写到 QSPI 闪存中、然后使用 QSPI 引导模式或将 DEV 引导模式与 GEL 文件一同使用。

    此致、