¿Es posible usar un Microchip PIC32 como host y dispositivo USB al mismo tiempo?

Estoy diseñando un sistema y tal vez (si no encuentro mejores alternativas) necesitaré usar un PIC32 como controlador entre dos dispositivos USB y un host. Mi plan es usar el PIC32 para ocultar los dispositivos, por lo que el PIC tiene ciertos protocolos aguas abajo y otro protocolo aguas arriba. He estado leyendo mucho sobre la especificación USB y sobre el soporte de USB en la serie de microcontroladores Microchip PIC32. Pero aun así, tengo una duda fundamental: ¿es posible conectar dos dispositivos aguas abajo del PIC y conectar el PIC aguas arriba a un host al mismo tiempo? En otras palabras, ¿es posible que el PIC32 actúe como host y dispositivo al mismo tiempo?

Agradecería mucho cualquier pista o sugerencia al respecto

Gracias por adelantado.

¿Sus dispositivos ascendentes también son USB (y desea cambiar los datos que envían y usan), o están usando algún otro protocolo de comunicación?
@Kevin: exactamente, los dispositivos ascendentes también son USB. Quiero comunicarme con ellos desde el PIC y luego conectar el PIC aguas arriba con una PC, usando otro protocolo. El PIC sería un controlador entre la PC y los dispositivos ascendentes.
El MAX3421E es una forma práctica de hacer un host USB incorporado, aunque probablemente cueste lo mismo o más que un segundo PIC. circuitsathome.com/products-page/arduino-shields

Respuestas (4)

El USB puede estar en modo dispositivo o en modo OTG. No puede tener OTG en el mismo bus USB que un host como una computadora.

Múltiples dispositivos OTG pueden cambiar entre el modo host y dispositivo usando "HNP" (protocolo de negociación de host), pero no puede hacerlo con un host puro.

Necesitaría dos buses USB separados: uno entre la PC y el PIC, y otro entre el PIC y los dispositivos. No creo que haya ningún dispositivo PIC que tenga 2 interfaces USB distintas.

Sugeriría usar un segundo dispositivo junto con el PIC32 para que actúe como un dispositivo USB para conectarse a la PC, y usar el USB del PIC32 en modo OTG para hablar con los dispositivos. Este otro dispositivo podría ser tan simple como un chip FTDI para hablar con el PIC32 a través de RS232, o algo más potente como otro PIC (tal vez un PIC18 con soporte USB) para que puedas hablar a través de otros protocolos como I²C o SPI.

Parece que estás hablando de algo similar a un concentrador USB. Como dice Majenko, (y que yo sepa también) todos los PIC32 solo tienen un puerto USB, por lo que esto no sería posible con la PC involucrada.
Necesitaría otro dispositivo USB (por ejemplo, FTDI, Cypress IC, otro PIC) para conectar el PIC32 a la PC, y luego el PIC32 puede actuar como host para los dispositivos de descarga.

Como pregunta Kevin, ¿tienes que hablar con los dispositivos con USB? Si esto no es una necesidad, use SPI, I2C, UART o lo que sea y las cosas se vuelven mucho más simples.
Contarnos un poco más sobre los dispositivos podría generar algunas sugerencias útiles.

Dependiendo de la potencia de procesamiento necesaria, es posible que desee ver Cypress y TI y FTDI (¿Viniculum?) ya que tienen algunos circuitos integrados de controlador USB que tienen un uC incorporado, por lo que puede ser una mejor opción que el PIC32.

en principio tengo que hacerlo, porque no he encontrado dispositivos equivalentes que usen I2C por ejemplo... pero por supuesto, preferiría usar I2C, UART o algo diferente a USB si encuentro que es una opción viable.
@Frederico: respuesta actualizada con respecto a la alternativa PIC32 que quizás desee considerar.

Si lo que está tratando de hacer es conectar 2 dispositivos descendentes a un PIC32, la respuesta es no... necesitaría un concentrador, y PICS aún no tiene esos controladores (no de Microchip) (a menos que desee escribir el Conduce tú mismo y compártelo con nosotros, eso sería genial ;-) )

Si lo que estás intentando hacer es conectar un PIC como dispositivo USB, la respuesta es un simple sí. Si lo que está tratando de hacer es conectar un PIC como host y dispositivo al mismo tiempo, la respuesta es un claro no. Necesitaría un uC con 2 puertos USB... todavía no hay PIC.

Tal vez tu situación sea así:

  • PIC-1 funciona como un dispositivo para conectarse a la PC (capaz de "ocultar" sus otros dispositivos)
  • PIC-2 trabajando como host conectado a uno de sus dispositivos
  • PIC-3 trabajando como host conectado a su otro dispositivo
  • PIC-1, PIC-2 y PIC-3 interconectados con i2c u otro bus para compartir información entre ellos
  • Finalmente, ¿los PIC tienen el poder de manejar esa situación? La respuesta es sí.
