Búfer circular persistente con CC3220SF

0

Me gustaría compartir con ustedes algunos pensamientos sobre un proyecto para ver si hay mejores soluciones que las mías ...

Estoy diseñando una placa basada en CC3220SF, que requiere un flash externo (16 Mbits) donde almacena los archivos del sistema y del usuario.

Mi aplicación DEBE tener un búfer circular persistente de 512/1024 kbytes. Esto se debe a que la placa adquiere algunos sensores periódicamente y los envía a la nube. Pero si la conexión no está disponible, DEBE guardar los datos para su posterior carga.

Algunas ideas:

  • use la RAM interna: reduciendo un poco los requisitos sobre el tamaño del búfer, el espacio es suficiente pero parece que no es confiable en todos los reinicios (tenga en cuenta que mi sistema funciona con baterías: si la batería se agota, es aceptable perder el últimos registros - si los hay)
  • use el flash externo: hay un montón de espacio, pero parece que no es posible "sobrescribir" un archivo cambiando solo los bytes involucrados: cualquier operación de escritura lleva a una reescritura completa de todo el archivo. Esto limita la vida útil esperada de unos 100.000 registros. De ninguna manera.
  • agregue un S / F / D / NV-RAM externo: después de algunas búsquedas, encontré que las DRAM son muy baratas pero requieren un bus paralelo. Los otros tipos son bastante caros para esa capacidad.
  • ok, la última idea que se me ocurre es agregar una segunda memoria flash. Ahora puedo escribir en él directamente (sin ningún sistema de archivos) pero tengo que seleccionar uno que no requiera una escritura de página completa.

Alguna otra información:

  • la vida útil esperada de la batería debería permitir adquirir más de 130,000 registros
  • por supuesto, después de reemplazar la batería, la placa debe seguir funcionando ...
  • debido al entorno esperado, es muy probable que la junta adquiera cientos de registros todos los días SIN una conexión disponible. Luego los cargará de inmediato durante la noche.

Cualquier sugerencia sería apreciada.

    
pregunta Mark

1 respuesta

1

Un flash NOR serie externo típico permitiría que se escribieran bytes individuales, pero se deben borrar en fragmentos 4K. Si todo lo que necesita es un único búfer rodante, un enfoque simple usaría un byte de estado de página en cada página para realizar un seguimiento de dónde deben ir los datos. En un momento dado, habría tres páginas "especiales":

  1. La página actual, en la que se escribirían los nuevos datos.
  2. La página de basura, que sería la siguiente (o la primera página si la actual es la última), que puede contener cualquier cosa, pero cuyo contenido debe presumirse sin sentido y, por lo tanto, ignorarse.
  3. La página etiquetada, que sería la que está después de eso (se ajusta como anteriormente), y será la única página (que no sea la página de elementos no utilizados, que podría contener cualquier cosa) donde esté programado el byte de estado de la página.

Si hay espacio en la página actual para agregar datos, agregue allí. De lo contrario, borre la página de basura y programe el byte de modo de página en la página que sigue a la página etiquetada, convirtiendo esa página en la página etiquetada, la página etiquetada anterior en la página de basura y la página de basura anterior en la página actual.

La página etiquetada puede identificarse porque será la única página cuyo byte de etiqueta está programado, pero cuyo byte de etiqueta del sucesor no lo es. Tenga en cuenta que el byte de etiqueta en la página de basura puede leerse como programado, pero también se programará el byte de etiqueta de su sucesor.

    
respondido por el supercat

Lea otras preguntas en las etiquetas