硬汉嵌入式论坛

 找回密码
 立即注册
查看: 595|回复: 13
收起左侧

[SAI/I2S] 请教下大神,wm8978出现破音是怎么个情况呀 ? 另外波特率需要减半播放声音速度才基本正常 ?

[复制链接]

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
发表于 2023-6-3 12:22:39 | 显示全部楼层 |阅读模式
本帖最后由 hpdell 于 2023-6-3 14:39 编辑

1. 请教下大神,wm8978出现破音是怎么个情况呀 ?

2. 采样率速度需要减半播放声音速度才基本正常 ?

   如 44.1k 在播放时需要设置为 44.1/2
       48K   在播放时需要设置为 48/2

3. 这些都是神马原因造成的 ???  是主控没有配置对吗 ??


4. 貌似用耳机声音还不错,用喇叭就有破音感,这个是怎么一回事 啊 ?  是 8978直接驱动喇叭的功率不够吗 ?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-6-3 15:36:01 | 显示全部楼层
破音是一直都有吗,还是仅调节的时候有。
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
 楼主| 发表于 2023-6-3 15:39:07 | 显示全部楼层
eric2013 发表于 2023-6-3 15:36
破音是一直都有吗,还是仅调节的时候有。

一直都有, 貌似播放音乐的某些音频频段就会出现,

另外播放采样率比较快,需要 /2 的话播放声音的速度就正常, 这个是什么情况呀 ?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-6-3 16:00:24 | 显示全部楼层
hpdell 发表于 2023-6-3 15:39
一直都有, 貌似播放音乐的某些音频频段就会出现,

另外播放采样率比较快,需要 /2 的话播放声音的速度就 ...

44.1K不快,我之前做的这个播放器192K都可以的。

是不是你的SAI DMA中断里面做太多东西了,可以参考下我这个,我这个是做了个DMA双缓冲,中断里面全部采用寄存器方式加快速度。

https://www.armbbs.cn/forum.php?mod=viewthread&tid=17330




回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
 楼主| 发表于 2023-6-3 16:34:47 | 显示全部楼层
本帖最后由 hpdell 于 2023-6-3 16:43 编辑
eric2013 发表于 2023-6-3 16:00
44.1K不快,我之前做的这个播放器192K都可以的。

是不是你的SAI DMA中断里面做太多东西了,可以参考下 ...

牛鼻呀,
wm8978.png
资料介绍,最高时 48K, 那这个 192 是怎么实现的呀 ?


刚刚仔细听了一下我的喇叭貌似破音一直都有,耳机则一直都没有

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-6-5 01:07:56 | 显示全部楼层
hpdell 发表于 2023-6-3 16:34
牛鼻呀,

资料介绍,最高时 48K, 那这个 192 是怎么实现的呀 ?

我这里只是处理的SAI的音频流是192KHz,WM8978的DAC是最大的48KHz输出。

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
* 特别说明:
*   SAI_CK_A和SAI_CK_B的时钟可以由PLLSAI或者PLLI2S提供,由于LCD的LTDC要使用PLLSAI,这里WM8978使用PLLI2S。
*   --------------------------------------
*   本工程 HSE_VALUE = 8MHz,PLL_M = 8。
*   第1步: 先获取PLLI2SCLK
*   PLLI2SCLK = (HSE_VALUE / PLL_M) * PLLI2S_N) / PLLI2S_Q
*
*   第2步: 经过PLLI2SDiv_Q分频获得SAI-A和SAI-B。
*   SAI_CK_A和SAI_CK_B = PLLI2SCLK / PLLI2SDiv_Q
*
*   第3步: 
*   如果 MCKDIV[3:0] 不等于 0000,则 MCLK_x = SAI_CK_x / (MCKDIV[3:0] * 2)
*   如果 MCKDIV[3:0] 等于 0000,则 MCLK_x = SAI_CK_x
*   此时MCLK_x的输出就是SAI接口的MCLK的输出频率,即主时钟频率。
*   另外采样率跟主时钟频率的关系是MCLK/FS = 256,采样率通过SAI接口的SCK引脚输出。
*  --------------------------------------------------------------------------------
* Note:误差率 =  abs(实际采样率-目标采样率)/目标采样率 * 100%
*
*  采用下面的参数配置采样率误差如下:
*  目标采样率(Hz)   实际采样率(Hz)       误差率
*   8000                8000                0.0000%
*	16000             16000.60096           0.0037%
*	32000             32001.20192           0.0037%
*	48000             47991.07142           0.0186%
*	96000             95982.14285           0.0186%
*	192000            191894.53125          0.0549%
*
*	11020             11024.8766            0.0011%
*	22050             22049.7532            0.0011%
*	44100             44099.5065            0.0011%
*
********************************************************************************************************* 
*/
typedef struct
{
	uint32_t Fs;
	uint16_t PLLI2S_N;    /* 范围可以取192--432 */
	uint16_t PLLI2S_Q;    /* 范围可以取2--15    */
	uint8_t  PLLI2S_DivQ; /* 范围可以取1--32    */
	uint8_t  MCKDIV;      /* 范围可以取0--15    */
}PLLI2SPSC_T;

