TODOPIC

Otros Microcontroladores / Dispositivos programables => Microcontroladores ARM => Mensaje iniciado por: RICHI777 en 17 de Octubre de 2008, 14:12:02

Título: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 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

Una cosa para mi importante es detallar lo que no soporta...

Que cosa no soporta MicroLogger ?

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 !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 2 ]
Publicado por: RICHI777 en 17 de Octubre de 2008, 14:13:13
Hola, en este nuevo post voy a adjuntar el esquematico:
(http://img228.imageshack.us/img228/2100/circuitmicrologgerli1.png)

El circuito esta basado en el microcontrolador FreeScale MC9S08SH32 que entre sus principales caracteristicas tiene :

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


Correcciones al esquemático



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


Aca les dejo algunas fotos...

(http://img520.imageshack.us/img520/3347/img8203vu1.jpg) (http://imageshack.us)
(http://img520.imageshack.us/img520/img8203vu1.jpg/1/w800.png) (http://g.imageshack.us/img520/img8203vu1.jpg/1/)

(http://img407.imageshack.us/img407/1512/img8204yk8.jpg) (http://imageshack.us)
(http://img407.imageshack.us/img407/img8204yk8.jpg/1/w800.png) (http://g.imageshack.us/img407/img8204yk8.jpg/1/)

(http://img231.imageshack.us/img231/616/img8219op1.jpg) (http://imageshack.us)
(http://img231.imageshack.us/img231/img8219op1.jpg/1/w800.png) (http://g.imageshack.us/img231/img8219op1.jpg/1/)

En los proximos posts subire el firmware y una breve descripción del mismo.
Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 3 ]
Publicado por: RICHI777 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:

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 !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 4 ]
Publicado por: RICHI777 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

Compilador

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 !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 5 ]
Publicado por: RICHI777 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 !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: Nocturno 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
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 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 !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: Micro23 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.
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 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 !

Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: PalitroqueZ en 18 de Octubre de 2008, 13:35:28
Hola

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

 :)

Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 18 de Octubre de 2008, 14:23:48
Gracias x las felicitacione :lol:

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: scientist 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
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 23 de Octubre de 2008, 14:53:17
jajaja !!! Me trataste de viejo :S ... bueno un poco lo soy...

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: damago 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.
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 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 !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 24 de Octubre de 2008, 14:23:11
Bueno pude medir el consumo, pero como no tengo un miliamperimetro tuve que poner una resistencia en serie de 0.39 en serie y medir la caida de tensión, modifique el firmware para que lea directamente 1000 sectores de la tarjeta y para la escritura lo mismo. Detallo los valores:


Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: damago en 26 de Octubre de 2008, 17:52:03
Hola Richi777,

gracias por los datos y por el tiempo dedicado. La idea para bajo consumo imagino que seria almacenar en RAM bloques del tamaño de un sector, escribirlo de golpe y a dormir la SD. Ya echare cuentas, a ver cuanto se tarda en escribir un sector (en ms), para ver en que se quedaria el consumo medio de la SD (depende de la aplicacion claro).

Un saludo. Dani.
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: PalitroqueZ en 29 de Octubre de 2008, 18:36:19
RICHI777 una pregunta, ya que estas usando captura de datos y la guardas en una mmc, ¿te da tiempo de guardar las muestras continuamente?

¿cuanto es el tiempo de una linea de programa en ese micro?

esto lo digo porque enviar datos a una mmc lleva su tiempo y el loggeo no se puede detener.

Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 29 de Octubre de 2008, 18:48:52
Hola PalitroqueZ, en mi caso particular estoy logeando datos de un GPS y las muestras me llegan cada 5 segundos tiempo mas que suficiente para completar la escritura. En estos dias voy a tratar de medir el tiempo promedio de escritura, ya que depende si es que el file system tiene que asignar un nuevo cluster.
Con respecto al ciclo de instrucción del micro el HCS08SH32 puede correr hasta 20 Mhz con un ciclo de instrucción de 50 ns, pero en promedio las intrucciones corren en 3 o 4 ciclos de clock. En mi caso particular lo estoy corriendo a una ciclo de instrucción de 71 ns y la comunicación con la tarjeta a 5 Mhz de velocidad de SPI.

Saludos !

Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: PalitroqueZ en 29 de Octubre de 2008, 18:56:23
Ahh con 5 segundos es tiempo de sobra,

... la comunicación con la tarjeta a 5 Mhz de velocidad de SPI.

Esto es lo que no he podido calcular con precisión, esos 5Mhz como bien dices es la velocidad a modo spi, pero el verdadero tiempo es el que transcurre a partir del momento en el que el micro envia un dato y hasta que la mmc le dice que está libre para el siguiente dato.
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 30 de Octubre de 2008, 09:56:18
Si tienes razon, esa es la comunciación base del SPI, el tiempo total en la escritura de un sector lógico en la tarjeta tambien es variable porque depende de la estructura interna de la tarjeta ( unidades de borrado ). Como te comente antes voy a intentar en estos dias de medir el tiempo promedio.

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: damago en 14 de Noviembre de 2008, 18:45:29
Hola Richi777,

acabo de recibir la placa de evaluacion del MC9S08JM60, y me voy a poner en marcha con un programa que es una especie de usb mass storage + datalogger.

Queria preguntarte antes de nada, cual es la diferencia esencial (a nivel de soft) entre las SD, y las microSD por la cual estas rutinas no son validas para estas ultimas. Se complicaria muho el soft? Yo voy a utilizar una microSD.

Un saludo. Dani.
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 15 de Noviembre de 2008, 16:08:10
Hola Damago, de toda la implementación lo que mas trabajo me dio fue el módulo de acceso a la tarjeta, por lo que me comentaron no todas las tarjetas respetan los standares, sumado a esto tampoco tenia una variedad de tarjetas como para probar, solo consegui una MMC y dos SD card, también tenia una micro-SD pero las pruebas que hice no la pude leer. El otro problema es la micro-SD por default vienen formateadas en FAT-32 y era un requerimiento que en principio no hiba a soportar. Y volviendo a tu pregunta especifica, la diferencia es en los comandos que tenes que enviarle en la inicialicación, que para este tipo de tarjetas son mandatorios y si se complicaria creo que no, solo hay que tener una buena especificación y probar, todo lo demas deberia mantenerse igual.

Saludos !

PD: Me gustaria saber mas de como implementar un Mass Storage en USB, si tenes data y podes compartirla seria estupendo.
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: damago en 15 de Noviembre de 2008, 18:02:00
Hola Richi777,

he leido por ahi que un problema con las microSD, es que no estan obligadas a soportar la comunicacion por SPI. Me he comprado una de Sandisk, ya  te contare.

En principio el tema del mass storage pensaba solucionarlo con una mezcla de un demo que ofrece freescale y tu libreria de FAT. El codigo de freescale hace uso del USB, y del SPI para hacer de puente al PC hacia la SD. El HCS08 no tiene ni idea del formato de arhivos, el controlador lo lleva el propio PC mediante comandos SCSI (el HCS08 se limita a enviar y recibir bloques de la SD).

En mi programa cuando el PC se conecta a la tarjeta utilizaria ese codigo de freescale (simplemente quiero que puede leer y escribir de esa tarjeta). Cuando desconecto del USB, utilizaria tu libreria por ej, para escribir en la SD (por ej. datalogger) y el USB no lo utilizaria.

El codigo y documentacion a la que me refiero es esta:
http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=DEMOJM&fpsp=1&tab=Documentation_Tab

ahora no se porque no me va esa pagina (si no consigues verla, te lo paso por email). El demo se llama "DRM104"

Un saludo. Dani.
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 15 de Noviembre de 2008, 21:00:28
Hola Dani, jejeje justamente lo probe con una MicroSD SanDisk, pero como te comente antes no lo probe a full, lo que no sabia era que no estaban obligados a soportar el SPI, lo mas raro de todo es que ni NoteBook que lee cualquier cosa tampoco la reconoce :S. Con respecto al SCSI me imagine que era algo parecido, despues con tiempo voy a leer el link. Lo bueno del micro que usas es que es el mismo core del SH32 y seguramente usarias el mismo compilador, please comentame los avances y cualquier problema que tengas asi te doy una mano.

Mire con mas detalle la nota de aplicación, y es tal cual como vos decis, esta escrito el soporte a USB, SPI y acceso a la SD, pero nada de file system, seguramente el S.O. le hace request al micro para que lea/escriba sectores o clusters, en modo stand-alone te sirve el mini file system para guardar datos.

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: damago en 16 de Noviembre de 2008, 10:28:16
Respecto a tu microSD, es posible que sea microSDHC? seria una razon por la cual no la lea tu notebook si no es nuevo. Los aparatos que se hicieron para leer SDs no valen para leer las nuevas SDHC (sd high capacity).

Si, el compilador es el mismo (codewarrior). A ver si esta tarde cableo un conector de microSD a la placa de evaluacion (no se si con cablecillos va a funcionar) y pruebo el demo este de freescale a ver si funciona con esta tarjeta.

Un saludo. Dani.
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 16 de Noviembre de 2008, 14:01:23
Pude ser, despues lo investigare mejor, suerte con lo tuyo !

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: damago en 17 de Noviembre de 2008, 18:46:38
Hola Richi777, despues del fracaso de cablear el conector de microSD jeje cablee uno de SD y utilice un adaptador microSD->SD (es que soy un zarpas con el soldador y la SD si tiene pines grandes jeje). He probado el demo de freescale y si funciona bien con la microSD de Sandisk, asi que partimos de que si soporta SPI.

Ahora voy a leerme tu codigo bien. Necesito la SD formateada? o vale si ya tiene datos (formato FAT dice el windows, supongo que se refiere a FAT16).

Un saludo. Dani.
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 18 de Noviembre de 2008, 00:20:33
Hola Dani, buenisimo que anduvo la placa, estuve mirando el fuente, y salvo con algunas diferencias los comandos de inicialización son similares, yo arrancaria asi como esta. El problema con lo que tengo hecho es que normalmente las microSD vienen formateadas en FAT32, y no lo soporto. Pero podes forzar el formateo a FAT16 cambiando los sectores x cluster. Acordate que MicroLogger requiere que la tarjeta este previamente formateada, es decir tarjeta formateada FAT12/16 con o sin datos.

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 18 de Noviembre de 2008, 16:03:21
Hola Dani, de nuevo yo. Estuve mirando con mas detenimiento la APN, y para hacer todo lo que queres tenes que tomar una decisión, el tema pasa por el módulo que maneja la tarjeta, ya que ambos proyectos hace uso de esto. Tenes tres soluciones posibles:


Estoy tratando de medir los tiempos de lectura/escritura, para tener una referencia, no creo que te sirva a vos, porque el micro que estas usando corre a 48 Mhz y el que uso yo corre a 14 Mhz.

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 18 de Noviembre de 2008, 20:33:08
Hola, para el que habia preguntado sobre el rate de lectura/escritura en la tarjeta, les paso algunos valores, no son exactos ya que coloque un timer para medir y la resolucion minima fue de 8.6 us.

Lectura    --> 80 bytes 7.51 ms ( casi 10.6 Kbytes/Sec )
Escritura  --> 80 bytes 34.5 ms ( casi 2 Kbytes/Sec )

Los tiempos bajos tienen que ver con la arquitectura de 8 bits, como el file system involucra mucho calculo de 32 bits al pobre micrito le custa bastante lidiar con esto, ademas tambien depende de las opciones de compilación, seteando la máxima optimización estos tiempos bajaron un 20 % !!!.

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: PalitroqueZ en 19 de Noviembre de 2008, 13:07:08
Ese que preguntó era yo jeje

esa informaciòn me serà ùtil

Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 19 de Noviembre de 2008, 13:33:57
Hola PaliotroqueZ ( complicadisimo tu nick  :D) igual es una medición sin mucho rigor cientifico, el tema es que el debugger para estos micros no tiene un timer donde puedas hacer la medición directamente, solo en modo simulador pero a mi no me sirve, asi que tuve que poner un timer que me quedaba libre como free-running y ver el resultado. Con respecto a la medición probre de leer y grabar 80 caracteres y extrapole los resultados, pero lo hice en las mejores condiciones ya que arranque con la tarjeta recien formateadita con lo cual no tenia fragmentación y las pruebas no superaban el tamaño del cluster.

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 6 ]
Publicado por: RICHI777 en 22 de Noviembre de 2008, 14:30:43
Hola aca les dejo los archivos del Eagle para el circuito, otra vez gracias a Marcos por pasarmelo en forma totalmente desintereasa.

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ]
Publicado por: RICHI777 en 18 de Marzo de 2009, 12:31:39
Hola, debido a consultas que recibí, queria explayarme un poco más en como migrar a otra aplicación, basicamente hay gente que esta usando solamente la parte del File System, asi que en esto me voy a centrar.
La dependencia de files es la sgte:

FS-->Card-->MCU

Los módulos FS ( File System ) y Card ( Accesso a la SD/MMC ) no usan directamente ningún recurso de hardware, sino que lo hacen atravez del módulo MCU. En el mismo deberan implementarse las sgtes funciones para obtener la mínima funcionalidad requerida.

Código: C
  1. void WatchDog_Clear( void )
  2. {
  3.    ...
  4. }
  5. void SetLed( tLedType LedType )
  6. {
  7.   ...
  8. }

Estas dos funciones, una resetea el watch dog interno, y la otra por cada acceso a un sector de la tarjeta prende el led, pueden no ser usadas, en este caso deberan tener el cuerpo vacio.

Las siguientes funciones son requeridas si el acceso a la tarjeta es hecho via SPI:

Código: C
  1. void SPI_Init( tSPIClock SPIClock )
  2. {
  3.   ...
  4. }
  5.  
  6. void SPI_ChangeClock( tSPIClock SPIClock )
  7. {
  8.   ...
  9. }
  10.  
  11. void SPI_SendByte( byte Data )
  12. {
  13.   ...
  14. }
  15.  
  16.  
  17. byte SPI_ReceiveByte( void )
  18. {
  19.   ...
  20. }
  21.  
  22.  
  23. void SPI_CSAssert( void )
  24. {
  25.   ...
  26. }
  27.  
  28.  
  29. void SPI_CSDeassert( void )
  30. {
  31.   ...
  32. }

Las dos primeras existen porque en el inicio es necesario comunicarse con la tarjeta a una velocidad máxima de SPI de 400 KHz, una vez finalizada la inicialización es posible aumentar la velocidad, la misma depende del tipo de tarjeta, las MMC son mas lentas que las SD y si mal no recuerdo permiten un máximo de 5Mhz de SPI.
Las funciones siguientes, Send y Receive no merecen explicación, y las dos últimas encienden/apagan la linea -SS del SPI.
Aunque en casi todos los controloadores de SPI integrados en los micros es posible manejar en forma automatica esta señal, decidi separarla, ya que en cierta parte de inicialización es necesario transmitir una chorreada de '1' pero con esta linea en alto.

Código: C
  1. void SetTimerEvent( tTimerTime *Event, dword MiliSeconds )
  2. {
  3.   ...
  4. }
  5.  
  6. bool TimerHasExpired( tTimerTime *Event )
  7. {
  8.   ...
  9. }

Estas dos funciones son utilizadas para controlar las operaciones de acceso a la tarjeta y cortar por timeout en caso de que algo falle, la primera setea un "evento" con un tiempo programable y la segunda retorna verdadero si ese mismo evento expiro. Si revisan el código de estas dos funciones estan escritas en ANSI C puro, lo único es que dependen de una función interna al módulo que devuelve el valor de un contador free-running que es el encargado de contar la cantidad de ticks por segundo, en este caso es de 10 ms.

Código: C
  1. dword GetTimerTicks( void )
  2. {
  3.     volatile dword ReadTicks;
  4.  
  5.     ReadTicks = TimerTicks;
  6.  
  7.     while ( ReadTicks != TimerTicks )
  8.     {
  9.         ReadTicks = TimerTicks;
  10.     }
  11.  
  12.     return( ReadTicks );
  13. }

Como la función devuelve un dword ( unsigned long o 4 bytes ) en micros cuya aquitectura no sea de 32 bits es necesario realizar la comparación dentro del while ya que la variable TimerTicks se incrementa automaticamente en el handler de un timer y esto sucede en tiempo de interrupción.

Estas son las únicas funciones que deberia implementar para mudar el file system a otra aplicación, recordar setear el endian correspondiente aocrde al micro que se este usando.

Alineación de las estructuras
El último punto importante es verificar la alineación de las estructuras. En micros de 8 bits normalmente el compilador aloca una estructura en base a la suma total de sus miembros:

Código: C
  1. typedef struct
  2. {
  3.   byte FName[11];
  4.   byte Attr;
  5.   word Reserved0;
  6.   word CreationTime;
  7.   word CreationDate;
  8.   word LastAccessDate;
  9.   word Reserved1;
  10.   word LastWriteTime;
  11.   word LastWriteDate;
  12.   word StartCluster;
  13.   dword FileSize;
  14. } tFileInfo;

En este caso el tamaño de la estructura es de 32 bytes ( la suma del sizeof de cada elemento ). Pero esto no siempre es asi, en algunos micros de 32 bits al micro le resulta mas optimo acceder a direcciones pares. Para estos casos el compilador puede "paddear" los miembros para que estos se aloquen siempre en direcciones pares. La estructura interna de File System trabaja con no paddeo o lo que es lo mismo padding = 1 , para asegurarse esto existe un pragma, casi todos los compiladores que vi lo implementan, que permite definir el tamaño del padding, quedando la definicon anterior de la sgte. manera:

Código: C
  1. #pragma pack(1)
  2. typedef struct
  3. {
  4.   byte FName[11];
  5.   byte Attr;
  6.   word Reserved0;
  7.   word CreationTime;
  8.   word CreationDate;
  9.   word LastAccessDate;
  10.   word Reserved1;
  11.   word LastWriteTime;
  12.   word LastWriteDate;
  13.   word StartCluster;
  14.   dword FileSize;
  15. } tFileInfo;

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: scientist en 05 de Abril de 2009, 00:59:59
Hola RICHI777 o diogenes, (me gusta más el segundo), te comento lo que voy a "tratar" de hacer, estoy diseñando la placa todavia, tiene que ver con un micro MCF51QE128 (32 bits)de super bajo consumo, de la linea flexis que es totalmente compatible con el MC9S08QE128 (8bits), quiero hacer algo parecido a lo que comentas, guardar en una tarjeta SD las coordenadas de un GPS, solo eso, bueno, tambien le estoy adaptando un modem GSM (multitech) que tengo desde hace varios meses trabajando (con el GPRS sin mucho exito, por decidia mia) y bueno, ahora si me estoy leyendo tu grandisimo aporte, mi pregunta seria, cambiara mucho el codigo si lo quiero hacer con el coldfire? y tambien tiene que ver con el modem, con un modem GPS puedo obtener coordenadas y prescindir del GPS? bueno, te comento que el GPS que compre no es muy bueno, solo lo compre para jugar con el, te pongo el link donde lo compre, por si te interesa modulo GPS (http://cgi.ebay.com/Mini-USB-Interface-GPS-Module-Demo-Board-no-Bluetooth_W0QQitemZ250398730706QQcmdZViewItemQQptZLH_DefaultDomain_0?hash=item250398730706&_trksid=p4634.c0.m14) este modulo es más didáctico, pero viendo los resultados, pienso adquirir un SIRF STAR 3, bueno, hasta aquí mis dudas, a lo mejor lo postee en el foro de freescale tambien, saludos
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 06 de Abril de 2009, 12:18:31
Hola, la parte de file system y manejo de la tarjeta, no deberias cambiar nada, ya que esta escrita en ANSI C. Lo que tenes que adaptar es la parte de bajo nivel: timers, SCI y SPI porque eso depende exclusivamente del micro que vas a usar. En estos momentos estoy migrando a un V1 similar al que estas usando, pero como todavia no tengo la placa final no pude probarlo.
Para que el proyecto compile sin errores bajo ColdFire, es necesario setear en la seccion de opciones de compilación Enable GCC extension, sino haces esto te reporta ciertos errores.
Te adjunto la versión 1.1 que corrige algunos errores en el retorno de dos funciones pero nada serio. Con respecto a lo que queres hacer, si tenes Modem GPRS con GPS integrado no hay problemas, normalmente estos modulos tienen integrado un GPS SIRF compatible y tienen su propio puerto serie para obtener/configurar las tramas NMEA.

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: scientist en 06 de Abril de 2009, 13:57:51
Muchas gracias diogenes, por tu respuesta, con respecto al modem, me confundi, es solo un modem GPRS/GSM, pero la pregunta es, si con solo el modulo gsm, se pueden saber las coordenadas, por la respuesta, ya supongo que no se puede, solo los que tienen integrado el modulo GPS, bueno, le adaptare el externo que compre, para que empiece a hacer pruebas, una curiosidad, con cual coldfire estas haciendolo? saludos
una de las razones por la cual utilice el QE. es debido a su bajo consumo, trabaja con 3.3v hasta 1.8v sin problemas (solo baja la frecuencia de trabajo) y que no tendria que poner nada para adpatarlo a la SD por que tambien trabaja este voltaje, y por el modem GSM, ese me parece puede trabajar con los dos voltajes, lo checare, y les comentare como me va, por cierto, solo como comentario sin sentido, ya me compre el usb multilink, excelente programador y depurador, saludos
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 06 de Abril de 2009, 14:07:38
Hola, para saber las coordenadas es necesario un GPS, por eso te comente que hay modulos GSM/GPRS que traen incluidos un GPS. Estoy usando el mismo un CF51QE128, en mi caso porque FreeScale me lo mando como muestra, en si en lo que estoy haciendo solamente necesitaba un micro de que tenga al menos 6 K de RAM por eso descarte los de HCS08XX.

Saludos ! 
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: scientist en 06 de Abril de 2009, 16:29:08
es el mismo que estoy utlizando, si quieres te puedo mandar el footprint y el esquematico del micro que hice, yo utilizo el altium, solo avisame si lo quieres y te lo mando, saludos
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 06 de Abril de 2009, 16:41:40
Hola, muchas gracias, pero por una cuestion o otra no diseño impresos, no tengo mucha idea y sinceramente tampoco me interesa demasiado, gracias a Dios tengo un amigo que le paso el esquematico y el me lo diseña y me lo arma. :-)

Saludos !

Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: scientist en 06 de Abril de 2009, 17:08:27
 :) :) :) :) :) :)
