火龙138 发表于 2026-4-29 15:16

支持楼主的回归

shl2026m 发表于 2026-4-29 17:31

今天报到

shl2026m 发表于 2026-4-29 17:34

楼主的贴子 ,拜读后,受教

greendiy 发表于 2026-5-3 01:57

谢谢楼主分享

Angle145 发表于 2026-5-7 15:42

谢谢分享,学习一下

arbore 发表于 2026-5-7 18:15

过来学习。

cm641300 发表于 2026-5-7 22:47

很好的技术贴,感谢分享!

l812125 发表于 2026-5-9 16:36

想做9039 找到资料了

iHMZZL 发表于 2026-5-9 23:49


感谢分享!

vidiy 发表于 2026-5-15 13:41


感谢分享!

xutong 发表于 2026-5-19 19:22

伟大的楼主,谢谢分享

TABK 发表于 2026-5-29 00:40

发烧求败 发表于 2026-3-11 17:06
会写程序的都是高手

这种所谓程序都是小儿科。现在用ai写,这种驱动分分钟给你写出来。都是Vibe coding时代了。

xingfengyue 发表于 2026-5-29 11:30

源码都开源,楼主功德无量!!!!

fysy 发表于 2026-5-29 14:31

非常感谢!

hua626 发表于 2026-5-29 15:08

前来向高手学习!

eslei 发表于 2026-5-31 17:40



可惜 es9038q2m 的 programmable numerically controlled oscillator 这个高级功能 es9039q2m 欠奉了,真不知道 ess 的开发团队怎么想的,或者够功力用它的烧友太少了。












jacksl528 发表于 2026-6-1 10:25

eslei 发表于 2026-5-31 17:40
可惜 es9038q2m 的 programmable numerically controlled oscillator 这个高级功能 es9039q2m 欠奉了, ...

怎么? 难道你还想手动配置 PNCO?

eslei 发表于 2026-6-1 12:39

jacksl528 发表于 2026-6-1 10:25
怎么? 难道你还想手动配置 PNCO?




看明白的烧友不多,但一定有您,

snd_soc_component_write(component, ES9038Q2M_INPUT_CONFIG, iface);

        switch(params_rate(params))
        {
                case 8000:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x2D);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0x3E);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x05);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 11025:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0xB0);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0x39);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x07);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 16000:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x5B);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0x7C);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x0A);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 22050:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x60);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0x73);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x0E);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 32000:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0xB6);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0xF8);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x14);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 44100:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0xC1);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0xE6);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x1C);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 48000:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x10);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0x75);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x1F);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 88200:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x81);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0xCD);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x39);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 96000:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x21);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0xEA);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x3E);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 176400:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x02);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0x9B);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x73);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 192000:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x41);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0xD4);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x7D);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 352800:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x05);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0x36);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0xE7);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 384000:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x82);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0xA8);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0xFB);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
                        break;
                case 705600:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x09);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0x6C);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0xCE);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x01);
                        break;
                case 768000:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x05);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0x51);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0xF7);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x01);
                        break;
                case 1411200:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x12);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0xD8);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x9C);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x03);
                        break;
                case 1536000:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x0A);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0xA2);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0xEE);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x03);
                        break;
                default:
                        snd_soc_component_write(component, ES9038Q2M_NCO_0, 0x00);
                        snd_soc_component_write(component, ES9038Q2M_NCO_1, 0x00);
                        snd_soc_component_write(component, ES9038Q2M_NCO_2, 0x00);
                        snd_soc_component_write(component, ES9038Q2M_NCO_3, 0x00);
        }
        return 0;


这是 9038q2m 刚发布不久我为 100MHz crystal freq 计算的,一直用到现在。通过实测在驱动微调 lsb 可以获得接近绝对准确的 mck,还可以因应环境温度作适应。

这就是 diy 好玩之处。











碧小彬 发表于 2026-6-1 13:21

无私而强大的楼主!

jacksl528 发表于 2026-6-1 14:09

本帖最后由 jacksl528 于 2026-6-2 08:18 编辑

eslei 发表于 2026-6-1 12:39
看明白的烧友不多,但一定有您,

snd_soc_component_write(component, ES9038Q2M_INPUT_CONFIG, ...

多此一举~

你连在什么情况下 需要手动去配置NCO 数值都没玩明白。

ESS解码芯片的核心技术,HyperStream®Architecture是依存AUTO_FS_DETECT为开启状态的

算了吧, 你自己偷着乐就行了。




页: 1 2 3 4 5 6 7 [8] 9 10 11
查看完整版本: 高性能DAC芯片ES9039Q2M---软/硬控模式的应用经验