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

Posted

技术标签:

【中文标题】如何将字节发送到 USB 到并口以控制 LED?【英文标题】:How to send byte to USB to parallel port to control LED? 【发布时间】:2013-01-07 11:54:06 【问题描述】:

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

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

【问题讨论】:

阅读 en.wikipedia.org/wiki/Parallel_port 并使用其他引脚之一,也许按照那里提到的 i/o 端口操作。 我刚试过,其他数据引脚,如 pin5 和 6(data4, data6),但 LED 不亮。这是我的代码: int port=0x378; outb(0xff,端口);睡眠(1); printf("结束");我在控制台收到文本“结束”,但即使我更改 LED 的 + 引脚,LED 也不亮。我应该尝试哪个引脚?如何?请给点提示,谢谢 您是否为每个数据引脚使用了 GND 引脚?通常您写入 1 个数据字节,然后设置选通信号。我已经有一段时间没有使用并行端口了。今晚晚些时候,我可以向您发送一个控制端口的示例程序(大约 8 小时后)。 好的,谢谢,我在 GND 上只使用了两个引脚 pin25 并将 LED 连接到它。第二个引脚我检查任何数据引脚(从引脚 2 到引脚 9)并运行上面的代码。你能告诉我如何设置 stobe 信号吗?谢谢 如果您需要 USB 转 GPIO,有比模拟并行端口更好的方法来获得它。 Googling "usb gpio" 是一个好的开始。 Arduino、Raspberry Pi、Beagle Bone 等所有标准开发板也为您提供了执行此操作的方法,尽管这需要为开发板编写一些代码以将 GPIO 桥接到 USB 端。 【参考方案1】:

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

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

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

【讨论】:

对于 /dev/usb/lp0 我使用命令行命令,如 $echo $'\xFF' > /dev/usb/lp0 我观察到它做了一些事情但没有点亮 LED。当我将 LED 与 pin2 和 25 连接为 + 和 - 时。一开始我可以看到 LED 侧面有非常小的光,但是当我在命令上方运行时,非常小的光消失了,但 LED 不像我将它与闪光灯引脚连接时那样高亮。另外我只能执行上述命令两次。第三次和以后的时间我的东西命令在它似乎停止时不起作用。请问有什么办法吗?

以上是关于如何将字节发送到 USB 到并口以控制 LED?的主要内容,如果未能解决你的问题,请参考以下文章

单片机串口通信控制led灯的点亮

通过 USB 从 Python 到 Arduino 的通信

Dimmer: 通过移动鼠标来改变 LED 的亮度

需要帮助了解发送字节到串行端口

第七章 LED将为我闪烁:控制发光二极管

如何固定usb转串口