¿STM32 USB OTG es compatible con todas las memorias flash USB 2.0?

0

Estoy utilizando las bibliotecas estándar STM32F105 USB OTG para manejar flash USB en modo de almacenamiento masivo. Funciona bien con algunos modelos de memorias USB pero no con todos los modelos. En los documentos de ST está escrito "Cumple con el suplemento On-The-Go de la especificación USB 2.0 (Revisión 1.0a)".

Tengo problemas con la mayoría de las memorias flash USB 2.0 que compré recientemente. ¿Se trata de "Revisión 1.0a"? y ¿hay alguna forma de modificar la biblioteca para admitir los modelos más recientes?

    
pregunta electro

1 respuesta

3

El almacenamiento masivo es un poco complicado. En términos de la pila de software, hay realmente tres capas que conectan su fopen / fclose a los bits en la propia unidad flash:

1) El controlador de host USB. Esto gestiona las comunicaciones de bajo nivel en el bus. La biblioteca STM32F es totalmente compatible con todos los requisitos del estándar USB en este sentido, por lo que teóricamente puedes conectarte a cualquier dispositivo compatible con USB 2.0.

2) El controlador del dispositivo de almacenamiento masivo. El estándar USB define los protocolos para algunas clases de dispositivos de nivel superior que se usan comúnmente (cosas como audio, teclados, almacenamiento masivo) y el almacenamiento masivo es uno de ellos. Sin embargo, la clase de dispositivos de almacenamiento masivo es bastante amplia, y abarca más de 40 años de diferentes estándares y protocolos para comunicarse con los medios de almacenamiento. La biblioteca STM32F solo implementa un conjunto de comandos SCSI en particular, pero se usa en casi todas las unidades flash que he encontrado, por lo que dudo que este sea el problema.

3) El controlador del sistema de archivos. El controlador de almacenamiento masivo realmente solo expone bloques de memoria en bruto que se pueden leer y escribir. Una computadora puede poner lo que quiera en estos bloques de datos. Sin embargo, para poder utilizar la unidad flash entre diferentes sistemas, debe estar estructurada con un sistema de archivos particular. La biblioteca STM32F usa la biblioteca de software FatFS para implementar un sistema de archivos FAT32 ligero. Esto se encuentra en la parte superior de la pila de software y expone la API de fopen / fclose, etc., que luego se usa para leer desde la unidad.

Entonces, si la memoria flash no funciona, entonces el problema probablemente se encuentre en la capa 2 o en la 3. Creo que sería en la capa 3 y que las unidades no están formateadas con FAT32. Desafortunadamente, FAT32 se está volviendo bastante viejo ahora, y solo puede manejar unidades de hasta 32 GB, y como muchas de las nuevas unidades flash son mucho más grandes, están formateadas con otra cosa.

Leer los sistemas de archivos más nuevos es un verdadero problema, ya que Microsoft los mantiene patentados, lo que significa que no hay mucho soporte de código abierto, pero debería poder formatear sus unidades con FAT32, siempre que no necesite admitir más. Límite de 32 GB.

    
respondido por el Jon

Lea otras preguntas en las etiquetas