Plataforma: rk3566 android11
núcleo: 4.19.172
codec de áudio: es7202 ADC, este chip é apenas um chip de codificação, sem função DAC, ou seja, sem função de decodificação, o sinal de áudio não pode ser decodificado e emitido a partir deste codec, portanto, o áudio só pode ser decodificado e emitido a partir do rk817 integrado , e o lado da CPU deste chip é usado O protocolo PDM, e o protocolo i2s é geralmente usado. Os protocolos comumente usados são: i2c, PDM, PCM, TDM, etc.
Uma breve descrição do protocolo PDM:
Um método de modulação para representar sinais analógicos por sinais digitais
O PCM usa o método de amostragem de intervalo igual para representar a amplitude do componente analógico de cada amostragem como um componente digital de N bits (N = profundidade de quantização), de modo que o resultado de cada amostragem no método PCM são dados de comprimento de palavra de N bits.
PDM, apenas 2 fios, transmite música, o método de codificação é diferente do I2S.
Onda senoidal representada por PDM
Os sinais de áudio no formato PDM podem ser roteados perto de circuitos com forte interferência de ruído, como telas LCD.
A arquitetura baseada em PDM é diferente de I2S e TDM porque o filtro de dizimação (Decimation Filter) não está no dispositivo de envio, mas dentro do dispositivo de recebimento. A saída da fonte são os dados modulados originais de alta taxa de amostragem (sobreamostra), como a saída do modulador Sigma-Delta, em vez dos dados dizimados como no I2S. O aplicativo baseado na interface PDM reduz a complexidade do dispositivo de envio e, como o CODEC como dispositivo de recebimento integra um filtro de decimação interno, a complexidade geral do sistema é bastante reduzida. Para microfones digitais, filtros de decimação de maior eficiência podem ser obtidos usando processos de silício mais finos para CODEC ou fabricação de processador do que aqueles usados para microfones tradicionais.
A Arquitetura de Áudio foca na alfabetização:
Driver de Hardware: Driver de dispositivo de hardware de áudio, que consiste em três partes, ou seja, Máquina, Plataforma e Codec.
O driver de áudio ASoC consiste em três partes: plataforma, codec, máquina.
A máquina é controlada pela conexão i2s entre a plataforma e o codec, plataforma (cpu_dai) <----->codec_dai
Plataforma: os drivers de plataforma incluem drivers de mecanismo DMA de áudio, drivers de interface de áudio digital (DAI) (como I2S, AC97, PCM) e quaisquer drivers DSP de áudio para essa plataforma.
cpu dai: Em sistemas embarcados, geralmente se refere aos controladores de barramento I2S e PCM da CPU, que são responsáveis por transferir os dados de áudio do I2S tx FIFO para o CODEC (no caso de playback, o sentido de gravação é inverso) . cpu_dai é registrado por meio de snd_soc_register_dai(). Nota: DAI é a abreviação de Digital Audio Interface, que é dividida em cpu_dai e codec_dai, que são conectadas através do barramento I2S/PCM/pdm; AIF é
a abreviatura de Audio Interface, geralmente dividida em interfaces I2S e PCM.
pcm dma: Responsável por transferir os dados de áudio do dmabuffer para o I2S tx FIFO A lógica desta parte é mais complicada, e os próximos artigos irão explicar em detalhes. O driver dma de áudio é registrado por meio de snd_soc_register_platform(). Vale ressaltar que a operação dma não é necessária em alguns casos, como a conexão direta entre o Modem e o CODEC, pois o próprio Modem já enviou os dados para o PCM FIFO. inicie o codec_dai para receber os dados, neste caso, o driver da máquina dai_link precisa especificar .platform_name = “snd-soc-dummy”, que é um driver de plataforma virtual, consulte sound/soc/soc-utils.c para implementação.
Codec: O driver Codec é independente de plataforma e contém controles de áudio, funções de interface de áudio, definições codec DAPM e funções codec IO. Esta classe pode ser estendida para BT, FM e MODEM IC, se necessário. Os drivers de classe de codec devem ser um código genérico que pode ser executado em qualquer arquitetura e máquina.
No Playback, os dados PCM enviados pelo espaço do usuário são um sinal digital amostrado e quantizado, o codec é convertido em sinal analógico pelo DAC e enviado para a saída de fone de ouvido externo, para que possamos ouvir o som. Codec significa literalmente codec, mas existem muitos componentes funcionais no chip, os mais comuns são AIF, DAC, ADC, Mixer, PGA, Line-in, Line-out e alguns chips de codec de ponta também possuem EQ, DSP, SRC , DRC, AGC, cancelador de eco, supressão de ruído e outros componentes.
Máquina: O driver da máquina atua como a cola que descreve e une outros drivers componentes para formar um "dispositivo de placa de som" ALSA. Ele lida com todos os controles específicos da máquina e eventos de áudio no nível da máquina (por exemplo, ligar o amplificador quando a reprodução começa).
A máquina pode ser entendida como uma abstração da placa de desenvolvimento. A placa de desenvolvimento pode incluir várias placas de som e a parte da máquina correspondente contém vários links.
Machine refere-se a uma determinada máquina, que vincula as interfaces de áudio de cpu_dai, codec_dai e modem_dai definindo dai_link e, em seguida, registra snd_soc_card. Ao contrário dos dois acima, os drivers de plataforma e CODEC são geralmente reutilizáveis, enquanto a máquina tem suas características de hardware específicas e quase não é reutilizável. Os chamados recursos de hardware referem-se a: o link entre DAIs; abertura do amplificador por meio de um determinado GPIO; detecção da inserção e remoção de fones de ouvido por meio de um determinado GPIO; uso de um determinado relógio como MCLK/OSC externo como fonte de relógio de referência de Módulos I2S e CODEC, etc.
Driver da plataforma: O driver da plataforma é o código de controle da parte da cpu, que abstrai duas estruturas snd_soc_dai_driver e snd_soc_platform_driver;
driver do codec: O driver do codec é o código de controle da parte do codec, que abstrai duas estruturas, a saber, snd_soc_dai_driver e snd_soc_codec_driver;
Driver da máquina: O driver da máquina controla e gerencia a correspondência de conexão entre plataforma e codec, gerencia controles, widgets e rotas, e sua estrutura abstrata é snd_soc_card.
Os drivers de plataforma incluem drivers de mecanismo DMA de áudio (PCM DMA), drivers de interface de áudio digital (CPU DAI) (como I2S, AC97, PCM) e quaisquer drivers DSP de áudio para a plataforma. Os comumente usados são os drivers CPU DAI e PCM DMA.
CPU DAI: Em sistemas embarcados, geralmente se refere aos controladores de barramento I2S e PCM da CPU. Para a reprodução, é responsável por mover os dados de áudio do I2S TX FIFO para o CODEC (a captura é na direção oposta). cpu_dai é registrado por meio de snd_soc_register_dai().
PCM DMA: Para a reprodução, é responsável por mover os dados de áudio no buffer dma para o I2S TX FIFO (Captura é na direção oposta). O driver dma de áudio é registrado por meio de snd_soc_register_platform().
Configuração:
&i2c3 {
status = "okay";
clock-frequency = <400000>;
es7202: es7202@37 {
status = "okay";
#sound-dai-cells = <0>;
compatible = "ES7202_PDM_ADC_1";
reg = <0x37>;
};
};
&pdm {
status = "okay";
#sound-dai-cells = <0>;
rockchip,path-map = <1 0 3 2>;//录音声道顺序
clocks = <&cru MCLK_PDM>, <&cru HCLK_PDM>;
clock-names = "pdm_clk", "pdm_hclk";
pinctrl-names = "default";
pinctrl-0 = <&pdmm0_clk1
&pdmm0_sdi1>;
};
es7202-sound {
status = "okay";
compatible = "simple-audio-card";
simple-audio-card,format = "pdm";
simple-audio-card,name = "rockchip,es7202";
simple-audio-card,mclk-fs = <256>;
simple-audio-card,cpu {
sound-dai = <&pdm>;
};
simple-audio-card,codec {
sound-dai = <&es7202>;
};
};
comando de depuração do codec de áudio:
Confirme se o registro da placa de som foi bem-sucedido através do proc fs
# cat /proc/asound/cards
0 [rockchiprk809co]: rockchip_rk809- - rockchip,rk809-codec
rockchip,rk809-codec
7 [Loopback
]: Loopback - Loopback
Loopback 1
# ls / dev/snd/
by-path controlC7 pcmC0D0p pcmC7D0p pcmC7D1p
controlC0 pcmC0D0c pcmC7D0c pcmC7D1c timer
/proc/asound # dispositivos cat
1: : sequenciador
2: [ 0- 0]: reprodução de áudio digital
3: [ 0- 0]: captura de áudio digital
4: [ 0] : controle
5: [ 1- 0]: captura de áudio digital
6: [ 1] : controle
33: : temporizador
Nota: Há um problema com o driver es7202 do fabricante. Se sua linha de dados pdm for retornada diretamente para a CPU, você precisará modificar o driver. Farei o upload para o recurso. Faça o download você mesmo, se necessário.
Anexe o diagrama esquemático de hardware: