Soluciones para implementar un dispositivo de almacenamiento masivo USB

3

Estoy tratando de encontrar una manera conveniente con la que una PC pueda configurar un sistema integrado. La PC tendrá una aplicación personalizada. escrito que puede 'hablar' a la unidad de usuario incorporada y configurar las distintas configuraciones y cargarle algunos datos (~ 500 KB). La ventaja de este enfoque es su simplicidad.

Mi pensamiento inicial fue ir con un puente UART a USB y tomarlo desde allí. Sin embargo, ahora estoy considerando implementar un dispositivo de almacenamiento masivo USB en su lugar. La ventaja es que el usuario final puede simplemente arrastrar y soltar un archivo que contiene los datos y los ajustes de configuración. El tablero tendrá un IC de memoria flash de tamaño apropiado montado en él. El uC será un STM32 de gama baja (aún no me he decidido por un chip específico).

Dado que el archivo tendrá que estar en un formato específico para el sistema integrado, creo que todavía tendré que escribir una aplicación personalizada. para que la PC escriba ese archivo desde la configuración provista por el usuario final. Esto no es demasiado difícil.

Pero estoy confundido acerca de cómo montar la memoria flash como un disco FAT en la PC. ¿Hay soluciones integradas, tal vez una memoria flash que se comunica directamente con USB?

NOTA: sé sobre LUFA para el AVR. Sin embargo, aún no estoy seguro de poder usar un AVR, ya que también tengo que conducir una pantalla de 800x400 RGB. Como prueba, manejé la pantalla usando un AVR que funcionaba a 8 MHz. La tasa de actualización fue más lenta de lo que me gustaría.

    
pregunta Saad

3 respuestas

3

Busque forebrain ejemplos de códigos, utilizan el chip NXP LPC1343 que tiene almacenamiento masivo USB controladores en ROM (para que pueda programar el chip mediante arrastrar y soltar). Forebrain tiene un ejemplo en el que utilizan un controlador de ROM interno para presentar un chip EEPROM o simplemente una pieza de RAM como dispositivo de almacenamiento masivo. Son de código cerrado, pero esto da la idea de cómo podría implementarse.

En general, tiene que implementar enlaces de controladores de almacenamiento masivo USB específicos.

No es necesario crear un archivo de configuración en ningún formato especial, ya que podría implementar el sistema FAT en su chip para que acceda a la memoria flash como sistema de archivos FAT. Puede buscar cualquier ejemplo de lectura / escritura de tarjetas SD para los microcontroladores populares: algunos usan bajo nivel, otros implementan FAT. En particular, este para LPC1343 implementa la tarjeta FAT sobre SD: enlace

Por cierto, ¿ha considerado una opción para poner la configuración en un archivo en la tarjeta SD? Tendría muchos códigos listos para usar y ejemplos para una amplia gama de MCU para eso. El proceso de configuración implicaría extraer la tarjeta SD del dispositivo y ponerla en la computadora, sin embargo.

    
respondido por el miceuz
2

Siempre que tenga que tener una aplicación personalizada ejecutándose en la PC, no hay razón para que no pueda implementar un paradigma de interfaz de usuario de arrastrar y soltar mientras aún usa la interfaz USB / UART para comunicarse con el dispositivo. Si hay archivos preconfigurados (o archivos previamente configurados por el usuario) para el dispositivo, el usuario solo puede arrastrar uno de ellos y soltarlo en su aplicación, momento en el cual, la aplicación lee el archivo y envía los datos a la dispositivo a través de cualquier interfaz propietaria que se te ocurra.

Implementar una interfaz de almacenamiento masivo USB solo para que puedas obtener una IU de arrastrar y soltar "por defecto" parece ser la forma incorrecta de abordar esto.

    
respondido por el Dave Tweed
2

Yo diría que vaya para el enfoque de almacenamiento masivo USB. El beneficio aquí es doble.

1.) Puede hacer que el campo de personas actualice el dispositivo, sin el programa de configuración, simplemente conectándolo a una computadora. Puede enviar actualizaciones personalizadas a las personas sin tener que implementar las funciones en el software, probar el software, etc.

2.) Puede hacer que su software de configuración elimine y vuelva a cargar el archivo de configuración mediante programación como si el dispositivo fuera un disco local. Esto significa que no tiene que implementar un protocolo de nivel de bloque en la parte superior de su línea UART. Eso te ahorra tiempo.

He estado investigando el mismo tipo de enfoque para las actualizaciones de firmware en el campo, y aquí es cómo funciona la mayoría de los cargadores de arranque USB:

  • instale el cargador de arranque USB en los 64KB superiores de flash
  • la parte inferior de 448kb (en mi caso, 512kb flash) se asigna para el almacenamiento
  • al reiniciar, si un cierto GPIO se mantiene alto durante 2 segundos, entra en el modo de programación
  • modo de programación = enumerar como dispositivo de almacenamiento masivo USB
  • arrastre y suelte su archivo binario de firmware
  • una vez transferido, restablecer
  • se carga el nuevo firmware

No he investigado hasta aquí, pero: puedo imaginar un gestor de arranque cuando, dependiendo del nombre del archivo que se agrega, entra en flash o EEPROM. Luego, podría arrastrar y soltar no solo el firmware para permitir la actualización de campos y también permitir que los archivos de configuración se arrastren y se suelten directamente a la EEPROM, básicamente.

Sólo un poco de alimento para el pensamiento. :)

    
respondido por el Toby Lawrence

Lea otras preguntas en las etiquetas