Comunicacion entre PC y dispositivo externo (fatto in casa).

Ya que estoy en forosdeelectronica y se muy poco de USB, pero casualmente siempre he querido (y quiero en este momente) apreder siquiera lo basico de USB, aprovecho para hacer algunas preguntas. No se hasta que punto conviente en terminos practicos en un mundo donde todo viene preparado y listo para usar, pero sea al menos para satisfacer una curiosidad teorica, necesito saber una cosa:

Tengo por un lado la computadora de escritorio, que llamare PC, y por el otro lo que llamare el dispositivo, consistiendo de un sistemita construido alrededor de Z80 y que incluye unl controlador USB. La PC corre un sistema operativo, llamese Windows, Linux o lo que sea. El dispositivo no tiene nada parecido. Asi que si hablo de OS (sistema operativo) entendamos que hablo del OS de la PC. Lo pregunta tiene que ver con la PC. O construyo el dispositivo de modo que se entienda con los drivers de la PC o, lo que me parece mas fácil, hago un programa especial (que corre sobre la PC) que sólo él reconoce y sabe tratar el dispositivo. Asi que pongamonos en el ultimo caso y asumamos incluso que uso Windows, que es lo que mas se usa en este foro. Seria muy dificil escribir un programa asi? Esa es la pregunta. Aqui conviene que dé este link: https://www.forosdeelectronica.com/f24/comunicacion-entre-viejo-microprocesador-pc-medio-usb-95011/ En él hablo del dispositivo en lo que hace a hardware y me ahorraria algunas palabras el que le hecharan un vistazo. Yo escribo un programa para el Z80 en la PC, usando un cross-assembler. Luego transmito el programa hacia el dispositivo, que lo guarda en su memoria volatil (RAM). Vale decir que la comunicacion es en un solo sentido, salvo los datos de control.

Al comienzo, pense usar, no USB, sino el puerto paralelo de la PC, y realizar la transmision exclusivamente con senales TTL. Si no uso una senal sincronizadora, pero no tender mas remedio que usarla, exactamente como los teclados antiguos de las PC, puedo usar una sola senal: el pueto paralelo (usando alguno de los bits en 0x372) esta normalmente alto. Corro el programa monitor del dispositivo, que espera a que la línea baje. Cuando la linea baja comienza la transmision, usando ambos el mismo protocolo, desde ya. Esto es todo lo que hay que hacer. Volviendo a USB, si pudiera entenderse directamente con el driver, el programa de la PC no tendria mucho trabajo. O talvez mas facil, en contra de lo que dije antes, seria que el programa del dispositivo respetara la noma 1.1 (o 2.0 o la que fuera) y que el programa de la PC este escrito en C, que con una sola sentencia puede encargarse de la E/S basica. Si logran enteder que es lo que estoy preguntado los felicito, porque no lo entiendo ni yo mismo. Digamos, algunas ideas.
 
Última edición:
Pregunto no seria mas fácil, utilizar el puerto serie y un cable nullmodem? me imagino que el z80 tiene librerias para utilizar un puerto serie ya que así se enviaban los datos a las impresoras.
 
el puerto usb es el mas complicado no solo tecnicamente
tambien necesitas comprar un codigo " vendor ID"en caso de que le vendas tu invento a un tercero

tambien necesitas desarrollar un driver y pocos hacen drivers

no se si encontraste la pagina oficial esta un poco oculta
http://www.usb.org/developers/docs/



de todos modos es mas facil usar un adaptador usb-rs232
siempre y cuando no necesites la velocidad del usb

o usar un cirfcuito tipo pic que venga preparado para usb y programarlo como interfaz
 
Última edición:
Como decis "casa" en "ubicacion", analogico, te voceo. Vos tenes la culpa. El poner dentro del dispositiovo (=sistema del Z80) un USB, obedece mas que a la necesidad de comunicaciones, a la de aprender USB, tema con el que varias veces me he metido pero luego he dejado. Ahora bien, uno de los ucontroladores de microchip con usb incluido tambien me permitiria lo hacer lo ultimo y, ahora que lo pienso, seria como una introduccion al tema. Pero primero me gustaria leer hojas de datos de controladores para ver si entiendo algo y, especificamente, si no me resulta muy arduo. Fijate que meti en Texas (www.ti.com) para ver que encontraba, y ante la tremenda diversidad quede mareado. Por eso EL OBJETO DE ESTE THREAD es consejo sobre CONTROLADORES. Texas, Signetics, Motorola, etc.

