【问题标题】:Get binary data out of usb port从 USB 端口获取二进制数据
【发布时间】:2011-09-23 14:07:27
【问题描述】:

我用 Python 编写了一个 PRN 生成器,我正在尝试测试这些序列以验证它们。我有一个误码率测试仪,但为了让一切正常工作,我需要为它提供时钟数据。

有没有办法通过 USB 或串口从计算机中获取原始二进制数据?我还没有找到任何能够做到这一点的 python 模块,但我使用的语言并不重要,所以如果这可以用不同的语言实现,我可以使用它。

【问题讨论】:

  • 你用的是什么系统?这里有一个关于 linux 的很好的话题:stackoverflow.com/questions/469243/… 可能不完全是,您正在搜索的内容,但它可能有用。
  • 我使用的是windows,但我可以轻松切换到linux,因为这只是一个测试。我的目标实际上只是避免使用微控制器向我的测试仪发送数据,因此解决方案不必是特定于平台的。

标签: python random binary serial-port usb


【解决方案1】:

要从串口获取数据,请使用pyserial。要转换二进制数据,请使用struct 模块。这些工具应该适用于 Windows、Linux 和 Mac。

编辑: 也许,通过“原始数据”,OP意味着他想将串行端口用作没有串行协议的DIO接口?这种类型的事情通常使用并行端口完成,并且使用 pyserial 中的 pyParallel 模块很容易且可能(假设有一个并行端口)。我不知道直接用串口做这个。

【讨论】:

  • 对不起,我应该提到我正在使用 pyserial。我知道如何从我的计算机的串行端口发送二进制数据,但这不包括某种类型的数据包会改变正在发送的数据吗?我需要让串口准确地传输我发送的位。
  • seria.write 可以发送字节、字节数组或 str 对象。通常人们将他们的二进制数据转换成字符串,这就是我推荐 struct 模块的原因。不过要清楚一点,这是发送准确的逐字节数据,但只是将数据以字符串对象的形式提供给 serial.write。
  • 我一直以字节数组的形式发送我的数据,所以我知道我发送的是什么字节。问题是,RS-232 标准需要开始位和停止位。另外,我认为串行连接是小端的。因此,如果我将 F0 作为字节数组发送,我会在我的示波器上看到 5 个高位,然后是 5 个低位(第一位和最后一位分别是开始和停止,并且数据被反转)。我需要的是找到一些方法来发送我的数据而无需开始和停止位并更改字节顺序。
  • 您可以使用 struct 模块更改您发送的数据的字节顺序。开始位和停止位是协议的一部分(不是真正的位,顺便说一句,而是时间间隔),因此删除这些没有意义,因为您将不再使用他的 rs232 协议,而您的接收器不能t 接收等。所以我认为除了开始和停止位之外,有些东西不像你所期望的那样,通常是奇偶校验、字节大小等,这些都是协议中的有效参数。
  • 我实际上是在尝试寻找一种不使用 rs232 协议进行通信的方法,因为我的测试仪没有所需的串行端口,但我们刚刚得到了一个新的接口模块,所以我又开始使用了pyserial 是正确的(而且不那么令人沮丧)的方式。
猜你喜欢
  • 1970-01-01
  • 2012-03-06
  • 2013-10-07
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
相关资源
最近更新 更多