我有一个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,它总是点亮但不会变低。端口地址有问题吗?
答案 0 :(得分:2)
端口0x378
是旧ISA并行端口所在的I / O位置。 USB连接的并行端口不会出现在那里。它不可能。我真的不太了解与OHCI / UHCI / EHCI / xHCI如何协商的低级细节,但我知道你所做的一切都必须通过USB主机控制器。因此,在最低级别,您需要查询USB总线,找到设备的VID,打开某种通信,设置通信模式,然后一次发送/接收一个字节。
尝试直接将数据写入/dev/usb/lp0
,看看会发生什么。您可能需要先执行一些操作来更改ECP模式,可能需要一些特殊的ioctl
。您可能需要深入了解此驱动程序的源代码,以便真正了解要执行的操作。
如果失败了,看看你是否可以为笔记本电脑安装底座。如果您的笔记本电脑恰好是商务级笔记本电脑,我注意到可用的扩展坞通常都有旧的端口,并且它们可以在您尝试使用它们时起作用。