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.

[参考译文] AM3352:USB 转 UART + UART 转 RS485在 PC 上工作良好、但 AM3352上信号丢失

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/988411/am3352-usb-to-uart-uart-to-rs485-working-well-on-pc-but-signal-lost-on-am3352

器件型号:AM3352

您好!

我们有一个定制的 AM3352板。 我们将一个4端口 USB 集线器 IC (GL852G)连接到 USB2。 USB 集线器的所有 USB 端口均可与调制解调器配合使用。

现在、我们将两个 USB 转4端口 UART IC (FT4232HL)连接到 USB 集线器(GL852G)的两个端口。
我们 通过 USB 引脚电缆将5V 从电路板连接到(FT4232HL)(IC 在 PCB 上由5V 驱动、而不是从 AM3352 USB 引脚驱动)。
然后、我们将每个 UART 连接到 UART 转 RS485收发器(LTC2862)、总共有8个端口 RS485。

[6.022868] musb-hdrc musb-hdrc.1:MUSB HDRC 主机驱动程序
[6.057671] musb-hdrc musb-hdrc.1:注册了新的 USB 总线、分配了总线编号1
[6.114172] USB USB1:找到新的 USB 器件、idVendor=1d6b、idProduct=0002、bcdDevice=4.19
[6.140180] USB USB1:新 USB 器件字符串:MFR=3、Product=2、SerialNumber=1
[6.155351] USB USB1:产品:MUSB HDRC 主机驱动程序
[6.168384] USB USB1:制造商:Linux 4.19.94-SRG52x-RT52 musb-hcd
[6.186777] USB USB1:串行编号:musb-hdrc.1.
[6.626051] USB 1-1:使用 musb-hdrc 的新型高速 USB 器件编号2
[6.779469] USB 1-1:找到新的 USB 设备、idVendor=05e3、idProduct=0610、bcdDevice=32.98
[6.787697] USB 1-1:新 USB 器件字符串:MFR=0、Product=1、SerialNumber=0
[6.794867] USB 1-1:产品:USB2.0集线器
[7.342223] USB 1-1.3:使用 musb-hdrc 的新型高速 USB 器件编号4
[7.454968] USB 1-1.3:找到新的 USB 设备、idVendor=0403、idProduct=6011、bcdDevice=8.00
[7.465544] USB 1-1.3:新 USB 器件字符串:MFR=1、Product=2、SerialNumber=3
[7.475067] USB 1-1.3:产品:USB <->串行转换器
[7.480422] USB 1-1.3:制造商:FTDI
[7.486699] USB 1-1.3:序列号:FT6G4VVC
[7.594263] USB 1-1.4:使用 musb-hdrc 的新型高速 USB 器件编号5
[7.706939] USB 1-1.4:找到新的 USB 设备、idVendor=0403、idProduct=6011、bcdDevice=8.00
[7.717752] USB 1-1.4:新 USB 器件字符串:MFR=1、Product=2、SerialNumber=3
[7.730363] USB 1-1.4:产品:USB <->串行转换器
[7.737649] USB 1-1.4:制造商:FTDI
[7.741691] USB 1-1.4:序列号:FT60GS8P
[40.659179] usbcore:注册的新接口驱动程序 usbserial_generic
[40.659363] usbserial:USB Serial Support registered for generic
[40.846589] usbcore:注册的新接口驱动程序 FTDI_SIO
[40.846703] usbserial:为 FTDI USB Serial Device 注册的 USB Serial Support
[40.8474747472] USB 1-1.3:检测到 FT4232H
[40.849266] USB 1-1.3:FTDI USB 串行器件转换器现在连接到 ttyUSB0
[40.855322] USB 1-1.3:检测到 FT4232H
[40.867131] USB 1-1.3:FTDI USB 串行器件转换器现在连接到 ttyUSB1
[40.882739] USB 1-1.3:检测到 FT4232H
[40.899182] USB 1-1.3:FTDI USB 串行器件转换器现在连接到 ttyUSB2
[40.900943] USB 1-1.3:检测到 FT4232H
[40.901528] USB 1-1.3:FTDI USB 串行器件转换器现在连接到 ttyUSB3
[40.910768] USB 1-1.4:检测到 FT4232H
[40.931416] USB 1-1.4:FTDI USB 串行器件转换器现在连接到 ttyUSB4
[40.932014] USB 1-1.4:检测到 FT4232H
[40.938447] USB 1-1.4:FTDI USB 串行器件转换器现已连接至 ttyUSB5
[40.939003] USB 1-1.4:检测到 FT4232H
[40.947966] USB 1-1.4:FTDI USB 串行器件转换器现已连接至 ttyUSB6
[40.948693] USB 1-1.4:检测到 FT4232H
[40.962382] USB 1-1.4:FTDI USB 串行器件转换器现在连接到 ttyUSB7

我们需要验证这八个 RS485端口、因此连接其中的两个 RS485端口、并编写一个脚本以进行接收和发送。
连接 ttyUSB0和 ttyUSB4进行测试

///---------------------------------------------- //
//测试脚本
///---------------------------------------------- //
TESTSTRING_SEND0=SEN-TO-TTYUSB0、SEN-TO-TTYUSB0、SEN-TO-TTYUSB0、SEN-TO-TTYUSB0、SEN-TO-TTYUSB0
TESTSTRING_SEND4=SEN-TO-TTYUSB4、SEN-TO-TTYUSB4、SEN-TO-TTYUSB4、SEN-TO-TTYUSB4、SEN-TO-TTYUSB4

stty -F /dev/ttyUSB0 9600 raw
stty -F /dev/ttyUSB4 9600 raw

#发送到 ttyUSB0并监听$BPORT
执行3 </dev/ttyUSB4                  将串行输出重定向至 FD 3
CAT <&3> dump_ttyUSB4.dat &         #redirect serial output to file
PID=$!                               #保存 PID 以终止 CAT
休眠0.5秒
Echo $TESTSTRING_SEND0 >/dev/ttyUSB0      #send 命令字符串到串行端口
睡眠 1                              #等待响应
终止$PID                              #kill CAT 进程
等待$PID 2>/dev/null                   #supress "terminated (终止)"输出
执行3<&-                            FREE FD 3.

休眠0.5秒

#发送到 ttyUSB4并侦听 ttyUSB0
执行3 </dev/ttyUSB0
CAT <&3> dump_ttyUSB0.dat &
PID=$!
休眠0.5秒
Echo $TESTSTRING_SEND4 >/dev/ttyUSB4
睡眠1
终止$PID
等待$PID 2>/dev/null
执行3<&-
///---------------------------------------------- //
//测试脚本结束
///---------------------------------------------- //

测试是可以的、但我们获得  了正确的高速数据(波特921600)、有时是错误的中速数据(波特115200)以及几乎所有错误的低速数据(波特9600和4800)。

我们连接逻辑分析仪来检查 FT4232HL (ttyUSB0)的 UART-TX、收发器的 RS485-A/B、FT4232HL ( ttyUSB4)的 UART-RX。
TX 正确、RS485出错、RX 中数据丢失。

然后、我们尝试在 AM3352上通过 PC 而不是 USB 集线器进行测试。
我们将两个 USB 转4端口 UART IC (FT4232HL)连接到  PC。
然后、我们将每个 UART 连接到 UART 和 RS485收发器、总共有8个端口 RS485。
PC 上还有8个 COM 端口。
我们将字符串从  一个 COM 端口的 PuTTy 发送到另一个 COM 端口的另一个 PuTTy。
无论波特率是多少、所有数据都是正确的。
因此、USB 转4端口 UART IC (FT4232HL)和 RS485收发器(LTC2862)的硬件应该正常。

对于 AM3352、该问题的原因是什么?

另请附上 USB 原理图



