如何将字节发送到USB并口控制LED?

时间:2013-01-07 11:54:06

标签: linux c

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

现在我将LED的+引脚移到并行端口的引脚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,它总是点亮但不会变低。端口地址有问题吗?

1 个答案:

答案 0 :(得分:2)

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

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

如果失败了,看看你是否可以为笔记本电脑安装底座。如果您的笔记本电脑恰好是商务级笔记本电脑,我注意到可用的扩展坞通常都有旧的端口,并且它们可以在您尝试使用它们时起作用。