【问题标题】:How to find the base address of usb to parallel port device in Linux?如何在 Linux 中找到 USB 到并口设备的基地址?
【发布时间】:2011-04-06 11:49:50
【问题描述】:

我在 Ubuntu 中使用 C 语言进行 IO 编程。我需要端口的基地址来写入数据。

我的笔记本电脑没有并行端口。所以我买了一个 USB 到并行端口的连接器。我插入设备并在 /dev/usb/lp0 中检测到它

我运行“lsusb”来查看设备列表,我也可以看到 ID。但是我怎样才能得到基地址呢?对于通常的硬件并行设备,基地址是 0x0378。使用 USB 转并行设备时未检测到此地址。

请帮忙。

【问题讨论】:

  • USB 转并行适配器不适合经典的 LPT 编程风格,因为它根本不驻留在地址空间中!如果您想做经典的 LPT 编程,请考虑为 PCI 或 PCIe 总线购买 LPT 卡。

标签: c linux linux-kernel


【解决方案1】:

USB 并行端口没有基地址 - 对于 USB 而言,这不是一个有意义的概念。恐怕通过inout 指令在PC 硬件上进行I/O 的日子在几年前就结束了,尽管许多旧教程仍然存在于网络上。

您可以将字节作为字符设备写入并行端口,这些字节将出现在打印机端口引脚上。 USB 适配器将期望另一端像打印机一样准确地握手数据。如果您想做通用 I/O 原型设计,最好使用 Arduino 等简单的 USB 微控制器。

Further discussion here.

【讨论】:

  • 我在并行端口上浪费了很多时间。但是你能给出一些关于在 C++ 中使用 USB 的指导吗?在我看来,它比并行端口复杂 100 倍。
  • 你说得对,它更复杂 - 并行端口只是一组 IO 引脚,但 USB 是一个完整的消息协议。对于 USB 编程的主机端,我将从 libusb (libusb.org) 开始。 USB 规范可用 (usb.org/developers/docs),但相当冗长。有一些面向嵌入式开发人员的教程 (computer-solutions.co.uk/info/Embedded_tutorials/…) 也可能有所帮助。
【解决方案2】:

如果您仍然有兴趣使用这款 USB 转并行打印机设备进行自己的 bit-banging,请务必了解其内置固件始终允许控制 D0..D7INIT(作为输出)、/ERRONLPE(作为输入),但对于 /ACKBUSY(输入)、/STB/从不 AF/SEL(输出)引脚。 而且您需要一个 8 位锁存器(例如 74HCT574)来在选通时捕获数据。

here (https://www-user.tu-chemnitz.de/~ygu/bastelecke/PC/USB2LPT/faq#DIY) 特别是对于可能的数据速率。

从软件端访问有点复杂,但可能,您可能需要重新构建软件和硬件以使此类适配器可用。我不知道 Linux 情况下如何访问,但恕我直言,您不需要编写内核模式驱动程序。

【讨论】:

  • 很遗憾,链接已失效
猜你喜欢
  • 2021-11-07
  • 1970-01-01
  • 2013-08-14
  • 2011-05-10
  • 2011-01-17
  • 2011-03-30
  • 2012-12-18
  • 2011-12-21
  • 1970-01-01
相关资源
最近更新 更多