Sincronización de puertos SPI para una mayor velocidad de datos

0

Estoy diseñando una nueva placa que utiliza el NXP LPC4330 (microcontrolador Cortex M4) con una placa de desarrollo XESS Xula2 FPGA. En este diseño, el Xula 2 tiene pines de E / S limitados ya que está diseñado para ajustarse a un factor de forma DIP-40. La principal forma de comunicación entre el micro y el FPGA es a través de SPI.

Me gustaría que el bus fuera bastante rápido, del orden de 80 a 100 Mbps. Puede ser suficiente para ejecutar un solo puerto SPI a 80 MHz, pero como el reloj principal en el FPGA solo se ejecuta a 120 MHz (y controla la interfaz SPI), no estoy seguro de que el SPI funcione en tal alta velocidad de datos. El LPC4330 tiene varios puertos SPI, y una idea que tengo es utilizar 2 puertos SPI para que cada uno pueda ejecutarse a una velocidad de bits más lenta. Hay mucho espacio en el FPGA Spartan 6, pero no tengo los pines de E / S en la placa de desarrollo para tener 2 juegos de los 3 de MOSI / MISO / SCK (más un solo CS).

Por lo tanto, me pregunto si es posible sincronizar los puertos en el LPC para que compartan un reloj SPI. La comunicación rápida solo tiene que suceder en una sola dirección, por lo que solo necesitaría duplicar el pin MISO (el micro necesita leer rápidamente desde el FPGA, no al revés). No parece haber un modo especial para sincronizar los puertos SPI, pero asumo que estarían en el mismo dominio de reloj debido a la arquitectura de sincronización del micro.

Me doy cuenta de que también hay un SPIFI multipuerto (interfaz de memoria spi-flash) en el NXP. ¿Alguien ha tenido una experiencia creando un bloque en el FPGA que básicamente emula un flash SPI?

Entonces, mis preguntas son a) ¿crees que esto funcionará? y b) ¿hay una mejor manera de hacer esto?

    
pregunta Zuofu

3 respuestas

3

Utilice SGPIO.

Contiene 16 registros de desplazamiento con 32 bits cada uno y es muy flexible en lo que puede hacer. Puede encadenar hasta 8 registros o ejecutar hasta 8 entradas o salidas en paralelo.

    
respondido por el starblue
2

Puede ser posible programar uno de los puertos SPI de su microcontrolador como maestro y uno o más puertos como esclavos. Esto probablemente requeriría cables físicos que interconecten los pines del reloj para los puertos SPI. Las implementaciones de esclavos SPI a veces tienen restricciones y comportamientos extraños de tiempo, pero es probable que un esclavo SPI maneje cualquier velocidad que el maestro SPI pueda producir si ambos dispositivos se ejecutan desde el mismo reloj de origen. Si usa DMA, asegúrese de que el esclavo SPI tenga mayor prioridad que el maestro SPI. De lo contrario, si hay suficiente contención en el bus para retrasar la escritura del esclavo, pero no la escritura maestra, el maestro podría intentar registrar los datos antes de que el esclavo esté listo para ello.

    
respondido por el supercat
2

Acabo de leer las especificaciones en el LPC4330 y parece que admite quad-SPI. Esta es una variante de SPI que utiliza reloj, selección y 4 líneas de datos bidireccionales para transferir 4 bytes por ciclo.

Esto puede ser lo que necesitas.

    
respondido por el DoxyLover

Lea otras preguntas en las etiquetas