Autor Tema: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]  (Leído 19735 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
« en: 17 de Octubre de 2008, 14:12:02 »
Hola, en una serie de post que ire subiendo, queria compartir con todos una solución hardware/firmware de muy bajo costo que permite loggear 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 asi poder capturar los datos seriales como relevamiento para lo que pretendamos analizar.

Caracteristicas
  • 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.

Quedando presentado MicroLogger, en el próximo post subo el esquemático y detallo un poco como funciona.

Aclaración
MicroLogger no es una idea nueva ni inovadora, ya que existen equipos comerciales y un monton de 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.


Saludos !
« Última modificación: 25 de Octubre de 2008, 11:27:46 por RICHI777 »

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 2 ]
« Respuesta #1 en: 17 de Octubre de 2008, 14:13:13 »
Hola, en este nuevo post voy a adjuntar el esquematico:


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 veran 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


Correcciones al esquemático
  • Donde dice +5V deberia decir Vin
  • El IC3 es en realidad el MC9S08SH32



Como a veces el sitio donde estan las imagenes se cae, adjunto el esquemático.


Aca les dejo algunas fotos...










En los proximos posts subire el firmware y una breve descripción del mismo.
Saludos !

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 3 ]
« Respuesta #2 en: 17 de Octubre de 2008, 14:16:05 »
Hola en este post voy a subir el firmware. El mismo 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.

El archivo que adjunto es el proyecto completo en CodeWarrior para el que lo necesite, en otro post voy a explicar las cosas a tener en cuenta para migrar a otra plataforma y tambien solo los archivos C y H.

Saludos !

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 4 ]
« Respuesta #3 en: 17 de Octubre de 2008, 14:17:02 »
Hola, en este post detallaré las cosas que hay que tener en cuenta para migrar MicroLogger a otra plataforma.

Microcontrolador
  • Al menos 8 Kbyes de Flash
  • Al menos 1024 bytes de RAM
  • SCI integrada
  • SPI integrada

Compilador
  • La alineación de las estructuras debe ser fijada en 1 byte.
  • El tamaño del enumerado debe ser ajustado al contexto.
  • El char default tiene que ser unsigned

Normalmente en un compilador decente estas opciones son configurables.

Endian

Si vamos a trabajar en little endian necesitamos editar el archivo types.h y undefear o comentar el sgte define:

/* Undef for little endian selection */
#define BIG_ENDIAN


Código: C
  1. /*==================================================================================================================================
  2. ** Types.h
  3. **==================================================================================================================================
  4. ** Data type and inlines
  5. **==================================================================================================================================
  6. ** Date             Author                  Comment
  7. ** 11-06-2008       Diogenes                Initial Version
  8. **================================================================================================================================*/
  9. #ifndef __TYPES_H
  10. #define __TYPES_H
  11.  
  12. /* Undef for little endian selection */
  13. #define BIG_ENDIAN
  14.  
  15. /* No include in CodeWarrior compiler */
  16. #ifndef __HIWARE__
  17.   /* Types definition */
  18.   typedef unsigned char byte;
  19.   typedef unsigned short int word;
  20.   typedef unsigned long dword;
  21. #else
  22.   /* Types definition */
  23.   typedef unsigned char byte;
  24.   typedef unsigned int word;
  25.   typedef unsigned long dword;
  26. #endif
  27.  
  28.  
  29. typedef unsigned char bool;
  30.  
  31. #ifndef FALSE
  32.   #define  FALSE  0                    /* Boolean value FALSE. FALSE is defined always as a zero value. */
  33. #endif
  34. #ifndef TRUE
  35.   #define  TRUE   1                    /* Boolean value TRUE. TRUE is defined always as a non zero value. */
  36. #endif
  37.  
  38.  
  39. #ifdef BIG_ENDIAN
  40. /* Esay convertion dword-word-byte */
  41. typedef struct
  42. {
  43.   word hw;    
  44.   word lw;
  45. } tW;
  46.  
  47. typedef struct
  48. {
  49.   byte bhh;    
  50.   byte bhl;    
  51.   byte blh;    
  52.   byte bll;    
  53. } tB;
  54.  
  55. typedef struct
  56. {
  57.   byte bh;    
  58.   byte bl;    
  59. } tBw;
  60.  
  61. #else
  62. typedef struct
  63. {
  64.   word lw;    
  65.   word hw;
  66. } tW;
  67.  
  68. typedef struct
  69. {
  70.   byte bll;    
  71.   byte blh;    
  72.   byte bhl;    
  73.   byte bhh;    
  74. } tB;
  75.  
  76. typedef struct
  77. {
  78.   byte bl;    
  79.   byte bh;    
  80. } tBw;
  81.  
  82. #endif
  83.  
  84. typedef union
  85. {
  86.   dword dw;     /* Dword access ( 32 bits ) */
  87.   tW w;         /* Word access ( 16 bits )  */
  88.   tB b;         /* Byte access ( 8 bits )   */
  89. } tDWBNumber;
  90.  
  91. typedef union
  92. {
  93.   word w;       /* Word access ( 16 bits )  */
  94.   tBw b;        /* Byte access ( 8 bits )   */
  95. } tWBNumber;
  96.  
  97. /* Get High byte of the an word */
  98. #define HI( Data )                                                \
  99.            (( byte ) (((( word ) Data ) >> 8 ) & 0xFF ))          \
  100.  
  101. /* Get Low byte of an word */
  102. #define LO( Data )                                                \
  103.            (( byte ) ((( word )( Data )) & 0xFF ))                \
  104.  
  105. #define MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )
  106.  
  107. #define MIN( x, y ) ( ((x) < (y)) ? (x) : (y) )
  108.  
  109.  
  110. #endif


