Autor Tema: velocidad spi  (Leído 4282 veces)

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

Desconectado armymen

  • PIC10
  • *
  • Mensajes: 6
velocidad spi
« en: 24 de Abril de 2009, 12:26:10 »
Hola

Bueno no se si este post va aqui, como programo en c con ccs, pues lo he puesto aqui, pido disculpas a priori pos si me equivovo.

La cuestion es que estoy relizando un proyecto critico en el tiempo, y quisiera sabr cual seria el tiempo que me llevaria la comunicacion por spi para realizar el guardado de datos. Por ejemplo tengo que guardar unos 400bytes en una memoria, la cual se comunica por spi, quisiera saber el tiempo que tardaria.

Gracias
Armymen
"todo para uno y uno para todos"

Desconectado josnelihurt

  • PIC12
  • **
  • Mensajes: 64
Re: velocidad spi
« Respuesta #1 en: 24 de Abril de 2009, 12:31:54 »
Básicamente hay que cumplir los tiempos del dispositivo a comunicar, lo mejor es ver las formas de onda del dispositivo y ver los tiempos en el datasheet, Salu2
JoN

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: velocidad spi
« Respuesta #2 en: 25 de Abril de 2009, 22:12:18 »
Con tan pocos datos mas que adivinar no podemos josnelihurt. Que PIC vas a utilizar? Que memoria vas a utilizar? A que velocidad va a correr el micro? ¿A que distancia esta la memoria del micro? Trata de darnos mas detalles y con gusto ayudaremos.

Sin embargo te tiro una soga para que vayas dandote una idea: Con un PIC 18F que corra a 48 MHz es posible obtener como máximo 12 Mbps en una comunicación SPI, pero ojo, acá tenes que ver si transmitis en full duplex o half duplex, si vas a implementar algun CRC o algun otro control de errores, si hay tiempos muertos entre una transmisión y otra. Definitivamente transmitir esos 400 bytes 12 Mbps es bastante dificil, sobre todo con las rutinas built-in que te da CCS, son muuuuuuuuuuyyyyyyy lentas, yo tuve que fabricarme las mias propias para poder abusar al máximo de esta comunicación, en cuanto pueda te las paso.

Saludos.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: velocidad spi
« Respuesta #3 en: 26 de Abril de 2009, 12:50:20 »
Hola

Gonzalo, ¿qué es más rápido en promedio en un pic18f, I2C o SPI?

Es que estoy por decidir si implementar I2C o SPI entre 2 PICs y quisiera saber qué opción será más ventajosa.

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: velocidad spi
« Respuesta #4 en: 26 de Abril de 2009, 13:37:15 »
Gonzalo, ¿qué es más rápido en promedio en un pic18f, I2C o SPI?

Es que estoy por decidir si implementar I2C o SPI entre 2 PICs y quisiera saber qué opción será más ventajosa.

Mig, con el SPI se pueden alcanzar velocidades bastante más altas que con el I2C por varias razones: Primero, el SPI tiene lineas independientes de transmisión y recepción por lo que puede operar en full duplex, mientras que en I2C tienes que conformarte con enviar o recibir bytes en forma alternativa porque solo tiene una linea de datos. Segundo, el I2C tiene un protocolo que demanda la necesidad de tener bits de arranque y parada y especificar la dirección del esclavo que te ocupa 7 u 10 bits dependiendo del modo, por lo que la cantidad de bits a transmitir en cada paquete aumenta y obviamente con ello se reduce la cantidad de datos que uno puede transmisitr en un período de tiempo.
Debido a esto en los PIC18 es posible alcanzar frecuencias de comunicación de hasta 12 MHz para la comunicación SPI mientras que solo es posible alcanzar 1 MHz para el modo I2C. Aun peor, Microchip advierte que su modulo I2C no cumple con todas las especificaciones para velocidades mayores a 400 KHz por lo que la pérdida de datos esta contemplada, asi que deberías implementar un control de errores por software lo que te demora aún mas las cosas.

Entonces me dirán, cual es la ventaja de usar el I2C?? Para que lo inventaron si el SPI va mas rápido? Bueno, lo lindo del I2C es que solo utiliza 2 lineas (sin contar GND) que son una para los datos y otra para el reloj, independientemente de la cantidad de esclavos que tengamos conectados (ya que los esclavos se seleccionan por software). Por el contrario SPI requiere al menos 3 lineas: 1 de envio de datos, otra de recepcion de datos y una ultima para el reloj. Dado que SPI no implemente direccionamiento por software (En realidad no implementa nada porque no es un protocolo en si, sino que es una forma serial de transmitir datos) los esclavos deben seleccionarse utilizando una linea denominada SS o Slave select, con lo cual se demandará una linea SS por cada esclavo que tengas.

Llendo a tu caso en particular MIG, tu puedes comunicar 2 pics con SPI utilizando solo 3 lineas pues no requieres seleccionar esclavo y aun así gozar de las ventajas en velocidad de esta comunicación. Sin embargo, por experiencia te recomendaría utilizar la línea adicional de SS para sincronizar ambos dispositivos y así te evitas los dolores de cabeza que puede suponerte el desfase de ambos micros, cosa que es muy frecuente que ocurra.

Espero haber sido claro, cualquier duda no dudes en chiflar  :mrgreen:.

0x01 saludo.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: velocidad spi
« Respuesta #5 en: 26 de Abril de 2009, 13:43:34 »
Tenía dudas al respecto de la velocidad porque leía en internet que el I2C llegaba a 1MHz, pero como siempre los pics no llegan a transmitir a tal velocidad (USB a 12Mbps jaja sí como no  :D ).

Voy a ver si puedo usar la terminal SS que mencionas porque ando justo en pines libres  :?

0x03E8 gracias  :D