非常感谢。

 

连接 USB 转 UART 和 UART 转 RS485原理图

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

    您好!

    您使用的 SDK 版本是什么?

    您能否绘制一个简单的图来显示捕获逻辑分析仪迹线的探测点?

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

    您好!

    引导加载程序基于 TI Linux RT SDK 的 u-boot 2019.01

    git.ti.com/.../

    基于 TI Linux RT SDK 的内核以及 BeagleBone 补丁

    TI 处理器 SDK Linux RT AM335X、06_03_00_106

    software-dl.ti.com/.../index_FDS.html

    BeagleBone R52补丁

    https://github.com/RobertCNelson/ti-linux-kernel-dev/releases/tag/4.19.94-ti-rt-r52

    我无法在回放中上传图像、因此我将插入原始帖子。

    我们有两个 USB 转4端口 UART IC (FT4232HL)。

    我们将一个 FT4232HL 的 ADBUS 连接到另一个 FT4232HL 的 ADBUS。

    我们进行检查

    UART-TX:一个 FT4232HL 的"TXD1"

    RS485-A/B:LTC2862的"A1/B1"。

    UART-RX:另一个 FT4232HL 的"RXD1"。

    一个 LTC2862的 A1连接到另一个 LTC2862的 A1、一个 LTC2862的 B1连接到另一个 LTC2862的 B1。

    NTB0104GU12 用于3.3V 至5V 的电平转换。

    NTB0104GU12不应成为问题、因为我们已将其移除并 将 FT4232HL 的引脚连接到 FT4232HL 的引脚、并且它具有相同的问题。

    BTW、我们已连接到实际的 RS485 Modbus 器件(功率计 ADTEK CPM-70)。

    在 AM3352中安装 modpoll 工具、并通过 modpoll 工具读取 meter 中的值。

    https://www.modbusdriver.com/modpoll.html

    没关系。

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

    您好!

    谢谢解释、我跟着它、在一张纸上画了一张图、基本上就是这样

    AM    <--> FT4232HL(tx) <--> LTC2862(tx) <--+
    335x                                        |
    USB   <--> FT4232HL(rx) <--> LTC2862(rx) <--+

    现在、我了解了两个 RS485收发器之间或 RS485 (Rx)和 FT4232HL (Rx)之间会发生数据损坏。

    由于数据在 FT4232HL (TX)的 TXD1上是正确的、我认为在 AM335x 端这个问题不太可能。

    由于 FT4232HL 和 LTC2862不是 TI 器件、我无法评论数据损坏是如何发生的。 我唯一能说的就是检查 FT4243HL 的去控制时序、如果你可以在传输数据之前和之后添加一些延迟的话。 如果这无法解决问题、您需要联系 FT4232HL 或 LTC2862的供应商以获得帮助。

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

    是的、我不认为这个问题在 AM3352的开头。
    但是、如果我们将 AM3352和 USB 集线器(GL852G)替换为 PC USB 端口、一切都正常。
    PC (一个 USB 端口) <--- > FT4232HL (TX)<->LTC2862 (TX)<-+
    PC (其他 USB 端口)<->FT4232HL (Rx)<->LTC2862 (Rx)<-+

    因此、我只是想了解这个问题的一些线索。
    我们将尝试检查 DE。 非常感谢。

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

    是的、我知道 PC 不会出现此问题。 我们只需将其缩小到根本原因。

    如果您想知道、在打开 UART 端口时、RS485配置中指定了 RTS 在传输前和传输后的延迟:

    rs485conf.delay_rts_after_send = ...
    rs485conf.delay_rts_before_send = ...

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

    由于对于 AM3352、它 只是一个 USB TTY 串行端口、而不是真正的 UART 端口。
    是否仍有任何配置?

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

    我认为这是由 FT4232HL 驱动程序决定的(我不知道细节)。 如果它支持 RS485模式、那么是的、它应该接受此 RS485配置。