Cite de la hoja de datos de 18F4550, que debería ser la misma en relación con SPI:
En las operaciones de recepción, SSPSR y SSPBUF juntos crean un receptor con doble búfer. Cuando SSPSR recibe un byte completo, se transfiere a SSPBUF y se establece la interrupción de SSPIF.
Durante la transmisión, el SSPBUF no tiene doble búfer. Una escritura a SSPBUF escribirá tanto a SSPBUF como a SSPSR.
SSPBUF
es un búfer de 1 byte y SSPSR
es un registro de desplazamiento realmente conectado a los pines IO.
Esto significa que el maestro no tiene efectivamente un búfer para enviar datos. Después de enviar un byte, se debe escribir un nuevo byte en SSPBUF
y se debe activar un nuevo proceso de transmisión. Esto siempre lleva un tiempo notable como retraso entre las transmisiones de bytes.
Si la reducción de la velocidad de SPI hasta que el retraso sea despreciable no está bien, debe implementar la transferencia de SPI en el software. ¡Esto será más lento que los modos de hardware SPI más rápidos!
Tenga en cuenta los diferentes ciclos de reloj que necesitan las instrucciones. Necesitará varios NOP
s para obtener una señal SPI bien definida con un ciclo de trabajo de reloj del 50%. Hice esto hace algunos años y puedo mostrarlo al final de esta semana, ya que actualmente estoy de vacaciones.
Las bibliotecas de microchip también ofrecen software SPI. Pero dudo que puedan hacer transmisiones de múltiples bytes sin problemas.