Organización y elección de la memoria para el PFC

En el anterior artículo me anticipé eligiendo el tipo de memoria, no debería haberlo hecho, pues es un tema mas complejo de lo que esperaba. Así que he borrado la parte en la que hacía la elección y continuaré desde ahí en el artículo de hoy.

Había resuelto ya que la capacidad de memoria necesaria será de 128 MB.
La estructura para su organización consistirá en bloques virtuales de 12 bytes multiplicado por el número de nodos. Así, si tenemos 3 nodos, los bloques tendrán 36 bytes. A estos bloques los llamaré bloques de muestra, pues cada uno de ellos registra todos los datos de un mismo instante. El número de cada bloque de muestra se calcula con la división entera de la dirección de memoria entre la cantidad de nodos disponibles.
Los 12 bytes corresponden a los (16 bit x 3 registros del giroscopio) + (16 bit x 3 registros del acelerómetro), a estos los llamaré bloques de nodo.
No hará falta guardar ningún identificador sobre a cual nodo pertenecen los datos, ya que estos se corresponderán usando aritmética modular; de esta manera el servidor recibirá el identificador del nodo y calculará el resto de la dirección de memoria entre el identificador; esto situará el bloque de nodo dentro de un bloque de muestra. El servidor se encargará de mantener un registro del último bloque de muestra donde se han escrito los datos de cada nodo.
Ilustraré un ejemplo en el que se usa una memoria con direccionamiento a nivel de 12 bytes y en la que se registran datos de 3 nodos:

Dirección de memoria Bloque de muestra
(Dir. Mem. / 3)
Bloque de nodo
(Dir. Mem. ‘MOD’ 3)
Dato
00 00 00 0xFFFFFFFFFFFFFFFFFFFFFFFF
01 00 01 0xFFFFFFFFFFFFFFFFFFFFFFFF
02 00 02 0xFFFFFFFFFFFFFFFFFFFFFFFF
03 01 00 0xFFFFFFFFFFFFFFFFFFFFFFFF
04 01 01 0xFFFFFFFFFFFFFFFFFFFFFFFF
05 01 02 0xFFFFFFFFFFFFFFFFFFFFFFFF
06 02 00 0xFFFFFFFFFFFFFFFFFFFFFFFF
07 02 01 0xFFFFFFFFFFFFFFFFFFFFFFFF
08 02 02 0xFFFFFFFFFFFFFFFFFFFFFFFF
09 03 00 0xFFFFFFFFFFFFFFFFFFFFFFFF
10 03 01 0xFFFFFFFFFFFFFFFFFFFFFFFF

La estructura que mantiene el servidor puede ser un array estático de enteros, cuya longitud será el máximo número de nodos que vaya a soportar el sistema. Ejemplo de funcionamiento (siguiendo con el sistema de 3 nodos):

ARRAY DE MANTENIMIENTO DE MUESTRAS
00 01 02 03 04 05
05 02 04 00 00 00

Si el siguiente dato que recibe el servidor es 01-0xFFFFFFFFFFFFFFFFFFFFFFFF, siendo 01 el identificador de nodo, se leerá del array de mantenimiento el contenido de la posición 01. En este caso contiene el valor 02, que se multiplica por el número de nodos con el que trabajamos y se le suma el identificador:

(02 x 3)+ 01 = 7

luego la dirección donde debemos escribir 0xFFFFFFFFFFFFFFFFFFFFFFFF es la 7.
Para llevar a cabo este método no es imprescindible disponer de direccionamiento a nivel de 12 bytes(aunque si es mas cómodo), pues los bloques de nodo se pueden agrupar también en 2×6 bytes, 3×4 bytes, 4×3 bytes, 6×2 bytes o 12x1byte.

A la hora de buscar una memoria de 128 MB he buscado entre las Serial Flash principalmente por sencillez de montaje, desgraciadamente entre las compañías consultadas para elegir una de estas memorias (Winbond, SST, Numonyx/Micron y Sanyo) la de mayor capacidad, que pertenece a Winbond, es de solo de 32 MB y aun esta bajo desarrollo; la mayor disponible es de 16 MB, a su favor tiene la velocidad (35MB/s) y resistencia (100.000 ciclos de escritura/borrado, lo cual es muy bueno comparado con otras marcas que garantizan solo 10.000).
Las opciones disponibles para continuar son:

  • Crear un banco de memoria con 8 de estas memorias.
  • Ajustar los tiempos de muestreo a los 16 MB disponibles.
  • Utilizar una tarjeta SD/MMC en modo SPI.

Para la fabricación de un prototipo las dos últimas opciones son las más apropiadas.
En el caso ajustar los tiempos se usaría la Windbond W25Q128BV escribiendo en ella usando SPI Dual, por lo que el microcontrolador necesario deberá incluir dos SPI como mínimo.
Los tiempos que se podrían registrar con esta opción son los siguientes:

Frecuencia de muestreo 1000/s 500/s 100/s 50/s 10/s
Tiempo registrado
(Con 11 nodos)
2,1 min 4,2 min 21,1 min 42,3 min 3,5 horas
Tiempo registrado
(Con 3 nodos)
7,7 min 15,5 min 1,2 horas 2,5 horas 12,94 horas

De usar una tarjeta SD/MMC no se tendría problema de almacenamiento, pero probablemente no tendría velocidad suficiente. Para solucionar esto bastaría con usar una tarjeta con una capacidad más actual, como 512 MB, lo cual implica también un incremento de velocidad de transferencia. Solucionado este problema nos encontramos con una ventaja, y es que solo se necesita un SPI para escribir en ella.

Precios:

  • W25Q128BV 16 MB: >20€
  • SD/MMC 512 MB: ~= 10€
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s