Implementación hardware dependiente
Deberán ser implementadas o por lo menos declaradas todas las funciones definidas en el archivo MCU.H, si no disponemos de alguna funcionalidad, digamos como por ejemplo el LED la función debe ser igual declarada pero su cuerpo puede estar vacio.

Pego el archivo mcu.h para tener como referencia, el mismo nombre de la función nos indica que hace la función asi que no me voy a explayar sobre tema, si alguien tiene alguna duda solo postee.

Código: C
  1. /*==================================================================================================================================
  2. ** mcu.h
  3. **==================================================================================================================================
  4. ** Microntroler hardware dependents export functions
  5. **==================================================================================================================================
  6. ** Date             Author                  Comment
  7. ** 28-08-2008       Diogenes                Initial Version
  8. **================================================================================================================================*/
  9. #ifndef __MCU_H
  10. #define __MCU_H
  11.  
  12. /* Include Area */
  13. #include "types.h"
  14.  
  15. /* Types Area */
  16.  
  17. /* Supporteds SCI baud rates */
  18. typedef enum
  19. {
  20.   baud_1200,
  21.   baud_2400,
  22.   baud_4800,
  23.   baud_9600,
  24.   baud_19200,
  25.   baud_38400,
  26.   baud_57600,
  27.   baud_115200
  28. }tBaudRate;
  29.  
  30.  
  31. /* SPI transfer rate */
  32. typedef enum
  33. {
  34.   SPI_SlowClock,       /* 300 KHz Standart mode */
  35.   SPI_FastClock        /* 5 MHz Fast clock mode */
  36. }tSPIClock;
  37.  
  38. /* Timer events */
  39. typedef struct
  40. {
  41.   dword Start;
  42.   dword Expiration;
  43. }tTimerTime;
  44.  
  45. /* Led manage */
  46. typedef enum
  47. {
  48.   led_on,
  49.   led_off,
  50.   led_blink
  51. }tLedType;
  52.  
  53. /* Init the MCU */
  54. void MCU_Init( void );
  55.  
  56. /* Reset watch dog */                            
  57. void WatchDog_Clear( void );
  58.  
  59. /* Software delay per miliseconds units */
  60. void Delay( word MiliSeconds );
  61.  
  62. /* Manage the Led */
  63. void SetLed( tLedType LedType );
  64.  
  65. /* Open SCI */
  66. void SCI_Open( tBaudRate BaudRate );
  67.  
  68. /* Get chars in SCI input buffer */
  69. byte SCI_GetAvailablesChars( void );
  70.  
  71. /* SCI Receive block */
  72. void SCI_ReceiveBlock( byte *Ptr, byte Size, byte *Received );
  73.  
  74. /* SCI clear receive buffer */
  75. void SCI_ClearRxBuf( void );
  76.  
  77. /* SPI init */
  78. void SPI_Init( tSPIClock SPIClock );
  79.  
  80. /* Change SPI Clock */
  81. void SPI_ChangeClock( tSPIClock SPIClock );
  82.  
  83. /* Send a byte to SPI */
  84. void SPI_SendByte( byte Data );
  85.  
  86. /* Receive a byte from SPI */
  87. byte SPI_ReceiveByte( void );
  88.  
  89. /* SS to low state */
  90. void SPI_CSAssert( void );
  91.  
  92. /* SS to high state */
  93. void SPI_CSDeassert( void );
  94.  
  95. /* Set time out timer event */
  96. void SetTimerEvent( tTimerTime *Event, dword MiliSeconds );
  97.  
  98. /* Check if timer event has expired */
  99. bool TimerHasExpired( tTimerTime *Event );
  100.  
  101. #endif


Adjunto ademas solo los fuentes C y H.

Aclaración
Desde hace años y por imposición mis comentarios son en ingles, pero desde ya sepan disculpar porque mi ingles es pésimo pésimo !!!


