fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Comunicacion median...
 
Avisos
Vaciar todo

Comunicacion mediante USB en C (PC)

2 Respuestas
2 Usuarios
0 Reactions
15 K Visitas
lacabra25
Respuestas: 84
Topic starter
(@lacabra25)
Trusted Member
Registrado: hace 18 años

hola, he estado buscando por google, sin exito, como se podria enviar o recivir datos a traves de USB desde un programa en C, a ser posible con bibliotecas estandar para mantener la portabilidad, o mediante llamadas al sistema para linux y para windows y mantener la portabilidad con una compilacion condicional, en definitiva que si no se puede con las bibliotecas estandar quisiera saber como se podria hacer con llamadas al sistema, ademas de la comunicacion con el USB tambien necesitaria para el programa alguna forma de poder saber cuantos USB existen, cuales tienen algun dispositibo conectado, y ese tipo de cosas para poder diferenciar un USB de otro y poder elegir si enviar y recivir datos de uno u otro, y si hay alguna forma de poder saber que es lo que hay conectado en el USB (si se trata de un pendrive, una camara o un USB conectado a una placa con un PIC o un USB conectado a una placa con un par de reles....). Pues eso, que si saben de manuales, PDFs webs o cualquier otra forma de informacion se lo agradeceria.

Se que lo siguiente no iria en este tema, pero como esta relacionado con lo anterior pues he pensado que no estaria de mas ponerlo junto. Un USB no son mas que cuatro cables, por lo que tengo entendido dos que dan la alimentacion y dos para los datos, necesitaria saber de que forma se envian y reciven los datos por el USB a nivel fisico (es decir, como un byte, por ejemplo 00101101, saldria por el USB, de que forma serian los pulsos electricos en los cables y eso) y la inversa, como unos determinados pulsos serian enviados al ordenador.

Se que para la robotica hay mucha informacion sobre como usar el puerto serie y el paralelo, pero seamos practicos y realistas, ya hay ordenadores que no traen ambos puertos, que solo traen el serie o el paralelo o que no traen ninguno, y sinembargo todos los ordenadores traen ya varios USBs. Basicamente lo que intento es poder programar en C un programa para comunicarme con un determinado puerto USB en el que tendre conectado un cable USB y como serian los impulsos electricos en el USB en funcion de los datos que envie el PC y como poder enviar datos al PC desde el cable USB, todavia no tengo pensado que hacer pero una vez que pueda hacer esto ya solo es cuestion de echarle imaginacion y ponerme manos a la obra a construir algo que controlar por USB.

Agradeceria mucho si la informacion que me podais ofrecer estuviese en PDF u ODT (para asi poder guardarlo en el disco duro y no tener que estar entrando en internet cada vez que me ponga a leer), pero tambien son bienvenidas paginas web o similares.
Gracias por adelantado a todos.

Responder
1 respuesta
fj_sanchez
Respuestas: 1083
(@fj_sanchez)
Ardero
Registrado: hace 19 años

Buenas, a ver vayamos por partes. Para lo de programar usando el USB, creo que hay una librería que se puede instalar tanto en linux como en windows, se llama libUSB. Buscando un poco debería de encontrarla. De todos modos, dependiendo del tipo de dispositivo, la programación será de una forma u otra; si conectas un adaptador USB-serie, en linux aparecerá un nuevo fichero de dispositivo llamado /dev/ttyUSB0 (por ejemplo), o si es un dispositivo que use el protocolo de almacenamiento masivo, aparecerán /dev/sda y /dev/sda1. Es más complejo de como lo pintas.

Respecto a lo de la especificación eléctrica, de los 4 cables como bien dices, 2 son para alimentación, y los otros dos funcionan en modo diferencial para los datos. No se si sabes lo que es modo diferencial, pero te lo explico brevemente para que lo sepas, básicamente la información no viaja en la señal, sino en la diferencia existente entre las dos señales que viajan por D+ y D-. Estas señales son inversas la una de la otra y se usa de esta forma para ganar inmunidad ante los ruidos y además se eliminan todos los armónicos pares de la señal, aunque claro, esto complica más el diseño de los emisores/receptores.

Para no tener que complicarte con estas cosas tienes un par de opciones, una es montar un transceptor externamente a tu microcontrolador; y la otra usar un microcontrolador que ya disponga de capacidades USB (por ejemplo el PIC 18F4550 o 18F2550).

Si aún así quieres más detalles, creo que la especificación de USB es abierta, por lo que solo tienes que descargártela desde la página http://www.usb.org/ " onclick="window.open(this.href);return false;

Suerte.

Responder
Compartir: