我有一条 USB 转 25 针并行端口电缆。我将它连接到笔记本电脑并在/dev/usb/lp0 处获得一个端口,如果我将并行端口的 pin1/pin25 连接到 +/- LED,它就会亮起。
现在我将 LED 的 + 引脚移动到并行端口的引脚 2,并尝试将字节发送到端口,它应该亮起,但没有。
我使用命令outb(0xff,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,它始终亮起但不会变低。端口地址有问题吗?
最佳答案
端口0x378
是旧ISA并行端口所在的I/O位置。 USB 连接的并行端口不会出现在那里。不可能。我真的不太了解如何与 OHCI/UHCI/EHCI/xHCI 进行通信的底层细节,但我知道您所做的一切都必须通过 USB 主 Controller 。因此,在最低级别上,您需要查询 USB 总线,找到设备的 VID,与其打开某种通信,设置通信模式,然后一次发送/接收一个字节。
尝试将数据直接写入 /dev/usb/lp0
并看看会发生什么。您可能需要先执行某些操作来更改 ECP 模式,可能需要执行一些特殊的 ioctl。您可能需要深入研究该驱动程序的源代码才能真正找出要做什么。
如果失败,请查看是否可以为您的笔记本电脑找到一个底座。如果您的笔记本电脑恰好是商务级笔记本电脑,我注意到可用的扩展坞通常带有旧端口,并且当您尝试在此处使用它们时它们就会工作。
关于linux - 如何向USB转并口发送字节来控制LED?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14206556/