tienes mucha suerte, por aca no hay muchas personas, (por no decir ninguna) en campeche, que haga este tipo de trabajos, saludos
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 11 de Agosto de 2009, 17:46:23
Hola a todos, decide subir todo el proyecto de MicroLogger al sourceforget.net para tener un repositorio global e ir actualizando los ultimos cambios, este es el link de descarga:

https://sourceforge.net/projects/microfs/

Saludos !
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: elotrogonzalo en 29 de Mayo de 2015, 19:51:35
Estimados, baje el proyecto completo para CW y al compilar me sale éste error que adjunto. Por qué será? yo siempre uso CW pero no uso prossesor expert por las dudas tenga que ver con eso. Otra cosa, podrían explicarme como usar éstas librerías para crear archivos .txt y guardarlos en la  microsd?. Vi en el código que solamente le das el nombre como "test.txt" y lo toma como un archivo .txt que puedo ver en la pc normalmente?. Lo que no me queda muy claro es si con ésta implementación se puede leer cualquier tipo de archivo por ejemplo una imagen .jpg?. Quiero implementarla en un gt32a que son los que uso yo. Muchas gracias. Saludos!!!.
Título: Re: MicroLogger [MC9S08SH32 y MMC/SD Card ] [Post 1 ]
Publicado por: RICHI777 en 29 de Mayo de 2015, 19:55:45
Entra en la parte de configuration del project "Project" y selecciona a mano la ubicación del archivo prm ...

Saludos !