Áudio I2S no Jetson Nano: como configurar o Raspiaudio Audio+

Para configurar o Raspiaudio Audio+ em um Jetson Nano, ative os pinos I2S4 no jetson-io, force esses pinos para o modo de áudio em cada inicialização e conecte I2S4 ao driver de som. O kit de desenvolvimento Jetson Nano foi criado para IA e robótica, mas não tem saída de áudio analógica. A placa Raspiaudio Audio+ é uma placa de som projetada para o Raspberry Pi que também encaixa no conector de 40 pinos do Nano.

Este guia cobre todos os passos no Jetson Nano B02 (2019). Ao final, você ouvirá áudio pela saída de fones do Audio+.

Masterize sua faixa em segundos
Chegue a -14 LUFS automaticamente. Preserve o caráter da sua faixa. Áudio pronto para streaming que mantém o que torna sua música especial. Direto do seu navegador.

Antes de começar: modelo do Jetson Nano e compatibilidade com o Audio+

Configure seu Jetson Nano primeiro. Se ainda não fez isso, siga o guia de configuração do Jetson Nano da NVIDIA. Você deve conseguir inicializar o Nano até a área de trabalho com monitor e teclado.

O que você vai precisar: um Jetson Nano B02 e uma placa Raspiaudio Audio+. O conector de 40 pinos do Audio+ encaixa diretamente no do Nano. Pressione com firmeza para que todos os pinos façam contato.

Este guia foi testado no kit de desenvolvimento Jetson Nano B02 (2019), também chamado P3450 (módulo P3448 na placa-base P3449). Você pode reconhecer o Jetson Nano pelo dissipador passivo (modelos Jetson mais recentes usam ventoinhas). O B02 também tem uma fileira de pinos que se projeta como uma pequena extensão, ausente no modelo A01 mais antigo.

Se você tem o modelo A01 antigo ou um Jetson mais recente, use este guia apenas como referência, pois os passos não se aplicam diretamente. Você pode compartilhar suas dicas na comunidade Raspiaudio.

Outras placas DAC I2S: o Audio+ e DACs semelhantes para Raspberry Pi não têm interface de controle, apenas uma interface I2S. Como explica este tópico do fórum NVIDIA sobre placas de som I2S do Raspberry Pi para o Jetson Nano, essas placas devem funcionar depois da configuração dos pinos. Portanto, os passos abaixo são um bom ponto de partida para outros DACs I2S desse tipo no Nano B02.

Agradecimento especial a jas-mx pela publicação no fórum NVIDIA sobre como ativar a saída de áudio I2S no conector de 40 pinos que inspirou este guia.

Passo 1: ative os pinos de áudio I2S4 com jetson-io

Por padrão, o Jetson Nano não usa esses pinos do conector para áudio. Inicialize o Nano com monitor e teclado, abra um terminal e execute:

sudo /opt/nvidia/jetson-io/jetson-io.py

Isso abre uma ferramenta com menus:

  1. Use as setas para cima e para baixo para destacar "Configure Jetson 40pin Header" e pressione Enter
  2. Selecione "Configure header pins manually" e pressione Enter
  3. Na lista de caixas de seleção, encontre "i2s4" (pinos 12, 35, 38, 40) e "audio_mclk" (pino 7). Pressione Space em cada uma para marcá-la com um asterisco [*].
  4. Selecione "Back"
  5. Selecione "Save pin changes"
  6. Selecione "Save and reboot to reconfigure pins"

O Jetson Nano reinicia. A ferramenta grava uma árvore de dispositivos personalizada (DTB) que atribui esses pinos ao áudio, salva em /boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb.

Passo 2: confira se os pinos estão no modo I2S

Depois de reiniciar, confira o modo dos pinos:

sudo cat /sys/kernel/debug/tegra_gpio | grep "J:"

Você deve ver: J: 2:1 00 00 00 00 00 00 000000
Se você vir "f0" em qualquer lugar (como "f0 00 00"), a correção abaixo é necessária.
"00" significa que os pinos estão no modo de função especial (SFIO) para áudio I2S. "f0" significa que estão presos no modo GPIO.

Passo 3: corrija os pinos com um serviço systemd se necessário

Em muitas placas B02, os pinos não mudam para o modo de áudio. Este comando corrige isso:

sudo busybox devmem 0x6000d204 32 0

Ele força os pinos para o modo correto, mas eles voltam ao modo GPIO quando você reinicia. Para aplicar a correção em cada inicialização, crie um serviço systemd:

sudo tee /etc/systemd/system/fix-i2s4-pins.service <<EOF
[Unit]
Description=Fix I2S4 Pinmux for Jetson Nano
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/bin/busybox devmem 0x6000d204 32 0
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

Esse serviço de inicialização grava no registrador de configuração GPIO 0x6000d204, forçando os pinos da porta J para o modo SFIO de I2S4.

