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
.
0x01 saludo.