¿Por qué I2S tiene un ciclo de reloj adicional en SCLK que se desperdicia, es decir, no se transfieren datos?

Obtengo diferentes formas de onda para I2S en diferentes lugares, en uno descubrí que el LSb se transfiere después de que LRCK ha cambiado. En este dispositivo ese no es el caso.

Parece que hay I2S normal, I2S justificado a la izquierda e I2S justificado a la derecha. La izquierda y la derecha justificadas tienen sentido. Sin embargo, el I2S normal tiene algo peculiar.

P: Una vez que el LRCK cambia de polaridad, el valor de SDATA en el primer flanco ascendente de SCLK parece ignorarse. ¿Es esto un error en la hoja de datos? ¿Por qué se hace esto? La imagen está debajo con la parte cuestionada en un círculo rojo.

ingrese la descripción de la imagen aquí

¿Es esto un error en la hoja de datos de CS4334? Busqué en la página 2-6 del manual de datos del "Procesador de audio digital TAS3004 con códec" y mostró una X en el primer bit.

No es un "ciclo de reloj adicional desperdiciado". Es solo una latencia de un período de reloj adicional. Pero no se desperdicia, el LSB de la muestra anterior podría transmitirse durante este ciclo si la cantidad de bits de una muestra de datos fuera igual a la cantidad de ciclos SCLK dentro de un período de canal.

Respuestas (1)

De hecho, el I2S estándar tiene un desplazamiento de un bit, supongo que porque en los primeros días proporcionaba el tiempo para bloquear la salida del registro de desplazamiento en algún tipo de convertidor de entrada paralelo (O tal vez el tiempo para que un S/H sacara estéreo de un solo canal de un costoso chip convertidor o algo así, ¡sí, eso se hizo en realidad!).

Mucho de esto tiende a ser un caso de formalizar lo que ya se está haciendo, y 30 años después nadie recuerda el razonamiento original.

Ya veo, por cierto, ¿por qué crees que el reloj sclk sigue alternando incluso después del lsb y no del lrck? Quiero decir que el lrck debería alternar justo después del último bit, ¿verdad? Me pregunto cómo sabe el dac cs4334 que recibió el último bit en modo sclk externo donde dice "I2S, datos de hasta 24 bits"
I2S se define como tener 64 SCLK por ciclo LRCLK, ya que las potencias de dos son más fáciles en los divisores de hardware que las potencias de dos, dividir una frecuencia por 64 es mucho más fácil de hacer en lógica síncrona que la división por 48 ... Dado que nosotros siempre tenga 32 sclks por trabajo en serie, tiene sentido (más o menos) justificar a la izquierda los datos de entrada, ya que eso significa que proporcionar la extensión del signo es correcto, no necesita preocuparse por la longitud de la palabra fuente. LRCLK tiene que ejecutarse a la frecuencia de muestreo, por lo que la alternativa es hacer que SCLK dependa de la longitud de la palabra de entrada y nadie quiera ir allí.
Sigo encontrando variantes, no estoy seguro de por qué tenemos I2S y luego justificado a la izquierda, justificado a la derecha, etc. Pero de todos modos...
Los estándares son geniales, ¡hay tantos para elegir!
Por cierto, ¿qué crees que significa la notación -1, -2, -3, .... +3, +2, +1? Ciertamente, los bits podrían ser simplemente contadores como 24, 23, 22.... 3, 2, 1. Entonces, ¿por qué estos números positivos y negativos? Todo lo que necesitamos saber es dónde se supone que deben estar LSb y MSb, ¿verdad?
@DanMills, parece que su suposición es básicamente correcta. De la especificación I2S: "La línea WS cambia un período de reloj antes de que se transmita el MSB. Esto permite que el transmisor esclavo obtenga la sincronización sincrónica de los datos en serie que se configurarán para la transmisión. Además, permite que el receptor almacene el anterior palabra y borre la entrada para la siguiente palabra (ver Figura 1)." sparkfun.com/datasheets/BreakoutBoards/I2SBUS.pdf