const PLLI2SPSC_T g_tPLLI2SPSC[]=
{ 
	//参数范围192-432   2-15       1-32           
    /* Fs  PLLI2S_N,  PLLI2S_Q  PLLI2S_DivQ  MCKDIV */
	{8000 ,  256,       5,         25,          0},  /* MCLK = 2.048MHz,   实际采样率 = 8000KHz    */
	{16000,  213,       2,         26,          0},	 /* MCLK = 4.096153MHz,实际采样率 = 16000.6KHz */
	{32000,  213,       2,         13,          0},	 /* MCLK = 8.192307MHz,实际采样率 = 32001KHz   */
	{48000,  258,       3,         7,           0},	 /* MCLK = 12.28571MHz, 实际采样率 = 47991KHz   */
	{96000,  344,       2,         7,           0},  /* MCLK = 24.57142MHz, 实际采样率 = 95982KHz   */
	{192000, 393,       2,         4,           0},  /* MCLK = 49.125MHz,   实际采样率 = 191894KHz  */
	
	{11020,  429,       2,        19,           2},  /* MCLK = 2.822368MHz, 实际采样率 = 11.024KHz */ 
	{22050,  429,       2,        19,           1},  /* MCLK = 5.644737MHz, 实际采样率 = 22.049KHz */
	{44100,  429,       2,        19,           0},  /* MCLK = 11.28947MHz, 实际采样率 = 44.099KHz */
}; 
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-6-5 01:08:23 | 显示全部楼层
然后破音问题的话,我这里有过记录。

WM8978上电破音解决办法,早在V6的综合Demo里面已经提供
https://www.armbbs.cn/forum.php? ... 4038&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
 楼主| 发表于 2023-6-5 12:00:19 | 显示全部楼层
eric2013 发表于 2023-6-5 01:08
然后破音问题的话,我这里有过记录。

WM8978上电破音解决办法,早在V6的综合Demo里面已经提供

感谢感谢啊,
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
 楼主| 发表于 2023-6-5 14:42:48 | 显示全部楼层
eric2013 发表于 2023-6-5 01:07
我这里只是处理的SAI的音频流是192KHz,WM8978的DAC是最大的48KHz输出。

[mw_shl_code=c,true]/*

你好,你这个 192k 的采样率,是只配置了 mcu 主控端吗 ? wm8978 芯片就没有进行采样率的配置,对吗 ?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-6-5 15:02:17 | 显示全部楼层
hpdell 发表于 2023-6-5 14:42
你好,你这个 192k 的采样率,是只配置了 mcu 主控端吗 ? wm8978 芯片就没有进行采样率的配置,对吗 ?

WM8978使用的默认最大48KHz。上电默认配置。主控端配置的192KHz
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
 楼主| 发表于 2023-6-5 15:52:41 | 显示全部楼层
eric2013 发表于 2023-6-5 15:02
WM8978使用的默认最大48KHz。上电默认配置。主控端配置的192KHz

明白了,感谢感谢啊,我之前一直以为是 mcu 与 8978 端必须配置一致才行,原来是我自己搞混乱了呀,
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
 楼主| 发表于 2023-6-5 17:20:31 | 显示全部楼层
eric2013 发表于 2023-6-5 15:02
WM8978使用的默认最大48KHz。上电默认配置。主控端配置的192KHz

另外再请教下,如果需要 放音 / 录音,功能

1. 设置 mcu 为主, 8978 为从
2. 设置 8978 为主,mcu 为从
3. 上述 2点中,是不是只需要其中任何一个方案都可以 ? 只需保证他们其中一个做主,另外一个就必须为从的 关系 就可以了 啊 ???
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2023-6-5 17:58:09 | 显示全部楼层
hpdell 发表于 2023-6-5 17:20
另外再请教下,如果需要 放音 / 录音,功能

1. 设置 mcu 为主, 8978 为从

对,一般我们都是将MCU设置为主。
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
 楼主| 发表于 2023-6-6 17:05:28 | 显示全部楼层
eric2013 发表于 2023-6-5 17:58
对,一般我们都是将MCU设置为主。

感谢感谢啊,我捣鼓看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 23:04 , Processed in 0.211825 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表