¿Cómo crear un adaptador PCI externo que se ejecute en USB3.0?

3

Motivado por antiguas tarjetas PCI (NO PCIe) y computadoras portátiles sin ranuras de expansión, quiero intentar hacer una solución PCI sobre USB 3.0. Esto es aproximadamente un 70% de experimentación y un 30% de uso real.

¿Es esto viable? Estaba pensando en comprar algo como este controlador USB Cypress , junto con una tarjeta maestra de bus PCI, y Adivinando) un microcontrolador para interconectar los dos.

No tengo experiencia en esto, por lo que quiero aprender ... Soy un EE, pero no tan avanzado.

¿Esto es factible? ¿Sería posible como un proyecto de aprendizaje a largo plazo?

    
pregunta Milind R

5 respuestas

3

Hay dos desafíos:

  1. Latencia

    USB tiene dos órdenes de magnitud de latencia mayor que PCI. Muchos controladores PCI asumen que la memoria asigna el acceso a los registros en la tarjeta PCI con el bloqueo de la CPU en la transacción del bus. Es probable que los controladores PCI no modificados sobre un puente PCI sobre USB falle debido a suposiciones de latencia erróneas.

    Marque este estudio sobre la latencia de PCI : la latencia media de la PCI es del orden de 400ns La latencia media de PCIe es del orden de 2000ns. La latencia del USB 3.0 de acuerdo con el artículo que vinculó es en el orden de 30us.

  2. Red de bus vs. paquete

    Si bien PCI es un bus, PCIe y USB son redes basadas en paquetes. El puente raíz de PCIe oculta la complejidad de una red de paquetes y presenta a la CPU algo que parece un bus. Ciertamente, es posible hacer lo mismo a través de USB, pero si desea controladores binarios compatibles, su interfaz de hardware hacia la CPU debe parecerse más o menos a PCI y terminará con algo como un puente raíz PCIe. Probablemente esto no sea algo que se pueda lograr con los conjuntos de chips USB comunes con interfaces * HCI.

respondido por el edgar.holleis
3

Las tarjetas PCI se enumeran y asignan direcciones en los espacios de direcciones del host (tanto el espacio de memoria como el espacio de E / S). Las tarjetas pueden DMA en cualquier lugar de la memoria principal y, en principio, incluso DMA entre sí sin pasar por la memoria principal (aunque esto rara vez se realiza fuera del kit de especialistas de la talla de National Instruments).

Los controladores para tarjetas PCI no esperan pasar solicitudes a través de controladores de nivel inferior. Esperan poder hablar directamente con la tarjeta a través de la memoria y / o el mapa IO.

Puede probar y falsificar los accesos a la memoria, por ejemplo, utilizando las funciones de virtualización de la CPU host, pero es probable que tenga problemas de latencia significativos.

Por lo tanto, me parece poco probable que un adaptador de este tipo pueda funcionar de manera aceptable con los controladores existentes para las tarjetas. La única forma viable de hacer que un adaptador de este tipo sea la rediseño de los controladores para cada tarjeta con la que quiera trabajar, decidiendo cuidadosamente qué tareas mantener en la computadora host y qué tareas mover al adaptador.

Si desea utilizar su hardware con los controladores estándar, necesitará una interfaz similar a PCI para el host, como cardbus, expresscard o thunderbolt.

    
respondido por el Peter Green
1

No veo ninguna razón por la que no sea factible, pero estás asumiendo bastante el proyecto aquí. Hay muchas capas que tendrás que implementar para que tenga éxito. Su solución final probablemente se verá así:

PCI Physical - > Controlador PCI - > Traductor de MCU - > Controlador de cliente USB - > Controlador de host USB y emulación de dispositivo USB a PCI

Creo que su enfoque propuesto es probablemente el más simple, ya que solo tendría que programar el microcontrolador Man-in-the-middle para que sea un traductor entre el bus maestro PCI y el controlador USB (y el controlador del host). Sin embargo, me gusta combinar componentes de hardware siempre que sea posible, así que aquí hay algunas alternativas para usted:

  • Sistema en un chip (combina PCI Phy & bus master, MCU y controlador USB)
    El sistema en soluciones de chip, similar a la Cypress PSoC , podría permitirle reducir el hardware adicional mediante la integración de la capa PCI PHY, el controlador PCI y el controlador USB de su dispositivo en un solo chip, al mismo tiempo que conserva la capacidad de realizar parte de su trabajo en una CPU en C en lugar de hacerlo todo en una HDL. Como ha señalado en un comentario, el ancho de banda del bus PCI (133 MB / s en su punto más lento) es mucho mayor que el FSUSB proporcionado por Cypress para chips PSoC (~ 1,5 MB / s), lo que creará problemas de ancho de banda. Ese chip en particular no funcionará para ti, pero lo elegí como un ejemplo de un SoC ya que es el único con el que he trabajado. Deberá encontrar uno con soporte USB 3.0 para cumplir con sus requisitos de ancho de banda.

  • Todos los FPGA (combina PCI Phy & bus master, MCU y controlador USB)
    Es posible que pueda encajar todo el trabajo de PCI y USB en un único FPGA si se siente confiado en sus habilidades HDL. Intente buscar implementaciones HDL de código abierto de los protocolos PCI y USB para ahorrar trabajo.

  • Microcontrolador con USB 3.0 (combina MCU y controlador USB)
    Una tercera opción sería utilizar un chip como MCU de Sitara de TI que contienen un USB 3.0 controlador y PHY, que podrían conectarse a su maestro de bus PCI en lugar de tener una MCU separada. En Google para el "microcontrolador USB 3.0" se muestran algunas otras opciones.

Desafortunadamente, todas estas alternativas aún requieren un controlador en el lado del host que puede hacer que un dispositivo USB aparezca como un dispositivo PCI para que algo pueda usarlo. No conozco ninguna biblioteca que pueda ayudar con esto, por lo que puede estar solo para ese componente.

    
respondido por el skrrgwasme
0

El producto existente está hecho por ARS Technologies (arstech.com). Su sitio web sugiere que están basados en EE. UU., Pero no creo que lo estén.

No recuerdo si el host permitía el uso de los controladores PCI existentes o si requería una interfaz de controlador USB.

    
respondido por el Don
0

Nota: respondiendo a un hilo viejo. Puede que esto no sea lo que usted quiere escuchar, pero estas tarjetas se pueden comprar en Taobao en China y, por lo tanto, muy probablemente en Aliexpress. Estas tarjetas se mostrarán como un bus PCI y un puente PCI a PCI. Tengo varios para nosotros con tarjetas de hardware más antiguas (como el Catweasel MK4)

    
respondido por el gbraad

Lea otras preguntas en las etiquetas