This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TLV320AIC3101: page1的寄存器无法写入正确的值

Part Number: TLV320AIC3101
Other Parts Discussed in Thread: TLV320AIC3104,

你好:

如题,我们想开启高通滤波器,需要在register 65和register 72分别写入相应的值,但是读出来的值是错误的,具体如下图所示。

看SPEC65和72的值应该是没超出范围的,所以不太明白是什么原因。期望回复,谢谢

  • 您好,

    您是按照下面顺序启用滤波器吗

    1. 加载系数 N0, N1, D1 to Page 1 / Register 65 - 70 and Page 1 / Register 71 - 76

    2. 选择可编程系数 (Go to Page 0 / Reg 107, and Set D7 = 1 and D6 = 1)

    3. 启用ADC高通滤波器 ( Go to Page 0 / Register 12, you can set D7-D6 to 01, or 10, or 11). 

  • 你好,

    是的,我是完全按照下面顺序操作的。目前的情况是,值可以写进去了,但是有些值必须写两遍(比如register65,第一次写0x7e读成ox7f,第二次可以正确读出来)。但是,我发现按这个操作开启高通滤波器,噪声反而明显变大了(在我另外提的一个问题,在EVM上也有类似情况:download完N0\N1\D1系数,点击开启ADC的时候,噪声反而变大了)。

    因此,我的疑问是:1)要如何才能知道高通滤波器是否正确开启,我检查了好几遍寄存器,确认值是改好了的;2)能否提供个默认的N0\N1\D1的值给我们试一下,因为我不确定我算出来的对不对,如下图所示请帮忙看下;3)如果是我们设置的不对,导致无法开启高通滤波器,有没有可以排查的方向。

    期望回复,谢谢

  • 读取寄存器值仅是读取滤波器系数寄存器值时需要写2遍才可以,还是其他的寄存器也是这种情况?用示波器看下I2C通信波形是否存在干扰或其他异常?

  • 读取滤波器系数寄存器值时需要写2遍才可以,其他的寄存器没出现这种情况

  • TIBQ工具生成的应该是正确的系数,加载系数后,您是否配置的是 page 0, register 12, bits D7-D4 ,因为我上面回复落掉了D4-D5

    使用默认系数的话,是将寄存器 page 0 register 107, bit D7-D6设置为00

    您可以用示波器检查I2C通信波形吗,以查看为什么需要写入2遍,以确保通信波形没有问题,确保写入正确

  • 1)我使用TIBQ计算出来的系数,应该就不用默认系数了吧,那么page 0 register 107, bit D7-D6我是设置为11的。

    2)page 0, register 12, bits D7-D4这个跟我计算出来的N0N1D1系数是不是矛盾的呀,这不是根据Fs来确认了Fc吗,那我N0N1D1系数本来也是用来确认Fc的吧

    3)目前的情况就是,能正确读出值,但是开启高通滤波器的指令只到第二步(就是配置107)就生效了,第三步(就是配置12)噪声会明显变大。

  • 1、

    2)能否提供个默认的N0\N1\D1的值给我们试一下,因为我不确定我算出来的对不对,

    使用默认系数的话,是将寄存器 page 0 register 107, bit D7-D6设置为00

    2、关于page 0, register 12, bits D7-D4,请忽略此寄存器中的-3dB频率选择,因为在可编程情况下,实际-3dB频率由系数决定。

    3、

    但是开启高通滤波器的指令只到第二步(就是配置107)就生效了

    就生效了,是什么意思?有什么现象?

  • 使用默认系数的话,是将寄存器 page 0 register 107, bit D7-D6设置为00

    不想使用默认系数,所以我在TIBQ上勾选了200Hz的High pass Filter,计算出来的系数是N0=7E32,N1=81CE,D1=7C66;

    就生效了,是什么意思?有什么现象?

    我们目的是想降风噪。我在机器上先录一段声音,然后通过指令将N0,N1,D1写进去,然后再page 0 register 107, bit D7-D6设置为11,到这一步,录出来的声音就被过滤掉一些了,所以我认为是生效了。然后按照指引再去配置page 0, register 12, bits D7-D4时,录出来的声音反而更大了,甚至比一开始还打。

  • 关于page 0, register 12, bits D7-D4,请忽略此寄存器中的-3dB频率选择,因为在可编程情况下,实际-3dB频率由系数决定

    你好,这句话可以理解为page 0, register 12, bits D7-D6,D5-D4不管是设置成01、10、11都没影响吗?都是由系数决定。

     

  • 您可以把您录的声音和寄存器配置发给我吗?

  • 可以的,请帮忙看下。

    目的:开启高通滤波器,降低风噪

    1,使用TIBQ计算出200Hz高通滤波器对应的系数:N0=0x7E32、N1=0x81CE、N0=0x7C66

    2,通过串口连接方式,使用secureCRT发送指令开启高通滤波器

    1)写page1
    skl_device -P "0x00,0x01;"
    2)加载系数 register left65-70 L channel 200Hz
    skl_device -P "0x41,0x32;0x42,0x7e;" N0
    skl_device -P "0x43,0xce;0x44,0x81;" N1
    skl_device -P "0x45,0x66;0x46,0x7c;" D1
    3)写page0
    skl_device -R "0x00,0x00;"
    4)选择使用可编程系数 register 107
    skl_device -R "0x6b,0x80;" L channel
    5)启动滤波器 register 12
    skl_device -R "0x0c,0xc0;" L channel

    ps:我现在想实现L、R ADC分别对应两个不同位置的mic,做到一个mic开启HPF,另外一个可以不开HPF,

    所以这个指令我是把L channel的系数配置了上去,R channel的没有。但目前没有实现。

    3,将录的声音放到goldwave查看

  • 对于这个问题,我咨询了美国的资深工程师,他说“

    If loading the coefficients activated the user HPF then ignore the last step.

    Likely it automatically enables it.”

    如果加载系数激活了用户的高通滤波器,那么就忽略最后一步。很可能它会自动启用它。

  • 你好,这句话可以理解为page 0, register 12, bits D7-D6,D5-D4不管是设置成01、10、11都没影响吗?都是由系数决定。

    关于您的这个问题,我是看了下面链接FAQ才回复您的,这个FAQ是关于产品TLV320AIC3104的,但是我认为TLV320AIC3101的滤波器是基于同样的原理的,因此其中的最后一句话“lease ignore the -3dB frequency selection in this register, because in the programmable case, the real -3dB frequency is determined by the coefficients.”也适用于TLV320AIC3101。

    https://e2e.ti.com/support/audio-group/audio/f/audio-forum/773075/faq-tlv320aic3104-how-do-you-program-the-aic3104-1st-order-hp-filter?tisearch=e2e-sitesearch&keymatch=%5BFAQ%5D%20TLV320AIC3104%20How%20do%20you%20program%20the%20AIC3104%201st%20order%20HP%20filter#

  • 我想请问下有没有关于TIBQ的使用指南,我算出来的系数感觉逻辑是不对的。

    比如我在同个环境下测试,分别开启100Hz、200Hz、400Hz、600Hz、1000Hz的高通滤波器,

    但结果是混乱的,开启600Hz HPF的时候,噪声甚至更大了。

    我在论坛能找到的资料好像没有介绍开启ADC High pass Filter的 ,只有N0、N1、D1三个系数的,

    能帮忙协助下嘛。谢谢

  • 好的,我去确认下您的这个问题

  • 我想请问下有没有关于TIBQ的使用指南,我算出来的系数感觉逻辑是不对的。

    比如我在同个环境下测试,分别开启100Hz、200Hz、400Hz、600Hz、1000Hz的高通滤波器,

    但结果是混乱的,开启600Hz HPF的时候,噪声甚至更大了。

    对于您的这个问题,我想确认下,您在以上几个截止频率操作时,您是否忽略了最后一步?因为根据美国工程师的反馈,滤波器很可能它会自动启用它。

  • 是的,以上几个截止频率操作的时候,我都是配置完register 107就启动了,没有进行配置register 12这一步。

    我在TIBQ上计算出N0=0x7E32,然后我把32写到register 65,7E写到register 66(left channel);

    同理,N1=81CE,我把CE写到register 67,81写到register 68(left channel);

    这样对不对呢?

    寄存器配置的指令我上次已经发出来啦

  • 这里反了,register 65是高8位,register 66是低8位,7E写到register 65,32写到register 66;

    系数N1、D1同样,如下datasheet截图:

    我估计上述问题应该是这里的问题,您重新操作下看是否解决问题?

  • 我都试过了,一开始就是按7E写到65,32写到66这个顺序的,但发现实际录出来的声音反而被放大了。

    然后我才试的把7E32分开反过来写入,这时候就是有滤波的效果的。我不太明白是怎么回事。实际效果如下图1所示,声音变小了一些。

    我现在的问题就是,按照TIBQ计算出来的N0、N1、D1系数,开启的滤波效果是很不一样的。实际效果如下图2所示.

    另外我注意到一个现象,配置register 107以后,录的风声会变小,但好像是整体变小的(信号的毛刺还在)。

    然后配置register12以后,录得风声变得更大了,但是信号的毛刺没了。具体请参考图1。谢谢

     图1

     图2

  • 首先请按照datasheet 中要求的MSB 和LSB (即高8位和低8位)对应的寄存器地址配置寄存器;

    图2 您是按照正确的高低8位寄存器地址配置的效果图吗?如果是的话,那么是不是都没有进行配置register 12这一步?如果是的话,您可以附上上面对应的截至频率的滤波器系数吗

  • 如上图所示,是按照MSB 和LSB (即高8位和低8位)对应的寄存器地址配置寄存器。

    没有配置register 12这一步,使用TIBQ计算出来的对应的截至频率的滤波器系数如图所示。

    normal状态下滤波器地址也有值:N0=7FEA、N1=8016、D1=7FD5,默认寄存器register 12是打开的,但是register 107没有调用,显示0x00

  • 您将产生的N1、D1除以2,然后配置看效果怎样

    结果如图所示,录的声音甚至更大了些。

    我想知道如何确定自己已经成功开启了HPF呢?有没有哪里可以查看得到?

    因为在试验过程中有时候发现刚把N0\N1\D1系数输进去,还没配置107寄存器,它录得声音已经降下来了。

    谢谢

  • 首先请按照datasheet 中要求的MSB 和LSB (即高8位和低8位)对应的寄存器地址配置寄存器

    补充一下,现在已经是按这个MSB和LSB的顺序配置寄存器了。

    我在想有没有必要试下反过来的?毕竟之前按LSB、MSB这种格式是可以降噪的

  • hello,我再补充一下,因为我们设备上一开始已经有了一套系数N0\N1\D1,然后register 107没配置(显示0x00),register 12配置了(显示0xf0)。

    然后我发现现在的情况是,不管系数是什么(是我输入的也好,原本的系数也好),只要将register 107配置成0xc8(使系数生效),或者,将register 12先配置成0x00再配置成0xf0。他的结果都是实时录出的声音会变大。

    这让我怀疑这个开启高通滤波器的方法,还是说我们通过串口这种方式去实现比较难?要写成代码去实现嘛

  • 我先确认下TIBQ的使用方法

  • 还是说我们通过串口这种方式去实现比较难?要写成代码去实现嘛

    您这里说的串口具体是什么串口呢?TLV320AIC3101 控制接口是I2C,我不知道您是怎样通过串口配置寄存器的,不确定是不是这里的问题?

  • 我们是通过一个串口板连接到待测设备的DSP,然后通过指令修改寄存器,比如skl_device -P "0x41,0x32;0x42,0x7e;" ,就是在register写入N0=0x7e32。

    这个

  • 加载测试驱动:modprobe tlv320aic3xxx-core-interface


    查看所有寄存器:skl_device -A

    修改寄存器:skl_device -P "0x41,0x32;0x42,0x7e;"  //在register写入N0=0x7e32

    刚刚没写清楚,我觉得这种方式应该是没问题的,因为读写寄存器都是正常的。

    现在就是感觉HPF这一块有问题,他这个系数不知道怎么计算的

  • 我找到了一个TIBQ文档:

    1273.TIBQ.pdf

  • 我看了这个文档,那说明我们之前操作没问题呀。计算出来的系数没问题,寄存器位置没问题,配置完以后确实值也已经写入了。

    为啥效果会是反的呢?开启滤波器以后风声应该是会变小的呀。我将数值反过来输入风声又能变小,感觉不符合逻辑。

    请问之前有没有人咨询过关于开启高通滤波器的问题呢?

  • 我没有遇到过,我在E2E论坛检索了很多类似的帖子,没有人反馈说是您描述的这种现象。

    我建议您使用I2C控制接口去配置寄存器,看是否还是这种现象?

  • 我们其实就是通过I2C配置寄存器的,因为codec 没有串口,就一个I2C配置寄存器。

    我们的DSP就是一个host,通过I2C控制 codec。

    另外,像0x7e32这数值,你确定是按MSB(0x7e)在前,LSB(0x32)在后这样输入是吧?

    因为我反过来输入是有效的。所以想再确认下

  • 寄存器高低字节反过来输入是完全有效的吗?或者说不管在什么情况下都是有效的?

  • 并不完全是,我试了将寄存器高低字节反过来写入,发现100、200、400、1000Hz是有效降低了,但是600Hz反而会升高,奇怪....

    这是我今天使用200Hz的系数高低字节反过来输入验证的结果(TEST FW)就是输入了滤波器系数的,请参考下。

    每一次试都是100%生效的。

     play song

     play voice

  • 我去确认下,TIBQ生产的滤波器系数是不是直接写入,还是需要怎样的调整。

  • hello,请问滤波系数的问题是否有消息呢?

    另外想提个新问题,我们想打开AGC功能,但是看3101的data sheet有点不太明白。

    请问有没有别的文档或者案例可以参考一下呢?我们使用的是tlv320aic3101,感谢

  • TIBQ生成的滤波器系数可以直接写入寄存器,不需要做调整。

    关于新的问题,建议您重新发帖,以便于其他客户检索,谢谢~

  • 好的,那MSB和LSB呢?为什么要调过来才会生效

  • 如您之前测试所述,并不是100%生效的。我去问问100Hz、200Hz、400Hz、600Hz、1000Hz的高通滤波器对应的N0、N1、D1系数应该怎样产生,对应的结果是什么。

  • 我收到的回复如下:

    Attached is an apps. note that has more detail on configuring the coefficients.

    Section 7 talks about configuring the codec.

    https://www.ti.com/lit/an/slaa447/slaa447.pdf

    关于这个高通滤波器的配置,如果您存在疑问,我建议您自己将问题发布在E2E英文技术论坛上,将由资深的英文论坛工程师为您提供帮助。

    英文论坛对应子论坛链接:https://e2e.ti.com/support/audio-group/audio/f/audio-forum