rk3566 android11 configurar placa de som (es7202 ADC)

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:

        

 

 

 

Acho que você gosta

Origin blog.csdn.net/qq_48709036/article/details/123730413
Recomendado
Clasificación