Múltiples dispositivos PCIe en una sola ranura M.2

Tengo una ranura M.2 con llave M en mi computadora portátil y varios dispositivos M.2 PCI-e que me gustaría usar al mismo tiempo. Estuve buscando un conmutador o divisor M.2 pero no pude encontrar nada, así que decidí diseñar el mío propio y también ganar algo de experiencia en PCI Express.

Traté de buscar especificaciones para la capa física PCI Express pero no pude encontrar mucha información. La mayoría de los artículos que encontré se refieren al sitio web de PCI-SIG que necesita una membresía con un correo electrónico de trabajo (que no tengo) de una de las compañías miembro. Así que traté de aprender lo más posible por mi cuenta.

Por lo que pude entender, una ranura M.2 M-key expone 4x carriles PCI-e. Los dispositivos que tengo son una combinación de teclas A/E, E y M. Los dispositivos clave A/E y E requieren 1 o 2 carriles PCIe. Ninguna de las tarjetas que tengo necesita las características específicas de M.2 como USB o DisplayPort. También estoy completamente de acuerdo con los dispositivos M-key (x4) que se ejecutan en 2 carriles o incluso en un solo carril a velocidades reducidas. También aprendí que cada carril PCI-e tiene un par diferencial de transmisión y recepción, y que el host proporciona un reloj de referencia. Así que me pregunto;

  • si diseño una placa que divida los 4 carriles en la ranura de la tecla M en 2 carriles en una tecla E M.2 (en los números de pin coincidentes) más 2 carriles más en una tecla M M.2 (con los otros 2 carriles N / C) y use el reloj de referencia en ambas ranuras, ¿funcionaría eso?
  • ¿Necesito almacenar en búfer el reloj de referencia o puedo unirlos?
  • Dado que el bus I2C es de drenaje abierto, ¿puedo unirlos todos? (Lo mismo con SMBus)
  • ¿Qué hace la línea CLKREQ# en PCI Express? Por lo que pude entender, la tarjeta PCIe afirma esta línea cuando necesita un reloj de referencia. ¿Puedo simplemente bajarlo, manteniendo todas las tarjetas marcadas todo el tiempo? ¿O puedo usar una puerta OR para que cuando cualquier tarjeta conectada necesite un reloj, todas las tarjetas conectadas reciban el reloj de referencia?
  • ¿Cuál es la función de las líneas WAKE# y PERST#?
  • ¿Hay más señales PCIe que no sean los pares TX/RX, REFCLK, WAKE, PERST, CLKREQ?
  • ¿Existe una secuencia de encendido específica para PCI Express?
  • ¿El host detectará y enumerará todos los dispositivos por separado, o necesita soporte especial de BIOS o firmware UEFI para esto?
  • ¿Hay algo más que deba tener en cuenta?

Considero esto más como una experiencia de aprendizaje que como una solución para mi necesidad, por lo que agradezco cualquier ayuda que pueda obtener. ¡Gracias!

Ese bus no está diseñado para operar de esa manera, incluso si puede conectarlos juntos sin explotar, el software probablemente fallará. Esa ranura m.2 debe ser propiedad de un solo dispositivo.
Necesita un puente PCI-e para dividir los carriles por usted. Probablemente algo así como lo que sea que haya debajo del disipador térmico en este dispositivo.
@brhans Eso parece un multiplexor simple, en cambio, quiero dividir los 4 carriles para diferentes dispositivos y poder usar el ancho de banda completo para los 4 carriles.
PCIe es extremadamente avanzado. No te metas con eso si necesitas preguntar algo como si puedes cambiarlo o no. Necesita trabajar hasta llegar a algo como PCIe.
@DKNguyen He visto elevadores PCIe de tamaño completo que dividen una ranura 16x en dos ranuras 8x con circuitos mínimos (un búfer de reloj y algunos componentes adicionales) y me pregunto por qué eso no sería posible con M.2 M clave que es básicamente solo un puerto PCIe x4. Ya que debo trabajar para lograrlo, y lo veo como una experiencia de aprendizaje; ¿Hay algún recurso al que pueda referirme?
Con algo como PCIe, la forma en que se enruta y construye el seguimiento también es importante. Eso es como mirar una antena y pensar que es fácil porque es solo un trozo de metal. Son las cosas que están ahí pero que no notas porque están integradas y sin problemas, lo que termina atrapándote. Ese diseño de PCB y las cosas de la línea de transmisión.
@DKNguyen Gracias por las respuestas. Estoy ansioso por aprender más, ¿por dónde debo empezar?
Cosas de la línea de transmisión y diseño de pcb de alta velocidad.
@özg los convertidores x16 a dual x8 que mencionas son un escenario completamente diferente. Usan algo llamado Slot Bifurcation para permitir que los carriles de un solo slot se dividan en dos dispositivos. Esto depende de que todos los carriles regresen al complejo raíz del procesador y soporte especial de CPU y BIOS: la bifurcación solo funciona si la CPU tiene un puerto raíz capaz de conectarse como una sola ranura x16 o x8/x8 o x8/x4 Modos /x4. Esto no es algo que no esté disponible para las ranuras M.2, por lo que necesitaría un conmutador PCIe activo, cuyas hojas de datos generalmente están bajo NDA.

Respuestas (1)

Más allá de la capa física, tiene sistemas kernel de muy bajo nivel en el nivel de la CPU para los que necesitaría escribir un controlador complejo, tal vez incluso reescribir el BIOS.

El bus I2C se usa para algunos sistemas específicos de bajo nivel y, a menudo, no se implementa en productos de consumo, solo en placas base de gama alta.

Dado que el bus I2C es de drenaje abierto, ¿puedo unirlos todos? (Lo mismo con SMBus)

No, esto podría desactivar algunos de los chips de la placa base, ya que la línea se puede compartir para otros fines (como controles de suministro de energía, etc.).

¿Cuál es la función de las líneas WAKE# y PERST#?

Wake es para despertar la computadora desde el hardware.

¿El host detectará y enumerará todos los dispositivos por separado, o necesita soporte especial de BIOS o firmware UEFI para esto?

Lo hace, pero no necesariamente sabe cómo comunicarse con ellos, por lo que se requiere el controlador.

¿Hay algo más que deba tener en cuenta?

La velocidad del bus dificulta el trabajo con una MCU y, por lo general, se requieren FPGA/chip personalizado costoso. También hay mucha IP y no hay mucha información disponible.