Saludos !
« Última modificación: 18 de Octubre de 2008, 17:51:54 por RICHI777 »

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 5 ]
« Respuesta #4 en: 17 de Octubre de 2008, 14:19:11 »
Una cosa más que me olvide de comentar es como poner en marcha MicroLogger, en el supuesto caso que alguien llegue a armar la placa  8)...
Primero hay que usar una memoria MMC/SD formateada en FAT12 o FAT16, no es necesario que este limpia o vacia, crear con el editor preferido el siguiente archivo ULOGGER.CFG con la siguiente sintaxis:

Código: [Seleccionar]
;Supported bauds 1200/2400/4800/9600/19200/38400/57600/115200
BAUD=38400

; Log file in 8.3 format
FILE=MYFILE.LOG

; Open mode [APPEND-OVERWRITE]
MODE=APPEND

Si en el momento del startup Micrologger no encuentra este archivo asume como default estos parametros, baud 9600 y ULOGGER.LOG como archivo de logeo en modo append.

Saludos !
« Última modificación: 17 de Octubre de 2008, 14:27:48 por RICHI777 »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
« Respuesta #5 en: 17 de Octubre de 2008, 14:25:13 »
Richi, sólo aparezco por aquí para expresar mi admiración por el proyecto y mi agradecimiento por publicarlo.
Me parece sumamente útil y ten por seguro que si algún día necesito algo parecido recurriré al él.
Gracias

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
« Respuesta #6 en: 17 de Octubre de 2008, 14:36:43 »
Muchas gracias Nocturno, doblemente alagado porque para mi sos una de las personas que mas respeto en este foro, y dude de ponerlo por 2 razones, una es que como soy fan de FreeScale/Motorola seguramente van a venir las cirticas...y otra porque la conexión con la página no anda muy bien.

Saludos !

Desconectado Micro23

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 226
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
« Respuesta #7 en: 17 de Octubre de 2008, 15:29:31 »
 :-/ :-/ Felicitaciones RICHI
Muy bueno el proyecto, Animo! que hay pocos freesqueleanos pero hay. Yo estoy empezando con estos micros y me resultan bastante interesantes.
Como bien comentas el Procesor Expert esta muy bueno pero voy a tener en cuenta lo que dices.

En cuanto al manejo de la FAT, la libreria la desarrollaste? Menudo trabajo

Gracias por compartir
Saludos y nos veremos por aca de ves en cuando.
El pesimista se queja del viento
El optimista espera que cambie
El realista ajusta las velas

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
« Respuesta #8 en: 17 de Octubre de 2008, 15:34:36 »
Hola Micro23, gracias por las felicitaciones, salvo algunas funciones de la RTL ( strcpy, memcpy, memset ) todo hay que hacerlo a pulmon en el mundo FreeScale, cosa diferente que el famoso CSS. Igual hay mucho info en la web y en especial en este foro. :P

Saludos !


Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
« Respuesta #9 en: 18 de Octubre de 2008, 13:35:28 »
Hola

se ve muy bueno el proyecto RICHI777, Felicidades!!!

 :)

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
« Respuesta #10 en: 18 de Octubre de 2008, 14:23:48 »
Gracias x las felicitacione :lol:

Saludos !

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
« Respuesta #11 en: 20 de Octubre de 2008, 02:03:55 »
mis respetos RICHI777, eres un crack, admiro esa interesa en no depender de herramientas que facilitan el trabajo, te aseguro que cuando sea grande, voy a ser como tu  :D :D :D :D de verdad felicitaciones, y no pienses que por que este foro es de pics, no hay lugar para otras marcas, saludos
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
« Respuesta #12 en: 23 de Octubre de 2008, 14:53:17 »
jajaja !!! Me trataste de viejo :S ... bueno un poco lo soy...

Saludos !

Desconectado damago

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
« Respuesta #13 en: 23 de Octubre de 2008, 15:18:34 »
Hola Richi777,

tiene muy buena pinta tu proyecto. El codigo esta muy bien estructurado y separado en archivos por bloques. Probablemente en breve tenga que hacer algo similar y queria hacerte una pregunta respecto al consumo:
- Cuando comentas que consume 2-3mA te refieres al conjunto micro+SD? que ratio de tiempo estas escribiendo y que tiempo dejandola en standby para conseguir  ese consumo (aprox.)? me puedes dar una idea de la cantidad de bytes por seg. de escritura en la SD que equivale a ese consumo?

Un saludo. Dani.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
« Respuesta #14 en: 23 de Octubre de 2008, 15:34:06 »
Hola Dani !
Si, el consumo es del conjunto micro + SD/MMC pero en modo Stand-By, si tengo tiempo en estos dias te mido el consumo en modo Read y modo Write. Te comento que el firmware no esta pensado para el bajo consumo, el micro siempre esta corriendo en modo normal.

Saludos !
« Última modificación: 23 de Octubre de 2008, 16:33:26 por RICHI777 »