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.

[参考译文] AM3358:UART 未读取

Guru**** 2560390 points
Other Parts Discussed in Thread: AM3358

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/613455/am3358-uart-not-reading

器件型号:AM3358

大家好、我正在使用两个 BeagleBone Black 板来测试 UART 功能。 BBB 具有 AM3358处理器、该处理器上有6个 UART [0:5]。 我正在尝试在 UART5上启用功能。 到目前为止、只有 TX 按预期工作、Rx 似乎没有读取。 使用技术参考手册和 UART0配置作为参考基础、我已经将 UART5控制模块寄存器配置为:  

       out32 (0x44E108C4   、(0x4 |(0x1 << 4)|(0x1 <<5));           //[P8 38] UART5_RXD */

  out32 (0x44E108C0   、(0x4 | 0x0 <<3));                /*[P8 37] UART5_TXD */

我考虑了引脚多路复用、并确保没有引脚冲突。 我还确保寄存器更改为我设置的值、并在设置后读回它们。  

就我所能知、我无需配置任何其他寄存器即可实现基本功能工作。 配置寄存器后、在两个电路板上以相同的波特率(115200)启动 UART5、并将中断 int 设置为46 (手动)、然后将 TX 引脚从一个 BBB (driverBBB)连接到另一个 BBB 的 Rx 引脚(reciverBBB)。 我使用 O 范围来验证是否正确地通过 TX 线路发送了正确的数据、但 Rx 未读取数据。

有趣的是、UART5的配置与 UART0 (模式短接)非常相似、UART0在 TX 和 Rx 上都能完美工作。 因此、我不明白为什么 UART5TX 工作、但 Rx 不工作。  

那么、我的问题是、我是否需要配置其他寄存器才能使 UART5接收?

如果它产生任何差异、我将在 QNX 中进行编码。  

任何建议都非常感谢、  

Jason

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尝试将引脚多路复用器的 TX 设置为0x0C、将 RX 设置为0x2C。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Biser、

    我按照您的建议操作 并设置 pinmux 寄存器、并在引导后验证寄存器是否确实设置为预期值。 行为没有改变。

    0x44E108C4    = 0x2C          /*[P8 38] UART5_RXD *

    0x44E108C0    = 0x0C           /*[P8 37] UART5_TXD *

    让我更详细地解释一下我的设置。 如前所述、我有两个 BeagleBone Black、一个用作发送、另一个用作接收。 两个 BBB 上的 UART5配置为19200波特、这是它们最终将连接到的器件的速度。 我的驱动程序 BBB 上有一个简单的程序、它在 TX 线上以 UART 允许的速度输出"42"、 并将一个 O 示波器连接到该行以验证数据是否通过 TX 发送。  TX 线连接到另一个 BBB Rx 引脚、在该 BBB 上、我有一个正在运行的简单程序  、该程序会等待 从 Rx 读取任何数据。 现在、我甚至不关心它是否读取正确的数据、我只希望它读取任何内容。 可能我尝试错误地读取数据、 但我的读取方法在 UART0上可以正常工作。 下面是我用于读取的简单程序、它在 UART0上工作正常。   

    int main (int argc、char * argv[]){

     printf ("正在运行数据 TX 写入...\n");

     fd = open ("/dev/ser2、O_RDWR);//SER2是 UART5es UART0 live under ser1的目录、工作正常。
     memset (in_buffer、0、sizeof (in_buffer));
     如果(FD > 0){

     COUT <<"File Open and descriptor ="<<FD <<endl;
      读取(fd、in_buffer、2);
      COUT <<"来自 RX 的数据:"<<< IN_BUFFER << endl;
     }否则{
      cout <<"未打开文件。 \n";
     }

    返回0

    }    

    此程序将在 read()行等待 数据被接收并退出。

    还有其他想法吗?

    谢谢、

    Jason

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、我们不支持 QNX、因此无法复制此内容。 您是否已检查 Linux 下是否存在相同的问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Biser、  

    是的、我在 Linux 上尝试过、但即使在 TX 上也无法使 UART5正常工作、但我没有花太多时间对此进行调查、因为我的要求是需要使用 QNX。 感谢您的建议、我知道您在这里不支持 QNX。 我也有一个有关 QNX 的查询。 他们建议我向 TI 提出问题、因为 UART 是 AM3358处理器的一部分。  如果你有其他想法可以尝试、我愿意接受建议、否则、再次感谢您的帮助、我对此表示赞赏。  

    Jason

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jason --你提到你把一个板的 Tx 连接到了另一个板的 Rx。 您是否将两个电路板的接地端连接在一起、以确保它们具有通用基准?

    另一个需要注意的问题是、如果存在任何类型的线路缓冲或任何正在进行的操作、可能会尝试跨线路发送"\n" (例如、这是您通过 printf 等运算看到的内容、在到达行末尾之前、printf 不会将数据刷新为 stdout。)

    驱动程序是否使用 DMA? 如果是、您是否填写了相应的 DMA 事件?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Brad、  

    很抱歉,我以为我已经回答了这个问题。 我正在确保通过线路发送'\n'、这是必需的。 我在使其正常工作方面取得了一些进展、但现在的情况是、我认为驱动程序不会将 DMA 用于 UART 的1-5。 由于这种行为以及我发现的另一种行为、即在 RX 上读取的所有数据在 TX 上回显(使用 O 范围时可以看到)、QNX 支持工程师和我认为 QNX 驱动程序存在错误。 我们现在正在等待他们的 BSP 团队的回复以进行验证。 感谢您的建议。  

    当我找到此问题的解决方案时、您是否希望我发布它?

    谢谢、  

    Jason

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

    [引用 user="Jason Wilkins"]当我找到此问题的解决方案时,您希望我发布它吗?

    我认为、只要您不违反任何保密协议等、这将是有用的