Autor Tema: Enviar un archivo por SPI  (Leído 4314 veces)

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

Desconectado devaronaomar

  • PIC10
  • *
  • Mensajes: 27
Enviar un archivo por SPI
« en: 27 de Febrero de 2010, 09:10:05 »
Hola a todos, les comento mi problema.
Básicamente necesito que mi pic 18f2550 envíe a un dispositivo (vs1053 concretamente) un programita que ya tengo por que he podido descargar de la página del fabricante. Necesito que el pic lo almacene en su memoria y llegado el momento lo envíe a la ram del otro dispositivo por spi. El código a enviar son unas tablas de conversión que necesito que el VS ejecute.
Utilizo PIC C para programar y según me han dicho por ahí lo mejor es poner todo el archivo como una variable y enviar dicha variable.. lo cual no tengo ni idea de cómo hacerlo! Igual es más fácil insertar el código del archivo q tengo que enviar en el propio que ejecuta el pic e ir "leyendo y enviando".. No sé.
Como pueden advertir apenas empiezo en el mundo de los pic, por lo que siento mi ignorancia.

Agradecería mucho la ayuda.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Enviar un archivo por SPI
« Respuesta #1 en: 27 de Febrero de 2010, 09:53:57 »
¿Qué compilador estás usando? Creo que CCS ya tiene rutinas de manejo de SPI.

Yo hice unas rutinas de SPI por SoftWare para HiTech, obviamente no son tan buenas como usar SPI por HardWare, pero las hice mitad porque estaba aburrido y mitad para poder usar SPI en dispositivos sin ese Hard.
Básicamente lo que hice es una función a la cual le paso como parámetro el byte que quiero enviar y a su vez está función me devuelve el byte recibido.

En los PIC de gama media que ya incorporan el HardWare SPI (16F876A, por ejemplo), al habilitar dicho dispositivo (previa configuración del mismo) y llenar el registro con el dato a enviar la transmisión comienza instantaneamente, si no me equivoco. Vos te tenés que encargar de ir actualizando el buffer según la cantidad de datos a enviar....


Supongamos que querés enviar una tabla de 10 bytes.... yo haría algo así

Código: [Seleccionar]

char tabla[10];
unsigned char indice;


void mani()
{
   ..........
    ..........
    .........
    .......// habilitar el dispositivo receptor (generalmente llevando el pin CS a nivel 0)
    for (indice = 0; indice <= 10; indice++)
    {
            enviar_dato(table[indice]);
     }
    ..........// deshabilitar el receptor  (generalmente llevando el pin CS a nivel 1)

}

si su tabla es constante podés definir un array de constantes y enviar eso
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Enviar un archivo por SPI
« Respuesta #2 en: 27 de Febrero de 2010, 11:22:48 »
En CCS si utilizas SPI por hardware lo configura con setup_spi(...) y sino lo debes crear la comunicación con #use spi(...) (Mas detalles en ayuda de CCS). Luego para enviar datos por hardware se usa spi_read() o spi_write(), en cambio con comunicación por software se utiliza spi_xfer(,)

Supongo que el archivo está en una memoria externa, en ese caso deberias leer una cierta cantidad de bytes (por ejemplo 255 bytes), enviarlos y luego seguir leyendo el archivo.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado devaronaomar

  • PIC10
  • *
  • Mensajes: 27
Re: Enviar un archivo por SPI
« Respuesta #3 en: 27 de Febrero de 2010, 14:10:05 »
En realidad pensaba utilizar la misma memoria del pic para almacenar el programa. Para así no necesitar complicarlo con lecturas desde otra memoria, lo que no sé es cómo guardalo en el pic y desde el programa del pic enviarlo por spi.  La configuración del puerto la tengo hecha, incluso la modificación de algunos registros del dispositivo a controlar. Aqui un fragmento :
#define(__PCH__)
#include <18F2550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include <input.c>

#define  DREQ    PIN_B7
#define  XCS     PIN_B6

void main() {     
     setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);     //PREPARA PUERTO SPI
     
     while (Input(DREQ)==0);     //ESPERA A QUE VS ESTÉ LISTO     
     output_low(XCS);       //PONE EL PIN XCS LOW PARA INICIAR TRANSFERENCIA SCI     
       spi_write(0x2);   //SECUENCIA DE ESCRITURA: COMANDO DE ESCRITURA
       spi_write(0xC);   //DIRECCIÓN A ESCRIBIR  SCI AICTRL0
       spi_write(0X0);   //VALOR A ESCRIBIR
     output_high(XCS);
     
     while (Input(DREQ)==0);     //ESPERA A QUE VS ESTÉ LISTO
     output_low(XCS);
       spi_write(0x2);
       spi_write(0xD);   //ESCRIBO SCI AICTRL1
       spi_write(0x0);
     output_high(XCS);
     
     while (Input(DREQ)==0);     //ESPERA A QUE VS ESTÉ LISTO
     output_low(XCS);
       spi_write(0x2);
       spi_write(0x2);   // ESCRIBO SCI AICTRL2
       spi_write(0x400);
     output_high(XCS);


             //enviar plugin en este punto

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Enviar un archivo por SPI
« Respuesta #4 en: 27 de Febrero de 2010, 14:20:34 »
Puedes crear un buffer constante que CCS lo guardará en la memoria de programa:
Código: [Seleccionar]
const char Buffer[]={"Archivo que necesitamos enviar....."};
Luego para enviarlo:
Código: [Seleccionar]
int16 k;


k=0;
while(Buffer[k]!='\0'){
     spi_write(Buffer[k++]);
}

NOTA: Por restricción de CCS el Buffer no puede tener más de 255 bytes, si el archivo es mayor tendrás que crear varios.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado devaronaomar

  • PIC10
  • *
  • Mensajes: 27
Re: Enviar un archivo por SPI
« Respuesta #5 en: 28 de Febrero de 2010, 09:02:54 »
Hmm no he econtrado nada de esa técnica en la ayuda pero la intentaré a ver qué pasa :-P muchas gracias por comentarla :-)
Sólo una pregunta respecto a ella, tengo que pasar el archvo del programa al pic de alguna forma o al hacer esa llamada desde el programa ppal ya se integra su código? Gracias.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Enviar un archivo por SPI
« Respuesta #6 en: 28 de Febrero de 2010, 11:19:25 »
Tienes que crear buffer constantes como se muestra que al grabar el microcontrolador se graban en la memoria de programa. No das información de que archivo necesitas enviar, así que no puedo darte más información.


Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything