Escribí una biblioteca de C ++ llamada v3c-raspi. Puedes descargarla de SourceForge.
Escribí un programa de ejemplo que intenta hacer exactamente lo que quieres, llamado " i2s ".
Desafortunadamente, experimenta una" anomalía del programa "en cualquier lugar, desde inmediatamente hasta un par de segundos después de iniciarse; parece que algo más usa el canal dma 0 y deja basura en el registro de direcciones del bloque.
Podría hacer que la Raspberry Pi procese alrededor de 16 millones de bloques de control DMA por segundo (en otra prueba).
Los micrófonos i2s que planeo usar son los Analog Devices ADMP441 que salida de audio de 24 bits.
A 48 kHz es una frecuencia de reloj de bits de 48000 x 32 = 1,536 MHz. El código también alterna el reloj usando dma, por lo que duplicamos la frecuencia a 3,072 MHz.
Agregue pausas de PWM y duplicará el número de bloques de control nuevamente a 6.144 millones, aún dentro de los 16 millones que podría salir del rpi.
Informé un error sobre este mismo problema a Raspbian pero no hay respuestas y et.
Resolví la mayoría de los problemas; consulte la lista de correo linux-rpi-kernel de noviembre de 2013, mensaje 000734 para obtener más información.
Está limitado a aproximadamente 2 millones de muestras / seg. podría capturar muestras de 22,1 kHz de 8 pares estéreo con él.