control de LED a través de USB a puerto paralelo en Linux

0

Tengo un cable USB a 25pin Logilink. Lo conecto con la computadora con Linux y obtengo un puerto en / dev / usb / lp0. Cuando conecto el LED con el pin 1 y 25 como +/- del LED, se enciende. Ahora muevo + pin de LED a pin2 (data0) pin. Quiero enviar un byte para que si pueda activarlo. Escribí un programa simple en el que utilizo outb (0xff, puerto) siendo el puerto 0x378. El programa se compila y ejecuta por primera vez, pero el LED no se enciende. La próxima vez que el programa no se ejecuta y parece estar detenido.

¿Puedo encontrar algún programa de C en Linux para hacer eso?

    
pregunta user17651

2 respuestas

3

Está intentando usar una escritura de E / S directa con algo que no es un dispositivo de E / S asignado. Esto sería completamente inviable, excepto cuando esté atrapado por los mecanismos de protección del sistema operativo (o virtualización) y se dirija al hardware más distante conectado. Sin embargo, ese no es el problema real al que te enfrentas.

Más problemáticamente, la mayoría de los adaptadores de impresora USB no son direccionables estáticamente como GPIO de la manera en que lo fueron los puertos paralelos del bus local, incluso si escribes un controlador USB personalizado para ellos. Es posible que pueda obtener el control de las señales de control, pero probablemente no establezca valores en los pines de datos como muchos se acostumbraron a hacerlo.

Estaría en mejor situación con un dispositivo de E / S USB más genérico, basado en un microcontrolador de propósito general o en algo destinado al uso de GPIO, como un FT245.

Sin embargo, esto tendrá una latencia más alta, por lo que para cualquier momento crítico, sus opciones generalmente cambian a una "computadora vieja" con un puerto paralelo real, o bien descargan todo el subsistema crítico de tiempo a un microcontrolador externo, y aumentan las solicitudes de nivel a través del USB para que pueda realizar tareas completas, en lugar de simplemente establecer esta línea o esa línea a un nivel.

    
respondido por el Chris Stratton
1

El puerto 0x378 se refiere al puerto de impresora de estilo antiguo (era DOS). Espero que su programa esté manejando el viejo puerto de la impresora. Este tipo de manejo de bajo nivel no es aplicable cuando se usa USB.

Puedo entender por qué probaste esto. Sin embargo, los controladores (de la impresora) realizan la redirección y manejan este tipo de interfaz "Histórica".

Para que esto funcione, necesita una PC antigua con un puerto de impresora o un conector en la tarjeta del puerto de la impresora (ISA / EISA / PCI) ... No recomendaría este avance pero usaría USB a Digital I / O (por ejemplo, FTDI )

    
respondido por el Spoon

Lea otras preguntas en las etiquetas