STM32 F4 GPIO clock rate

0

Estoy mirando la placa de descubrimiento de la serie STM32 F4. Tengo el tablero de evaluación en mi escritorio actualmente. Quiero usar este sistema para enviar datos desde USB a un bus de datos paralelo de 3 bytes utilizando una fuente de reloj externa. Estoy usando el chip STM32407. Necesito ingresar datos desde una PC a través del bus USB. Mi lista de deseos es para que el chip maneje una frecuencia de reloj externa de 2 MHz y cargue los GPIO de 3 bytes en cada ciclo de reloj.  Eso sería 2MHz x 24bits = 48 Mbits / s o 6 MBytes / s si mis cálculos son correctos. La salida del STM32 GPIO debería ser suave ya que el USB estaría en paquetes. ¿Es posible el 2 MHz? ¿Puedo ir más rápido? Muchas gracias.

    
pregunta Doug

1 respuesta

1

6 MBytes / s a través de USB 12Mbit USB a velocidad completa es imposible. Por lo tanto, no es posible un reloj externo de 2MHz a través de esa interfaz.

Un objetivo más factible a través de esa interfaz podría ser de aproximadamente 0.5MB / s a través de USB. La carga de un GPIO de 3 bytes sería aproximadamente 0.5 / 3, o 167 kHz.

El STM32F4 La placa de descubrimiento (número de pieza STM32F4DISCOVERY) no tiene la interfaz USB de alta velocidad, 480 Mbit, implementada, por lo que deberá construirla (I recuerda vagamente algo acerca de una placa hija con algunas interfaces más periféricas, podría estar equivocado).

Tendrá que revisar el código de la biblioteca para manejar ese periférico. Funciona a 168MHz, que es de 28 ciclos / byte. Las instrucciones de carga y almacenamiento de ARM son de 2 ciclos, por lo que 28 ciclos no son muchas instrucciones. Peor aún, los puertos GPIO tienen solo 16 bits de ancho, por lo que será un par de escrituras para configurar los 24 bits. Dependiendo del bus de 24 bits, puede que necesite un apretón de manos también. Cada una de esas escrituras es de 2 ciclos. IIRC DMA se ejecuta a aproximadamente 1/4 de la frecuencia de la CPU (tendría que esforzarme mucho para encontrar eso).

Solo tiene 192kB de RAM, por lo que digamos 180kB para búferes. Eso es solo el 3% de su tasa de datos, es decir, 33 milisegundos, lo que no es muy 'lujoso'.

Supongo que podría ser factible, pero es probable que sea un código difícil de escribir y pulir.

Tendría que hacer algunas pruebas para tener una mejor idea de lo que es razonable.

Podría probar algo como un BeagleBone Black, es decir, aproximadamente 4-5 veces más CPU. También tiene dos CPUs RISC en SoC, que podrían descargar la E / S de bajo nivel y muchos pines de E / S. Incluso podría tener puertos de 32 bits de ancho (tal vez alguien más pueda comentar).

PS:
Escribí y pulí el código para alternar un pin en STM32F103, que funcionaba en un reloj de CPU de 72MHz. IIRC obtuvo 12MHz haciendo sin procesamiento en absoluto. Por lo tanto, parece imposible 2MHz, con dos escrituras de puertos de E / S, con procesamiento USB, pero un poco más de 2 veces más rápido (lo que sufrirá los estados de espera de la memoria del programa).

    
respondido por el gbulmer

Lea otras preguntas en las etiquetas