MicroLogger [MC9S08SH32 y MMC/SD Card].
Autor: Ricardo Malerba
rmalerba@gmail.com
El MicroLogger es una solución hardware/firmware de muy bajo costo que permite almacenar datos seriales a una tarjeta del tipo MMC/SD y poder analizarlos en una PC.
Para que sirve ?
Casi todos sabemos que nuestros equipos no siempre se comportan de manera similar en las pruebas de laboratorio que en el campo. Esto pueder ser debido a un monton de factores, por ejemplo EMI / EMC / RFI y otras interferencias, también seguramente muchos de nosotros usamos de los servicios de la función printf para poder monitorear valores, pasadas, etc de nuestro firmware, normalmente dumpeando estos datos a una PC via uno de los puertos serie disponibles. El problema es que cuando el equipo esta en campo y las fallas se producen esporadicamente no siempre es posible tener una PC conectada todo el tiempo para verificar que esta ocurriendo.
La idea de MicroLogger es justamente tener una solución económica, robusta y principalmente de reducidas dimensiones para que de esta manera pueda ser conectado sin mayores contratiempos y tan simple como registrarse en partypoker.com español y asi poder capturar los datos seriales como relevamiento para lo que pretendamos analizar.
Características
- Amplio rango de alimentación, soportando tensiones de 3.3v o 4 a 5v seleccionables con jumper.
- Amplio rango de baud rates soportados 1200/2400/4800/9600/19200/38400/57600/115200
- Soporta tarjetas tipo MMC y SD 1.X
- FAT12 y FAT16 como sistemas de archivos
- Nombre de archivos en formato 8.3
- Customizable atravez de un archivo de configuración.
- Código separado en layers y escrito en ANSI C permitiendo de esta manera migrarlo facilmente a otras plataformas.
- Footprint pequeño, algo asi como 8Kbytes de ROM y 1024 Kbytes de RAM
Una cosa para mi importante es detallar lo que no soporta...
Que cosa no soporta MicroLogger ?
- No soporta tarjetas SD 2.X, ni TransFlash o comunmente llamadas MicroSD
- FAT32
- Nombre de archivos largos
- Folders
- El soporte al file system es solo un subset de lo que seria un file system completo, esto es debido a la construcción minimalista de la solución.
Aclaración
MicroLogger no es una idea nueva ni inovadora, ya que existen equipos comerciales y muchos proyectos que cumplen dichas caracteristicas, tambien existen compiladores que resuelven el acceso a FAT, la idea de hacerlo fue el desafio propiamente de hacerlo y aprender más sobre tarjetas y sistemas FAT.

El circuito esta basado en el microcontrolador FreeScale MC9S08SH32 que entre sus principales caracteristicas tiene:
- Core HCS08
- 32Kbytes de Flash
- 1024 bytes de RAM
- SCI integrada
- SPI integrada
- IIC integrada
- 28-TSSOP, 28-SOIC, 20-TSSOP, 16-TSSOP
Como verán el conexiado es muy sencillo, la interfaz con la tarjeta se hace por medio del puerto SPI, toda la lógica se alimenta con 3.3v provisto por el regulador LM2937 que es Low dropout. Por intermedio del jumper J3 en la posición 1-2 selecciono la alimentación del circuito en el rango de 4v a 5v y en la posición 2-3 selecciono que todo el circuito es alimentado por una fuente de 3.3v salteandose de este modo el regulador.
El conector J2 es la interfaz para el BDM, por último el 74LVC1G08 es una compuerta única que tiene la caracteristica de tener las entradas 5v full tolerant.
La idea de usar este micro es el bajo costo, y la posibilidad de usar el programador/debugger que me sirve para toda la familia HCS08.
Agradecimientos
- En primer lugar a Marcos, por diseñar el impreso,
montarlo y proveerme de ciertos componentes. - A Texas Instrument por mandarme samples de la compuerta sin costo alguno
- A FreeScale por mandarme samples del micro y solo cobrarme el envio
- A Seba por regalarme una tarjeta MMC
- Donde dice +5V deberia decir Vin
- El IC3 es en realidad el MC9S08SH32

El firmware fue desarrollado con el compilador C provisto por FreeScale [CodeWarrior 6.1] que permite generar hasta 32Kbytes en forma gratuita. El CodeWarrior posee una herramienta visual llamada Process Expert que permite generar código para el acceso a casi todos los perifericos del micro. Normalmente cuando arranco un proyecto nuevo genero dos versiones, una digamos usando el Process Expert que me asiste en las cosas donde hago agua que es el manejo de clocks, baud rates, etc, una vez generado el còdigo por esta herramienta copio o traduzco las lineas que me interesan al otro proyecto que suelo llamar Stand Alone, una vez que el seteo de todos los perifericos es hecho no uso más el expert.
Si bien el process expert es una herramienta poderosa y el código generado es de muy buena calidad desisto de usar esto por las siguientes razones:
- Genera un archivo por cada recurso de hardware, algo que me parece inecesario ya que uno llega rapidamente al limite de archivos que puede manejar la tool en forma gratuita
- Las alocaciones a memoria son normalmente estaticas al módulo, yo normalmente analizo el uso de la memoria y utilizo unions para hacer un uso más eficiente de la misma, sobretodo en micros donde el recurso de RAM es escaso.
Descripción de los módulos
Micrologger.c
Este es el archivo de más alto nivel, en el mismo de inicia todo el hardware, se monta el medio ( MMC/SD Card ), se lee el archivo de configuracion y se abre la UART con la velocidad obtenida del mismo, después queda en loop infinito esperando caracteres por el serie y escribiendolo a la tarjeta a medida que van llegando. La otra funcion es la que maneja los errores criticos, todas las funciones del módulo que es propiamente el file system devuelen un enumerado como retorno, si se trata
de un critical error se hace parpadear al LED tantas veces como indique su valor, de esta manera se puede monitorear cual fue el error.
Misc.c/Misc.h
En este módulo se implementan algunas funciones de manejo que no son nativas del compilador, tambien las funciones que toman los parámetros del archivo de configuración que tiene una similitud a los arhivos INI de Windows.
FS.c/FS.h
Este el archivo donde se maneja todo el acceso a la FAT, como comente antes, es solo un subset de un file system completo, tambien realize algunas restricciones como limitar el tamaño máximo de 512 para las operaciones de escritura y lectura que con ello me facilitaron el trabajo de la implementación de la misma. Por último el módulo es endian independiente.
Card.c/Card.h
Este módulo es el que interfacea directamente con la memoria.
MCU.c/MCU.h
Este es el único módulo que es hardware dependiente, es un mix entre C y assembler y seria el único que deberia implementar si migro MicroLogger a otra plataforma.
Los archivos del proyecto completo en CodeWarrior para el que lo necesite, pueden bajarlos de Aqui -- Autor: Ricardo Malerba rmalerba@gmail.com





