hotsoil 发表于 2025-8-1 22:20

求助——9039pro的软控设置问题

本帖最后由 hotsoil 于 2025-8-1 22:23 编辑

   上半年根据 jacksl528 大神的9039q2m设计,做成了软控的解码器。感觉搞懂了9039的软件参数,于是进一步做了一个双9039pro的解码器。硬件没有问题,拆下朋友的品牌解码器的软控模块,接上可以完美出声。但是自己编程控制芯片时不出声。请教各位大神哪里出问题了啊。
   我现在具体的设置如下:(两个9039芯片除了地址,其余设置一样,为了表述简洁,只写其中一个)
1、配置0寄存器,9039pro有8个输入信号通道和8个DAC输出通道,把8个通道的输出对应成立体声的两个通道(ch1/2 interpolation path)信号输入:
      ES9039_WriteByte(ES9039_ADDR1,0,46); //46=00101110

2、配置1寄存器,1寄存器的功能个9039q2m一样,同样配置成进入异步模式,同时启用S/PDIF、DoP和DSD解码功能,0xBf=1011 1111
        ES9039_WriteByte(ES9039_ADDR1,0x01,0xBf);

3、配置42寄存器,把用于同轴和光纤输入的引脚GPIO8(同轴)和GPIO7(光纤)设置为输入模式
      ES9039_WriteByte(ES9039_ADDR1,42, 192);   //192=11000000

4、配置59寄存器, 限定TDM帧结构为2时隙,适用于立体声。9039pro的模式选择里没有I2S输入。得把将8通道的TDM输入改为I2S输入。
      ES9039_WriteByte(ES9039_ADDR1,59,1);

5、配置64-71寄存器。这些寄存器对应的是TDM输入的8个通道,需要把它们对应成立体声的2个通道。
      ES9039_WriteByte(ES9039_ADDR1,64,0);       ////数据线1,时隙1
        ES9039_WriteByte(ES9039_ADDR1,65,1);      //数据线1,时隙2
        ES9039_WriteByte(ES9039_ADDR1,66,0x20);       //数据线2,时隙1
        ES9039_WriteByte(ES9039_ADDR1,67,0x21);      //数据线2,时隙2
        ES9039_WriteByte(ES9039_ADDR1,68,0x40);       //数据线3,时隙1
      ES9039_WriteByte(ES9039_ADDR1,69,0x41);      //数据线3,时隙2
        ES9039_WriteByte(ES9039_ADDR1,70,0x80);      //数据线4,时隙1
         ES9039_WriteByte(ES9039_ADDR1,71,0x81);       //数据线4,时隙2
6、配置89寄存器,根据输入信号源的选择,把S/PDIF输入源设为GPIO7(光纤)或GPIO8(同轴),目前设为了同轴。
   ES9039_WriteByte(ES9039_ADDR1,89, 0xF4);      //配置S/PDIF输入源为GPIO8,二进制为11110100,并设置IIR滤波器带宽为默认值

7、设置57号寄存器,选择输入信号源。
    ES9039_WriteByte(ES9039_ADDR1,57,ES9039.input_selection);
       就做了以上设置,其余为9039默认。在9039q2m里这些足够出声了,可以9039pro不出声,示波器显示dac的各个通道都没有模拟信号输出。请教高手上面设置是否正确,还缺哪些设置啊?谢谢



补充内容 (2025-8-2 20:53):
还有音量设置,调试期把音量设置成了最大,向74到81号寄存器里都写入了0

丰年好大雪 发表于 2025-8-2 18:06

57号写入C1试试

hotsoil 发表于 2025-8-2 20:26

丰年好大雪 发表于 2025-8-2 18:06
57号写入C1试试

谢谢!换成c1的自动选择输入信号也不行。

ouco 发表于 2025-8-2 20:57

从基础代码找找原因,主要是I2C通讯包括时序等代码有没有问题,做法是向某些寄存器写入数据,然后把它读出来显示在屏幕上,看看正确否?

hotsoil 发表于 2025-8-2 21:04

本帖最后由 hotsoil 于 2025-8-2 21:59 编辑

ouco 发表于 2025-8-2 20:57
从基础代码找找原因,主要是I2C通讯包括时序等代码有没有问题,做法是向某些寄存器写入数据,然后把它读出 ...

谢谢!都测试了,大多寄存器都在屏幕上都读了一遍。这个控制模块和程序是在已经正常使用的9039q2m解码器上移植的。mcu(stm32f030c8)和周边(液晶、EC11、红外)都和9039q2m接的一样,每个引脚的0和1控制都在屏幕上显示过,基本功能都没问题,就是怀疑9039pro设置的问题。相比9039q2m,ES9039PRO默认工作在 TDM模式(而非标准I2S),通过 FSCLK(帧同步时钟)相位偏移 实现声道分离,设置复杂了很多。差一点设置也出不来声。品牌机的液晶控制模块接上就能用,证明还是芯片的设置问题。

丰年好大雪 发表于 2025-8-2 23:49

没图没二者寄存器代码对比,不敢跟着你瞎猜,折腾一通发现reset脚没上拉,纯浪费感情了。
页: [1]
查看完整版本: 求助——9039pro的软控设置问题