Ative e inicie o serviço:

sudo systemctl enable fix-i2s4-pins
sudo systemctl start fix-i2s4-pins

Os dois comandos devem terminar sem erros. Se você vir "Failed to start fix-i2s4-pins.service: Unit not found," o arquivo do serviço não foi criado corretamente. Confira os logs:

sudo journalctl -u fix-i2s4-pins

Passo 4: conecte I2S4 ao driver de som

Conecte a interface I2S4 ao sistema de áudio:

amixer -c tegrasndt210ref cset name='I2S4 Mux' ADMAIF1

A saída deve terminar com values=1. Se aparecer o erro "Invalid card", o driver de áudio ainda não está carregado. Reinicie e tente novamente.

Isso direciona a interface ADMAIF1 (para onde o driver envia áudio) a I2S4, conectando o driver aos pinos físicos.

Passo 5: reproduza um tom de teste

Este comando envia uma onda senoidal estéreo de 48 kHz e 16 bits pela interface I2S4:

speaker-test -D hw:tegrasndt210ref,0 -r 48000 -c 2 -F S16_LE -t sine

Você deve ouvir um tom contínuo nos fones ou alto-falantes. Pressione Ctrl+C para parar.

Como confirmar que a placa Audio+ está funcionando

Se você ouviu o tom, o Raspiaudio Audio+ funciona no seu Jetson Nano B02. A correção dos pinos se mantém após reinicializações graças ao serviço do passo 3.

Extra: como gravar o DTB personalizado no seu Jetson Nano

O método acima funciona para um dispositivo. Se você precisa gravar várias placas Jetson Nano para produção, percorrer os menus do jetson-io em cada uma fica cansativo. Em vez disso, grave cada placa com o arquivo DTB (Device Tree Blob) criado no passo 1 para que a configuração dos pinos já esteja pronta:

/boot/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb

Copie esse arquivo para seu computador. Ao regravar a placa, copie-o de volta para a pasta /boot/ antes da primeira inicialização.

Importante: qual Jetson Nano você tem?

Este arquivo DTB corresponde apenas à revisão da placa-base em que foi criado. A revisão fica no final do nome do arquivo (aqui, b00). Gravar um DTB de outra revisão pode danificar a partição de inicialização, e talvez seja necessário regravar tudo a partir de um computador host.

A maneira mais fácil de gravar um Jetson Nano é a partir de um computador host Linux com NVIDIA SDK Manager ou o NVIDIA Jetson Linux Driver Package (L4T). Recomendo o L4T porque funciona em mais distribuições Linux. O procedimento completo está neste tópico do fórum NVIDIA sobre como baixar e gravar L4T manualmente. Aqui está a versão resumida.

Baixe L4T do arquivo de versões NVIDIA Jetson Linux. Para o Jetson Nano, use a série Jetson Linux 32.7.x, não uma branch JetPack mais recente. Na página da versão, baixe o Driver Package (BSP) e o Sample Root Filesystem. Extraia o pacote de drivers sem sudo e depois o sistema de arquivos raiz de exemplo com sudo em Linux_for_Tegra/rootfs/.

Depois, a partir da pasta Linux_for_Tegra, aplique os binários NVIDIA:

sudo ./apply_binaries.sh

Em seguida, conecte o Jetson Nano ao computador host por micro USB. O Nano deve ser alimentado por uma fonte de 5 V separada.

Aqui está um exemplo de comando que grava o Jetson Nano com seu arquivo DTB personalizado. Execute no computador host depois de copiar o DTB personalizado do Nano para ele. Substitua o caminho pelo seu.

sudo ./flash.sh -k DTB
-d /path/to/your/file/kernel_tegra210-p3448-0000-p3449-0000-b00-user-custom.dtb
jetson-nano-devkit mmcblk1p1

Para gravar, talvez seja necessário colocar o Jetson Nano no modo de recuperação:

  1. Alimente o Jetson Nano por uma fonte de 5 V (não por micro USB).
  2. Conecte o pino "FC RCV" (recuperação forçada) a um pino "GND" com um fio jumper, um clipe de papel ou uma chave de fenda pequena.
  3. Conecte o pino "SYS_RST" (reinicialização do sistema) a um pino "GND" para reiniciar o Jetson Nano.
  4. Conecte o Nano ao computador host por micro USB.

Confira a conexão no computador host com:

lsusb | grep -i nvidia

Depois de gravar, você ainda precisa adicionar o serviço systemd do passo 3 para configurar os pinos corretamente em cada inicialização.

Guias relacionados

Quando a placa já reproduzir som, estes guias apresentam projetos de áudio neural para pequenos computadores de placa única:

Masterize sua faixa em segundos
Chegue a -14 LUFS automaticamente. Preserve o caráter da sua faixa. Áudio pronto para streaming que mantém o que torna sua música especial. Direto do seu navegador.