Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

30/03/2013 #1

Avatar de nitehack

¿Enviar datos grandes desde EEPROM a PIC y a PC?
Hola!
Quiero extraer todos los datos de una EEPROM externa( de unos 64KB) al PC via USB, para ello tenia pensado usar el PIC18F4550 y leer los datos con él y luego enviarlos por el usb al PC.
La cosa es que no se cual es la mejor forma de enviarlos/ leerlos. Que es mejor ¿Leer un byte y enviarlo al PC o leer X bytes y luego enviarlos al PC? Si es mejor la segunda opción ¿De cuantos bytes hago los paquetes?
¿Hay alguna forma mejor de hacerlo?
30/03/2013 #2

Avatar de Ivan747

Las memorias EEPROM se escriben en bloques de 64 bytes. Tiene más sentido que transmitas y recibas en paquetes de 64 bytes. También deberías mandar un checksum o algo para comprobar que los datos no se han corrompido.

Asumo que sabes como escribir en una memoria 24LC de forma continua. Si no es así:
i2c_start
i2c_write(address de la memoria)
i2c_write(addres byte alto)
i2c_write(address byte bajo)
i2c_write(dato1)
i2c_write(dato2)
...
i2c_write(dato64)
i2c_stop

Recuerda que tienes que esperar a que la memoria esté lista (unos pocos milisegundos mira la hoja de datos) para poder seguirle escribiendo.

¿Por qué me preocupo por la escritura si solo vas a leer? Porque puedes usar ese código en otra cosa y ahorrar tiempo a la larga.

Nota: si escribieras datos uno por uno, tendrías que esperar esos milisegundos por cada byte. Con el método anterior solamente esperas cada 64 bytes. Ahorras mucho tiempo.
31/03/2013 #3

Avatar de nitehack

Ivan747 dijo: Ver Mensaje
Las memorias EEPROM se escriben en bloques de 64 bytes. Tiene más sentido que transmitas y recibas en paquetes de 64 bytes. También deberías mandar un checksum o algo para comprobar que los datos no se han corrompido.

Asumo que sabes como escribir en una memoria 24LC de forma continua. Si no es así:
i2c_start
i2c_write(address de la memoria)
i2c_write(addres byte alto)
i2c_write(address byte bajo)
i2c_write(dato1)
i2c_write(dato2)
...
i2c_write(dato64)
i2c_stop

Recuerda que tienes que esperar a que la memoria esté lista (unos pocos milisegundos mira la hoja de datos) para poder seguirle escribiendo.

¿Por qué me preocupo por la escritura si solo vas a leer? Porque puedes usar ese código en otra cosa y ahorrar tiempo a la larga.

Nota: si escribieras datos uno por uno, tendrías que esperar esos milisegundos por cada byte. Con el método anterior solamente esperas cada 64 bytes. Ahorras mucho tiempo.
Ok gracias! Una cosa con el tema del checksum ¿hay alguna función en CCS que lo calcule?
Yo me he creado una funcion simple que suma todos los bytes y ese es mi checksum pero claro no es muy fiable
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.