Otra posibilidad que baraje, que tambien implica contacto estrecho con la norma 2.0, 1.1, o la nueva (pero la 1.1 por fuerza es mas sencilla), es decir que me mete en el tema USB, es usar un proyecto de la revista Circuit Cellar, que implementa USB por software corriendo sobre un Atmel (Tiny) de ocho patitas. Pero es mas problematico aun y, desde el punto de vista didactico, le gana la opcion Microchip.
 
bueno
si quiere aprender


en el link anterior esta un zip con 30 mb de pdfs con la especificacion usb
con eso deberia ser capaz de armar su propio circuito usb sin usar integrados usb-especiales

para el software en windows necesita el wkd y visual estudio y por supesto dominar el c++
( se que se pueden hacer con otros compiladores de c++ pero desconosco el metodo)
aca
http://msdn.microsoft.com/en-US/windows/hardware/gg487428
y aca
http://msdn.microsoft.com/en-us/library/windows/hardware/ff538930(v=vs.85).aspx

si busca en la misma pagina encontrara varios ejemplos

si quiere ver como son los driver en linux es cosa facil solo mire el codigo fuente
para los usb
https://git.kernel.org/cgit/linux/k...ux.git/tree/drivers/usb?id=refs/tags/v3.9-rc3
 
Para la especificacion USB tengo desde hace mucho tiempo un CD con las revisiones 1.1 y 2.0. Y lo que posiblemente haga es usar el mas viejo de los linux que tengo, lo que me situara en la 1.1: menos que leer (aunque ya los habia leido y estudiado en su epoca) y menos, y menos complicados los drivers de linux. Tambien tengo el libro Linux Drivers, que usa como ejemplo el kernel 2.4. Pero yo tengo un linux 2.2.16, que es el que pienso instalar en alguna maquina, y partir de alli. Para la parte electronica, no me asusto ante nada, despues de haber construido sistemas de hardware de alta complejidad (ejemplo, computadora, partiendo de cero, sin machetearme de revistas o libros (salvo uno de Ciarcia) y siendo los componentes no los que un armador ensambla entre si sino compuertas y flip-flops).

Pero tampoco debo alejarme del proyecto central, que es la implementacion de una computadora, por lo cual dejare abiertas otras puertas. Recordar que lo hago todo por diversion. Hoy un microcontrolador es una computadora y, si se quiere mas, un Beagleboard o cualquiera de las computadores en un solo board.
Gracias por las referencias.
 
Última edición:
Sin haber entrado aun en tema (refrescadome) imagino que, sacando los amplificadores diferenciales en la E/S, y la logica, de la que se encargaria la CPU, necesito al menos dos registros manejados por un reloj. Se que el endpoint 1 siempre tiene que estar. Por tanto usare dos registros. Lo que no se es de cuantas etapas (bits), por lo menos, tiene que ser cada registro. Asumamos modo HID. Los datos se transferiran en paquetes. Habra paquetes de datos y de control. Cual es el paquete mas chico que se puede transmitir/recibir?

Por supuesto que estudiare las normas. Esto lo pregunto como preambulo.
 
en su tiempo cuando investigue el asunto llege a la conclusion de que era demasiado
asi que no hice nada pero al menos aprendi algunas cosas de usb

cada paquete tiene datos y control
ahora como calcular un crc no tengo idea


existen muchos documentos mucho mas didacticos que los oficiales de usb
como estos
algunos supongo ya los encontraste

http://www.i-micro.com/pdf/articulos/usb_imicro.pdf
http://www.fujitsu.com/downloads/EU/es/soporte/discosduros/UnpaseoporUSB-1.pdf
http://www.electron.frba.utn.edu.ar/~jbruno/index_archivos/Sniffer USB 2.0 - SPL08.pdf
http://www.slideshare.net/Aguevara89/paquete-de-datos-usb
 
Atrás
Arriba