当前位置: 首页 > news >正文

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


http://www.xdnf.cn/news/1197379.html

相关文章:

  • 【设计】设计一个web版的数据库管理平台后端(之二)
  • 29.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--用户配置服务
  • Java中排序规则详解
  • solidity从入门到精通 第六章:安全第一
  • vmware虚拟机中 ubuntu 20.04通过nat设置静态ip(固定ip)
  • Java学习-------桥接模式
  • 文件权限标记机制在知识安全共享中的应用实践
  • 通信名词解释:I2C、USART、SPI、RS232、RS485、CAN、TCP/IP、SOCKET、modbus
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的人格品牌化实现路径研究
  • Linux-文件与文本管理
  • 嵌入式软件面试八股文
  • Photo Studio PRO 安卓版:专业级照片编辑的移动解决方案
  • STM32-USART串口实现接收数据三种方法(1.根据\r\n标志符、2.空闲帧中断、3.根据定时器辅助接收)
  • 将远程 main 分支同步到 develop 分支的完整指南
  • 深入理解指针(三)
  • 用 Flask 打造宠物店线上平台:从 0 到 1 的全栈开发实践
  • 2024-2025华为ICT大赛中国区 实践赛网络赛道(高教组)全国总决赛 理论部分真题+解析
  • KNN算法实现图片的识别
  • 实战演练1:实战演练之命名实体识别
  • JavaScript数组去重性能优化:Set与Object哈希表为何效率最高
  • 俄罗斯方块游戏开发(面向对象编程)
  • 通过v4l2,采集视频,FFmpeg编码压缩封装视频(三)
  • Python-初学openCV——图像预处理(三)
  • 01人工智能中优雅草商业实战项目视频字幕翻译以及声音转译之底层处理逻辑阐述-卓伊凡|莉莉
  • Python 数据分析(四):Pandas 进阶
  • macOS配置 GO语言环境
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博舆情分析实现
  • Linux 系统网络配置及 IP 地址相关知识汇总
  • 八股文Kafka学习
  • 哈希表应用(map,set共同作用)