NO use MAYÚSCULAS cuando NO SE REQUIERA. Hace que su publicación sea MUCHO MÁS DIFÍCIL DE LEER. Además, COMPRUEBE EL FORMATO en el área de VISTA PREVIA debajo de su publicación, notará que SE REQUIERE una NUEVA LÍNEA antes de cualquier lista. ;-)

Esto es lo que se conoce como una pregunta de "cuán largo es un trozo de cuerda". La respuesta depende completamente de cuán "difíciles" sean las tareas relacionadas con el dispositivo. Es muy probable que pueda hacer fácilmente lo que quiere. Pero, sigue leyendo...

El único problema real debería ser "¿Tiene el PIC suficientes recursos?"

Los recursos aquí incluirían:

  • Poder de procesamiento

  • Memoria de programa

  • Memoria de datos (RAM y flash)

  • Capacidad de respuesta en tiempo real (por ejemplo, la capacidad de atender interrupciones y llevar a cabo tareas impulsadas por interrupciones).

  • Periféricos de propósito especial (por ejemplo, tal vez hardware para USB y/o ethernet)

  • Otras características especiales que facilitan la implementación de una determinada interfaz de dispositivo.

  • E/S generales

  • Otro ...

El PIC32 es razonablemente capaz. USB representa una carga de programa razonablemente pesada, pero debería ser fácil determinar cuántos recursos consume. Después de eso, ¿cuántos recursos en cada categoría requiere cada una de las interfaces del dispositivo? y cuanto le queda al procesador?

Si sus dispositivos son algo así como "normales", no tendrá problemas para administrarlos y USB también.

Si sus dispositivos son especialmente exigentes, deberá abordar cada uno de los puntos anteriores. Por ejemplo, si está intentando administrar una tarjeta flash grande a 100 MB/s, o controlar una unidad SATA sin IC de interfaz personalizado, o realizar criptografía compleja en datos, o codificación de video MPEG, o... quedarse sin caballos de fuerza.

bien, pero ¿es posible que el hardware PIC32 actúe como un host USB y funcione al mismo tiempo? Me refiero a un sentido de hardware/eléctrico... entonces comenzaré a estudiar si su rendimiento es lo suficientemente bueno.
@Federico: no está claro exactamente lo que estás tratando de hacer. Cuando habla de otros dispositivos, ¿tiene la intención de que estén conectados por USB o conectados de alguna otra manera?
un diagrama de hombre pobre para aclarar las ideas: PC (anfitrión) <--- (función) PIC32 (anfitrión) <-- (función) dispositivos. Y ambos <-- (conexiones) trabajando al mismo tiempo. ¿Es eso eléctricamente posible con un PIC32?
@Federico: debe responder la pregunta que yo y otros hemos hecho: qué tipo de interfaz pretende entre cada parte. // USB para PC-PIC32?. ¿USB para la función PIC32?
@Federico - Re "está bien, pero ¿es posible que el hardware PIC32 actúe como un host USB y funcione al mismo tiempo?" Función ¿cómo? ¿Función haciendo qué? Función con qué protocolo.
Creo que tenemos un problema de terminología. Por "función" me refiero a un dispositivo USB, como se define, por ejemplo, aquí: technet.microsoft.com/en-us/library/cc939102.aspx
@Russell: puedo estar equivocado, pero no creo que estés interpretando la pregunta del todo bien. Creo que Federico está buscando algo más cercano a la respuesta de Majenko. Primero, no puede tener dos dispositivos anfitriones en el mismo bus USB, lo que implica que necesita un dispositivo PIC32 con dos puertos USB. En segundo lugar, dudo que alguien que haga este nivel de preguntas quiera usar una interfaz USB en algunos pines GPIO... Creo que estarían buscando un PIC con dos periféricos USB. Nuevamente, esta es solo mi opinión sobre la pregunta.
@Federico: está claro a partir de la discusión en varios comentarios que mis comentarios y consultas originales eran realmente relevantes Y que aún no los ha respondido. Danos una descripción más completa y obtendrás una mejor respuesta. por ejemplo, usted dice "... en principio tengo que hacerlo, porque no he encontrado dispositivos equivalentes que usen I2C por ejemplo... pero por supuesto, preferiría usar I2C, UART o cualquier cosa diferente a USB si encuentro que es una opción viable...". Entonces, OTRA VEZ use I2C/UART/xxx PARA HACER ¿QUÉ? ¿Cuáles son las funciones o módulos adicionales que está tratando de integrar? ¡Ayúdanos a ayudarte!
El votante negativo fantasma ataca 9 años después :-). identificación = :-)