2

我有一根 USB 转 25 针并行端口电缆。我将它连接到笔记本电脑并在 /dev/usb/lp0 处获得一个端口,如果我将并行端口的 pin1/pin25 与 +/- LED 连接,它就会亮起。

现在我将 LED 的 +pin 移动到并行端口的 pin 2,并尝试将字节发送到端口,它应该会亮起,但不会。

我使用outb(0xff,port)port 所在的命令0x378。我在这里想念什么?

这是我的完整程序:

#include<stdlib.h>
#include<stdio.h>
#include<sys/io.h>
void main(void){
    int port=0x378;
    outb(0xff,port);
    outb(0x01,port+2);
    sleep(1);
    outb(0x00,port+2);
    printf("‌​End");
}

我也检查过port=0x3bc但没有用。我什至通过连接 LED 的 + 来检查频闪引脚 1,它总是亮着但不会变低。端口地址有问题吗?

4

1 回答 1

2

端口0x378是旧 ISA 并行端口所在的 I/O 位置。USB 连接的并行端口不会出现在那里。它不能。我真的不太了解如何与 OHCI/UHCI/EHCI/xHCI 通信的底层细节,但我知道你所做的一切都必须通过 USB 主机控制器。因此,在最低级别上,您需要查询 USB 总线,找到设备的 VID,打开与它的某种通信,设置通信模式,然后一次发送/接收一个字节。

尝试将数据直接写入/dev/usb/lp0,看看会发生什么。您可能需要先更改 ECP 模式,可能需要一些特殊ioctl的 . 您可能需要深入研究此驱动程序的源代码才能真正了解要做什么。

做不到这一点,看看你是否可以为你的笔记本电脑安装一个底座。如果您的笔记本电脑恰好是商务级笔记本电脑,我注意到可用的扩展坞通常具有旧端口,并且它们可以在您尝试在此处使用它们时工作。

于 2013-01-07T12:48:49.827 回答