Estoy tratando de entender por qué usamos I2S para transferir audio que SPI, ya que I2S tiene menos ancho de banda en comparación con SPI.
Estoy tratando de entender por qué usamos I2S para transferir audio que SPI, ya que I2S tiene menos ancho de banda en comparación con SPI.
Hay mucho más en audio que ancho de banda. De la forma en que funciona I2S, los datos se proporcionan justo a tiempo para convertirlos en analógicos. Por lo tanto, el I2S DAC o el códec no necesitan almacenar datos en búfer ni mantener ningún tipo de sincronización compleja. Se basa en el reloj entrante para determinar la frecuencia de muestreo. Esto también significa que los datos deben enviarse continuamente, lo que significa que el bus I2S se utilizará completamente en todo momento mientras se reproduce el audio.
Si quisiera usar SPI de la misma manera, tendría que ejecutarlo exactamente a la velocidad correcta, siempre entregando datos justo a tiempo para convertirlos en analógicos. Esto significa que el bus estará ocupado al 100% durante la reproducción de audio y no estará disponible para nada más. De lo contrario, tendría que elaborar un complejo esquema de almacenamiento en búfer y un control de flujo de hardware para decirle al host cuándo enviar más datos, etc.
Supongo que una forma sencilla de responder a la pregunta es que I2S está específicamente diseñado para enviar audio a un DAC. SPI es un propósito más general. La mayoría de las implementaciones de SPI no son compatibles con el tipo de control de velocidad de reloj de grano fino que se necesitaría para conectarse directamente a un DAC de la manera que lo hace I2S.