Limitare la differenza tra I2C e SPI mi sembra riduttivo.
I2C supporta spesso la modalità high-speed, che supporta 3.4 Mbps. Siamo quasi a livelli di SPI, che spesso supporta clock molto elevati, ma in pratica poi non li si raggiungono perché le linee di clock e dati sono single ended e spesso non molto curate nel layout ("è solo una SPI") così che si generano problemi di timing.
Qui, un esempio tra tanti, un ADC con interfaccia I2C che genera 8bit a 140 kSPS, equivalenti a 1.1 Mbps.
http://www.analog.com/media/en/technica ... 5_7999.pdfE se parliamo di ADC veloci, la SPI c'è, ma solo come interfaccia di configurazione: i dati escono su linee LVDS parallele.
La vera forza dell'SPI è un'altra: se per qualche motivo (per esempio disturbi elettromagnetici) la comunicazione o il componente stesso vengono disturbati e crashano, può darsi che lo slave mantenga il bus ad un livello basso. A questo punto il master, se ne ha la possibilità, può solo generare un reset togliendo tensione al sistema, altrimenti siamo fritti.
Nell'SPI invece l'implementazione hardware è praticamente sempre fatta in modo che la linea CS controlla direttamente il reset dei registri di comunicazione dell'interfaccia. Inoltre un crash non blocca il bus.
E questo è un criterio estremamente importante nella scelta dei componenti, soprattutto in ambito industriale.
Boiler