20250727让飞凌OK3576-C开发板在Rockchip的原厂Android14下通过耳机播音
20250727让飞凌OK3576-C开发板在Rockchip的原厂Android14下通过耳机播音
2025/7/27 23:28
缘起:很容易知道 飞凌OK3576-C开发板 使用的声卡芯片是 NAU88C22YG
新唐科技(NUVOTON) NAU8822LYG NAU88C22YG 新唐立体声音频编解码芯片
原理图:OK3576-C V1.2_20240830.pdf
搜索:HP,耳机,很容易找到第16页/总共21页,
NAU88C22YG
IIC ADDRESS:0011010R/W
0x1A
1、使用【最接近】Rockchip的原厂Android14,KickPi 7的SDK。
DTS适应EVB1编译,没有声音。
2、直接使用 飞凌OK3576-C开发板 的DTS。
Y:\OK3576-android-source\kernel-6.1\arch\arm64\boot\dts\rockchip\OK3576-C-android.dts
还是没有声音。
1|console:/sdcard #
1|console:/sdcard # cat /proc/asound/cards
0 [rockchipnau8822]: rockchip-nau882 - rockchip-nau8822
rockchip-nau8822
1 [rockchipdp0 ]: rockchip-dp0 - rockchip-dp0
rockchip-dp0
2 [rockchiphdmi ]: rockchip-hdmi - rockchip-hdmi
rockchip-hdmi
console:/sdcard #
console:/sdcard # ls -l /dev/snd/
total 0
crw-rw---- 1 system audio 116, 4 2025-07-27 15:17 controlC0
crw-rw---- 1 system audio 116, 6 2025-07-27 15:17 controlC1
crw-rw---- 1 system audio 116, 9 2025-07-27 15:17 controlC2
crw-rw---- 1 system audio 116, 3 2025-07-27 15:17 pcmC0D0c
crw-rw---- 1 system audio 116, 2 2025-07-27 15:17 pcmC0D0p
crw-rw---- 1 system audio 116, 5 2025-07-27 15:17 pcmC1D0p
crw-rw---- 1 system audio 116, 8 2025-07-27 15:17 pcmC2D0c
crw-rw---- 1 system audio 116, 7 2025-07-27 15:17 pcmC2D0p
crw-rw---- 1 system audio 116, 33 2025-07-27 15:17 timer
console:/sdcard #
console:/sdcard # ll
total 52115
drwxrws--- 2 u0_a74 media_rw 3452 2025-07-27 15:17 Alarms
drwxrws--x 5 media_rw media_rw 3452 2025-07-27 15:17 Android
drwxrws--- 2 u0_a74 media_rw 3452 2025-07-27 15:17 Audiobooks
drwxrws--- 2 u0_a74 media_rw 3452 2025-07-27 15:17 DCIM
drwxrws--- 2 u0_a74 media_rw 3452 2025-07-27 15:17 Documents
drwxrws--- 2 u0_a74 media_rw 3452 2025-07-27 15:17 Download
drwxrws--- 3 u0_a74 media_rw 3452 2025-07-27 15:17 Movies
drwxrws--- 3 u0_a74 media_rw 3452 2025-07-27 15:17 Music
drwxrws--- 2 u0_a74 media_rw 3452 2025-07-27 15:17 Notifications
drwxrws--- 3 u0_a74 media_rw 3452 2025-07-27 15:17 Pictures
drwxrws--- 2 u0_a74 media_rw 3452 2025-07-27 15:17 Podcasts
drwxrws--- 2 u0_a74 media_rw 3452 2025-07-27 15:17 Recordings
drwxrws--- 2 u0_a74 media_rw 3452 2025-07-27 15:17 Ringtones
-rw-rw---- 1 u0_a74 media_rw 53268598 2025-07-27 12:45 kiss8.wav
console:/sdcard # tin
tinycap tinymix tinypcminfo tinyplay
console:/sdcard # tinyp
tinypcminfo tinyplay
console:/sdcard # tinyplay
Usage: tinyplay file.wav [-D card] [-d device] [-p period_size] [-n n_periods]
1|console:/sdcard #
1|console:/sdcard # tin
tinycap tinymix tinypcminfo tinyplay
1|console:/sdcard # tinyplay kiss8.wav -D 0 -d 0
Playing sample: 2 ch, 44100 hz, 16 bit 53268480 bytes
3、那就分析/比对内核/driver。
直接查找nau88c22*.c,找不到!
很容易/根据经验/艰难得知驱动名是:nau8822.c
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217$ cd kernel-6.1/
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$ find . -name nau88c22*.c
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$ find . -name nau8822*.c
./sound/soc/codecs/nau8822 - 副本.c
./sound/soc/codecs/nau8822.c
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~/rk3576-android14.0-20250217/kernel-6.1$
https://blog.csdn.net/qq_39104123/article/details/115752708?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7EPaidSort-2-115752708-blog-143410504.235%5Ev43%5Epc_blog_bottom_relevance_base8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7EPaidSort-2-115752708-blog-143410504.235%5Ev43%5Epc_blog_bottom_relevance_base8&utm_relevant_index=4
基于imx8mq的NAU8822音频驱动开发
https://blog.csdn.net/qq_39104123/article/details/115752708
CSDN:NAU88C22YG 驱动名:nau8822.c
4、和 飞凌OK3576-C开发板 原厂的 内核/driver 进行比对,很容易知道 飞凌对 Rockchip的原厂Android14的SDK进行过魔改了!
修改之后,可以在命令行让 tinyplay播放器通过耳机发生了。
但是在Android界面还是不能播音。还需要修正!
Y:\rk3576-android14.0-20250217\kernel-6.1\sound\soc\codecs\nau8822.h
Y:\OK3576-android-source\kernel-6.1\sound\soc\codecs\nau8822.h
/* SPDX-License-Identifier: GPL-2.0 */
/*
* nau8822.h -- NAU8822 ALSA SoC Audio driver
*
* Copyright 2017 Nuvoton Technology Crop.
*
* Author: David Lin <ctlin0@nuvoton.com>
* Co-author: John Hsu <kchsu0@nuvoton.com>
* Co-author: Seven Li <wtli@nuvoton.com>
*/
#ifndef __NAU8822_H__
#define __NAU8822_H__
#include <linux/clk.h>
/* Codec Private Data */
struct nau8822 {
struct device *dev;
struct regmap *regmap;
int mclk_idx;
struct nau8822_pll pll;
int sysclk;
int div_id;
struct clk *clk;
};
Y:\rk3576-android14.0-20250217\kernel-6.1\sound\soc\codecs\nau8822.c
Y:\OK3576-android-source\kernel-6.1\sound\soc\codecs\nau8822.c
static int nau8822_i2c_probe(struct i2c_client *i2c)
{
struct device *dev = &i2c->dev;
struct nau8822 *nau8822 = dev_get_platdata(dev);
int ret;
if (!nau8822) {
nau8822 = devm_kzalloc(dev, sizeof(*nau8822), GFP_KERNEL);
if (nau8822 == NULL)
return -ENOMEM;
}
i2c_set_clientdata(i2c, nau8822);
/* Setup clocks */
nau8822->clk = devm_clk_get(&i2c->dev, NULL);
if (IS_ERR(nau8822->clk)) {
dev_err(&i2c->dev, "codec clock missing or invalid\n");
ret = PTR_ERR(nau8822->clk);
}
ret = clk_prepare_enable(nau8822->clk);
if (ret) {
dev_err(&i2c->dev, "unable to prepare codec clk\n");
}
nau8822->regmap = devm_regmap_init_i2c(i2c, &nau8822_regmap_config);
if (IS_ERR(nau8822->regmap)) {
ret = PTR_ERR(nau8822->regmap);
dev_err(&i2c->dev, "Failed to allocate regmap: %d\n", ret);
return ret;
}
nau8822->dev = dev;
/* Reset the codec */
ret = regmap_write(nau8822->regmap, NAU8822_REG_RESET, 0x00);
if (ret != 0) {
dev_err(&i2c->dev, "Failed to issue reset: %d\n", ret);
return ret;
}
ret = devm_snd_soc_register_component(dev, &soc_component_dev_nau8822,
&nau8822_dai, 1);
if (ret != 0) {
dev_err(&i2c->dev, "Failed to register CODEC: %d\n", ret);
return ret;
}
return 0;
}
【这里还需要进一步修正!】
Y:\OK3576-android-source\hardware\rockchip\audio\tinyalsa_hal\codec_config\config_list.h
参考资料:
声卡
百度:RK3576 默认声卡
Error: 'kiss8.mp3' is not a riff/wave file
tinyplay 制定声卡
rk3588 nau8822
RK3588 nau8822
RK3576 NAU88C22YG
NAU88C22YG
BING:rk平台怎么调试nau8822
rk3576 nau8822
CSDN:nau8822
https://www.nuvoton.com/resource-files/NAU8822DataSheetRev3.3.pdf
https://www.eeworld.com.cn/qrs/eic698427.html
基于RK3576开发板的声卡资源介绍
aplay -l
https://blog.csdn.net/weixin_68294039/article/details/124248608?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-2-124248608-blog-148433086.235%5Ev43%5Epc_blog_bottom_relevance_base8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-2-124248608-blog-148433086.235%5Ev43%5Epc_blog_bottom_relevance_base8&utm_relevant_index=5
RK3566,ES7202声卡驱动添加
https://blog.csdn.net/weixin_68294039/article/details/124248608
4.修改安卓hal层
在hardware/rockchip/audio/tinyalsa_hal/下的audio_hw.c,修改内容:
https://blog.csdn.net/lingzhou0909/article/details/148433086
RK3576 Android14 DMIC调制
使用tinycap工具来录音,如下
tinycap /sdcard/rec.wav -D 1 -d 0 -c 2 -r 44100 -b 16 -p 1024 -n 3
https://blog.csdn.net/qq_38312843/article/details/124868449
RK声卡调试
cat /proc/asound/cards
ls -l /dev/snd/
tinyplay /sdcard/test44.wav -D 0 -d 0 -p 1024 -n 3
hardware/rockchip/audio/tinyalsa_hal/codec_config/rt5640_config.h
【付费】
https://blog.csdn.net/radianceblau/article/details/64125411
linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一
https://blog.csdn.net/lf12345678910/article/details/102497454
tinyplay 声卡播放
https://blog.csdn.net/wenjin359/article/details/83006820
tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)
/dev/snd/pcmC*
vendor/brand/kernel/linaro/sound/core/init.c
snd_card_create
vendor/brand/kernel/linaro/sound/usb/card.c
snd_usb_audio_probe
root@:/ # cat proc/asound/cards
0 [No00 ]: brand ALSA Drv - brand MAD No.00
brand MPEG Audio Decoder No.00
root@:/ # tinypcminfo -D /proc/asound/cards
Info for card 0, device 0:
PCM out:
root@:/ # tinyplay mnt/usb/17EC-1152/file.wav -D 0 -d 2 -n 2
//tinyplay mnt/usb/17EC-1152/file.wav -D 0 -d 3 -n 2
root@:/ # ls -al dev/snd/pcm*
crw-rw---- system audio 116, 24 2007-01-01 20:00 pcmC0D0c
crw-rw---- system audio 116, 16 2007-01-01 20:00 pcmC0D0p
crw-rw---- system audio 116, 25 2007-01-01 20:00 pcmC0D1c
crw-rw---- system audio 116, 17 2007-01-01 20:00 pcmC0D1p
crw-rw---- system audio 116, 18 2007-01-01 20:00 pcmC0D2p
crw-rw---- system audio 116, 19 2007-01-01 20:00 pcmC0D3p
【付费】
https://wenku.csdn.net/answer/407dbnsft2
rk平台怎么调试nau8822 - CSDN文库.mhtml
https://blog.csdn.net/weixin_43245753/article/details/123915015
Rockchip RK3588 kernel dts解析之音频模块
https://bbs.16rd.com/thread-584429-1-1.html
[瑞芯微RK资料] 瑞芯微RK3328/RK3366/RK3368/RK3399平台Audio开发指南
2.2.4 声卡调试
1. 通过如下命令确认声卡是否注册成功
root@rk3366:/ # cat /proc/asound/cards
0 [rockchiprt5640c]: rockchip_rt5640 - rockchip,rt5640-codec
rockchip,rt5640-codec
root@rk3366:/ # ls -l /dev/snd/
crw-rw---- system audio 116, 2 2013-01-18 08:51 controlC0
crw-rw---- system audio 116, 4 2013-01-18 08:51 pcmC0D0c
crw-rw---- system audio 116, 3 2013-01-18 08:51 pcmC0D0p
2. 通过命令行播放录制调试声卡:
播放:一般播放 1khz 0db 正弦波,然后在 codec 输出端示波器简单测量是否失真,杂音,然后再使用音频分析仪测试指标。
root@rk3366:/ # tinyplay
Usage: tinyplay file.wav [-D card] [-d device] [-p period_size] [-n n_periods]
|root@rk3366:/ # tinyplay /sdcard/test44.wav -D 0 -d 0 -p 1024 -n 3
Playing sample: 2 ch, 44100 hz, 32 bit
......
https://blog.csdn.net/2301_76587520/article/details/145768380?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-8-145768380-blog-106573423.235^v43^pc_blog_bottom_relevance_base8&spm=1001.2101.3001.4242.5&utm_relevant_index=11
开发板适配之SAI i.MX6ULL NAU88C22【驱动driver + DTS】
SAI音频接口只是传输音频数据的数字接口,所以这些音频编解码的工作需要一个专有的编解码芯片来完成,ELF 1使用的是NAU88C22芯片,NAU88C22可连接mic和扬声器或耳机用于录音和播放声音。i.MX6ULL使用I2S总线与NAU88C22进行音频数据的传输,I2S(Inter—IC Sound)总线,又称集成电路内置音频总线,是Philips公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专门用于音频设备之间的数据传输,广泛应用于各种多媒体系统。
https://www.elecfans.com/d/6382666.html
RK3588核心板多媒体功能一览
先在EVM-RK3588底板接好MIC设备,再执行下面指令;采集声音 10 秒,并且保存为 wav 格式。
$ arecord -D default:CARD=rockchipnau8822 -d 10 -f cd -t wav test1.wav
https://bbs.elecfans.com/jishu_2477148_1_1.html
[活动] 【ELF 2学习板试用】05 ASoC中的machine class