PL2303连接到CP210X时发生奇怪的位移

时间:2013-05-30 09:20:34

标签: linux-device-driver embedded-linux usbserial

我有两个USB串行适配器连接到运行ARM的基于Linux的{​​{1}}框。一个适配器是Debian,显示为PL2303HX。第二个是/dev/ttyUSB0,显示为CP210X。出于测试目的,它们彼此连接(/dev/ttyUSB1)。两者都设置为RX -> TX, TX -> RX, GND -> GND 9600,没有奇偶校验,1个停止位(8 bits),没有硬件流控制,没有软件流控制。 “9600 N81”显示两个串行端口的完全相同的标志。

我将数据从一方发送到另一方,但我没有收到与我发送的数据相同的数据。无论数据流方向如何,行为都是相同的。我写了一个快速程序,它发送位,从右向左移动它们,只是为了理解数据发生了什么。

这是我发送的数据,以及另一方收到的数据:

stty -aF /dev/ttyUSBx

这是二进制文件。左边,我送的。右边,收到了什么:

 -> Send 01   <- Receive 7F
 -> Send 02   <- Receive 3F
 -> Send 04   <- Receive 1F
 -> Send 08   <- Receive 0F
 -> Send 10   <- Receive 07
 -> Send 20   <- Receive 03
 -> Send 40   <- Receive 01
 -> Send 80   <- Receive 00

这是我编写的非常简单的代码(用PHP编写以保持简单):

https://gist.github.com/skaag/5676769

看起来芯片上正在发生某种翻译,但我不知道为什么或如何修改它。

要澄清几点:

  • 当我将两个PL2303适配器相互连接时,它们很好地相互通信(在同一台机器上)
  • 这两个适配器在Windows中运行良好,并成功与外部基于RS-232的设备通信
  • 两个适配器都在Windows和Linux上通过了echo测试
  • 这排除了PL2303芯片行为不端/片状的可能性
  • 问题只发生在Linux下(试过Debian 6,Ubuntu 12.04和13.04)
  • 我怀疑问题是新一代PL2303芯片(Linux PL2303驱动程序源代码有点旧)

任何人都知道这里发生了什么?我该如何解决这个问题?

0 个答案:

没有答案