您好!
我们有一个定制的 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原理图