Tasa de transferencia máxima del dispositivo de almacenamiento masivo USB usando un microcontrolador

Planeo diseñar un disco flash NAND usando el microcontrolador STM32F415RGT6 (168 MHz Cortex-M4). El uso de USB3300 PHY permite que el microcontrolador se conecte en modo USB 2.0 de alta velocidad. Por lo tanto, la tasa de transferencia de la capa física no debería ser un problema. Hay dos requisitos:

  • La velocidad de transferencia del disco debe ser superior a 1 MB/s (tanto la operación de lectura como la operación de escritura).
  • Se debe realizar un algoritmo específico en los datos antes de transferirlos hacia/desde el chip NAND (alrededor de 1100 ciclos por 16 bytes = al menos 70 MHz considerando la tasa de 1 MB/s).

1) ¿Es posible lograr tal tasa de transferencia utilizando este microcontrolador? El microcontrolador admite la transferencia de datos habilitada por DMA para su conexión USB.

2) ¿Cuánta potencia de procesamiento le quedará a mi algoritmo? ¿Alguien ha medido sus ciclos de inactividad después de implementar un dispositivo de almacenamiento masivo en un microcontrolador?

Sé que es posible implementar dicha aplicación usando FPGA pero realmente me gusta evitarlo si es posible.

Esta pregunta es difícil de responder. La realidad es que, a menos que alguien aquí implemente esto, tendrás que intentarlo. 8Mbit/s no suena tan mal. Especialmente porque el microcontrolador ST tiene un controlador flash NAND que acelerará las operaciones.
Compré una placa de evaluación STM32F4DISCOVERY para estimar la cantidad de ciclos necesarios para implementar el protocolo del dispositivo de almacenamiento masivo y transferir los datos entre la PC y la memoria flash NAND. Pero como usted mismo mencionó, esperaba que alguien que haya implementado dicha aplicación en un microcontrolador pudiera proporcionar algunas estadísticas. Incluso si su microcontrolador fuera completamente diferente (como AVR), sería muy útil.

Respuestas (1)

Acabo de implementar una conexión usb FS en un STM32F3 (72Mhz). No sé por la tasa de HS, pero sobre la cantidad de ciclos utilizados por USB, diría que no tanto.

Usé un algoritmo FSK que procesaba datos todo el tiempo y tomaba alrededor del 75% de los ciclos de la CPU, pero la conexión USB (VCP 115kbps) estaba bien y no perturbaba el algoritmo, sin DMA.

Si tiene la respuesta para la tarifa a velocidad HS, publíquela, ¡me podría interesar!

Seb.

Gracias por la info. Suponiendo que la transferencia de datos en su diseño impone una sobrecarga de 10 MHz, en el peor de los casos necesitaría menos de 100 MHz de potencia de procesamiento para 1 MB/s (teniendo en cuenta que voy a utilizar una transferencia basada en DMA, la sobrecarga debería ser mucho menor). Publicaré estadísticas de mi propio diseño tan pronto como pueda.
Dado que esto difiere de la necesidad por un factor de aproximadamente 69, no estoy seguro de que demuestre mucho. Pero luego, VCP está limitado a un tamaño de paquete muy pequeño, por lo que se podría ganar algo de eficiencia al deshacerse de eso.
En el diseño final, pude lograr +7 MB/s durante las operaciones de lectura usando un búfer de 32 KB. Creo que son posibles tasas de transferencia más altas usando una memoria más rápida porque la pila USB no es el cuello de botella.