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.

[参考译文] TLV320AIC3268:对 mini-DSP&#39 进行编程

Guru**** 2530270 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1548466/tlv320aic3268-programming-the-mini-dsp-s

器件型号:TLV320AIC3268
Thread 中讨论的其他器件:PUREPATHSTUDIO

工具/软件:

我们仅使用 aic3268 设计了一个系统。 该系统需要将两条 32 位单声道 PCM 总线从 ASI2 和 ASI3 多路复用到 ASI1 上的 8 通道 TDM 总线。 也是在相反的方向上。 因此、两个通道从 ASI1 上 Din 的 TDM 到 ASI2 和 ASI3 的 DOUT。

发现对于此配置、我需要对一个或两个 mini-DSP 进行编程。 因此,在此期间,我有 purepathstudio 运行, aic3268 列在框架下。

但是我没有带 TAS1020B 的 USB-i2c 编程器或评估板。 评估板似乎已经停产。

我的问题是:如何在 aic3268 上对 mini-DSP 进行编程?

我确实有一个 EVAL-ADUSB2EBUZ 可用(也有 USB-i2c)。 此外、我还注意到了 https://e2e.ti.com/support/audio-group/audio/f/audio-forum/299026/ttk-reference-designs-for-audio-converters 上的 TK USBtoI2X 软件狗

我可以在任何地方订购这样的加密狗吗? 我可以自己设计吗? 我认为 TAS1020B 需要固件、在哪里可以找到它?

很抱歉有这么多的问题、但我想知道是否可能完成我的工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    我们的许多专家目前已离职、因此请允许下周前收到回复。

    此致、

    Garret

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    如果您有办法将 I2C 编程到芯片上、可以使用 PPS 生成一些 I2C 代码、然后进行刷写、而无需额外的硬件。 如果您转至 Build->Generate Code、它会在保存进程流的文件夹中创建一个文件、称为“base_main_Ratexx.cfg",“,其中、其中 Ratexx 是该流编译的采样率。 这是我们将在其他一些软件(例如 PurePath Console 或 CodecControl)上使用的常规.cfg 文件。 带有“>xx"的“的行是写入下一个寄存器的简写、如下所示:

    我不熟悉这款 USB I2C 板、但如果能够连接到 AIC3268 上的 SCL 和 SDA 线、则应该能够对 miniDSP 进行编程 — PPS 生成的.cfg 文件包含对器件 miniDSP 部分进行编程的代码。

    您能分享到目前为止的 PPS 图吗? 我很困惑、其中 ASI2 和 ASI3 多路复用到 ASI1 的位置是:我认为 miniDSP 或器件不会在 ASIS 之间传输 TDM 时隙、但我们可以将信号从一个 ASI 路由到另一个 ASI。

    如果您需要更多帮助、请告诉我。

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:
    感谢您的答复。

    最后一个问题是、我可以尝试使用转换器。 电路板上已经有一个 MCU。 因此、如果它不能与转换器配合使用、我始终可以通过 MCU 实现。 最后、 不管怎么说、它都必须这样做。

    我不熟悉您的音频编解码器、但我对您的 mini-DSP 编解码器非常陌生。 因此、我不确定是否使用了正确的元件。

    现在我还收到了消息:

    正在生成 base_main_rate44 的代码。 汇编...存储器类型用法:miniDSP_A_coeff:6、miniDSP_A_coeff0:1、miniDSP_A_coeff1:5、miniDSP_A_DATA:28、miniDSP_A_instr:57、 miniDSP_A_instr_alloc:57、miniDSP_a_Cycles:67、miniDSP_a_Cycles_alloc:67、miniDSP_D_coeff:6、miniDSP_D_coeff0:1、miniDSP_D_coeff1:5、 miniDSP_coeff2:0、miniDSP_D_DATA:12、miniDSP_D_instr:84、miniDSP_D_instr_alloc:84、miniDSP_D_CYCLES:36、 miniDSP_D_Cycle_alloc:36

    装配失败
    错误:aic_main.asm(–1):无法排列块、检查地址并重试

    此致、
    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    我尝试在这里重新创建您的流程,我注意到它没有失败时,“ Multi_Channel_Dig ..“ 是 4 个通道、但当我将它更改为 6 或 8 时、失败了。 这与 miniDSP(例如 IDAC/IADC)的估算时钟周期以及 SystemSettingsCode 命令中的默认时钟速率有关。 启用“SynchMode"后“后,后,我能够使其正确编译 — 这是一个重要设置,允许我们通过同时为 DAC 和 ADC 加电并同步时钟来在 DAC 和 ADC 之间传递数据、反之亦然。 这是通过一系列寄存器写入来完成的、默认情况下已经在 SystemSettingsCode 中。 如果您在这里需要更多的解释,请告诉我,但我希望这个编译和工作如您所期望的!!

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    非常好。 非常感谢。 现在、我有了带有寄存器值和 cfg 文件的 h 文件。 我是否正确理解写入顺序应该是:

    1->系统寄存器值

    2->miniDSP A 值

    3->miniDSP D 值

    我还看到一些 PLL 寄存器写入、但我想并非所有写入都是如此。  是否有方法使处理流程也包括所有时钟设置? 因为我仅将采样率配置为 48kHz。 我从未配置过任何时钟输入。 在 PCB 上、我有一个到 MCLK 引脚的 12MHz 时钟。

    流程中是否有其他我不知道的重要事项?

    这是正确的方法吗? 或者您认为没有 miniDSP 也可以实现吗?

    再次,非常感谢你到目前为止!

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    我认为这是非标准布线的正确方法。 我知道这很困难、但我们会让它发挥作用!

    cfg 文件应该包含 SystemSettingsCode 中的所有 PLL 设置、如果还有其他设置、则脚本开头的软件复位命令已将其软件复位为默认值。 是的,写入将遵循此顺序,然后在末尾有更多的代码(如系统设置代码中所指定)。 miniDSP A 和 D 值在“program_miniDSP_A"或“或 D 行中设置、如图所示、然后在 cfg 文件中的该位置生成代码:

    时钟输入将是任何默认值。 很可能是 MCLK、如果您发送系统设置代码、我可以为您验证。

    您是否能够使直通功能按预期工作? 这是几天我检查实验室,我最早可以做的是下周。 因此、请让我知道您的状态是什么、让它正常工作、我可以在这里提供线上帮助。

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    非常感谢。

    目前、我正在使用 PPS 创建的.h 文件、因为我还没有可以读取该文件并使用 I2C 转换器的工具。 我为 MCU 编写了一个 I2C 函数、用于写入三个结构体数组。

    1.写入  REG_Section_program[]

    2.写入  miniDSP_a_reg_Values[]

    3.写入  miniDSP_D_reg_Values[]

    4.我尝试做自己的 PLL 和时钟设置。

    5.仍需进行正确的 ASI 设置

    第 4 步、我这样做是因为我可以替换从 PPS 新创建的.h 文件。

    现在、我正在努力得到一些确认、表明编解码器中发生了一些事情。 我尝试将 DOUT1 配置为 CLKOUT、以检查来自 PLL 的时钟。  寄存器写入被确认。 我也可以正确读回它们。  另外、我尝试将 DOUT1 配置为 GPO、然后设置它、这是有效的。

    可能我错过了一些东西、我会继续尝试。

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    PLL 时钟的 DOUT1 现在正常工作。 这似乎是正确的时钟。 这仅用于测试。

    下一步是配置 ASI。

    会告诉您。

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    在此刻,我正在努力获得一个适当的时钟在 ASI 的。 DAC 时钟树配置似乎正确。 但是、ADC 时钟树不是。 NADC 和 mAdc 分频器之间的多路复用器似乎卡在接受 DAC_CLK 上。 我尝试为 12MHz 输入时钟和 48kHz 时钟配置时钟、如所示。

    然后我想,如果它可能与 PPS 中的同步功能有关。 但当我注释掉 PPS h 文件的写入内容时、ADC_CLK 仍来自 DAC_CLK。


    我的问题是:表 32 的价值在我的情况下是否正确? 另外、我是否还需要考虑数据表第 66 页图 58 中的“到 DAC miniDSP 时钟生成“和“到 ADC miniDSP 时钟生成“标签? 因为根据表 32、它们是否应该同步?

    期待收到您的回复。

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    首先、为什么您尝试以不同的方式设置 DAC 和 ADC 时钟? 要使 SynchMode 工作、我们需要 ADC 和 DAC 时钟相同、因此 miniDSP 时钟相同。 您可以在 PPS 的器件的帮助文件中看到:

    默认情况下、NADC 在 SystemSettingsCode 文件中处于断电状态。 您发布的图表中的时钟应该可以正常工作、但请确保遵循这些关于如何使处理器间工作的说明(又名 SynchMode)。 您可以在设置每一项时查看默认的系统设置代码文件、但我建议您只更改 48K 选项所需的部分、如下所示:

     

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    感谢您的答复。

    我这样做是因为表 32 这样说。 但是我不知道… 现在两个时钟是相同的。 在 ASI1-3 上也有正确的时钟。 只有 ASI 的 Din 和 dout 上仍然没有正确的信号。

    我现在拥有:

    ASI1、BCLK = 12.288MHz、WCLK = 48kHz (8CHn@32 位、DSP)

    ASI2、BCLK = 1.536MHz、WCLK = 48kHz (2chn@16 位 I2S)

    ASI3、BCLK = 1.536MHz、WCLK = 48kHz (2-CHn@16 位 I2S)


    然后尝试通过 DSP 从 ASI2 环回至 ASI2、但该功能尚未起作用。 现在尝试使用一个连接到所有输出的音调发生器来从中获取一些信息。 到现在为止没有成功...

    我附上了.cfg 和.h 文件、其中音调发生器连接到输出端。

    e2e.ti.com/.../6153.base_5F00_main_5F00_Rate48_5F00_pps_5F00_driver.he2e.ti.com/.../1777.base_5F00_main_5F00_Rate48.cfg

    从.h 文件中写入所有值后、我将在下面写入 PLL 和 ASI 的值。

        //make sure to be in he correct book and page
    	tlv_write(0,0x00);		//jump to page 0
    	tlv_write(127,0x00);	//jump to boek 0
    	tlv_write(0,0x00);		//jump to page 0 van boek 0
    
    	//setting up clock
    	tlv_write(60,0x80); //power up miniDSPA & D together
    
    	tlv_write(4,0x33); //adc/dac clk
    	tlv_write(5,0x00); //clkin				MCLK & Low PLL
    	tlv_write(6,0x91); //PLLP & PLLR		1 & 1
    	tlv_write(7,0x07); //PLLJ				7
    	tlv_write(8,0x06); //PLLD				1680
    	tlv_write(9,0x90); //PLLD
    	tlv_write(10,0x01); //PLL_CLKIN_DIV		1
    //	tlv_write(11,0x82); //NDAC				2
    
    	tlv_write(12,0x82); //MDAC				2
    	tlv_write(13,0x00); //DOSR				128
    	tlv_write(14,0x80); //DOSR
    
    	tlv_write(18,0x01); //NADC				power down
    //	tlv_write(18,0x87); //NADC				7
    //	tempval = tlv_read(18);
    
    	tlv_write(19,0x82); //MADC				2
    	tlv_write(20,0x80); //AOSR				128
    
    	tlv_write(11,0x87); //NDAC				7 and powerup at the end
    
    	//setting up ASI's
    	//ASI1
    	tlv_write(0,0x04);	//page4
    
    	tlv_write(1,0x38); 	//asi1 audio format			DSP/32bit/Dout not high imp
    	tlv_write(2,0x00);	//asi1 left chn offset
    	tlv_write(3,0x00); 	//asi1 right chn offset
    	tlv_write(4,0x26); 	//asi1 chn setup			DAC&ADC left & right chns
    	tlv_write(5,0x00); 	//asi1 adc bus format		Use R1 settings
    	tlv_write(6,0x00); 	//asi1 multipin				Data in & out single pins
    	tlv_write(7,0x01); 	//asi1 adc input ctrl		minidsp ADC data fed to ASI1
    	tlv_write(8,0x50); 	//asi1 dac data path		left-left right-right
    	tlv_write(9,0x00); 	//asi1 adc chn tristate		nothing tristated
    //	tlv_write(9,0xFF); 	//asi1 adc chn tristate		everything tri-stated
    	tlv_write(10,0x24); //asi1 clock outputs		bclk & wclk output
    	tlv_write(11,0x02); //asi1 bit clock			adc clk 12.28MHz
    	tlv_write(12,0x81); //asi1 bit clk n-div		1
    	tlv_write(13,0x00); //asi1 word clk n-div		-
    
    	tlv_write(14,0x01); //asi1 bclk & wclk output	bclk->div outp, wclk->adc_fs clk
    //	tlv_write(15,0xA0); //asi1 dout1				from asi1
    	tlv_write(15,0x00); //asi1 dout1				from asi1
    	tlv_write(16,0x00); //asi1 bclk & wclk			adc same as dac
    
    	//ASI2
    //	tlv_write(17,0x18); //asi2 format ctrl			i2s, 32bit, not Hi-Z
    	tlv_write(17,0x00); //asi2 format ctrl			i2s, 16bit, not Hi-Z
    //	tlv_write(17,0x01); //asi2 format ctrl			i2s, 16bit, Hi-Z
    	tlv_write(18,0x00); //asi2 data offset			0 bclks
    	tlv_write(21,0x00); //asi2 adc format			sames as r17
    //	tlv_write(23,0x05); //asi2 format ctrl			asi2[1:2] = minidsp_a_dataoutput[3:4]
    	tlv_write(23,0x01); //asi2 adc input ctrl		disabled
    	tlv_write(24,0x50); //asi2 dac output ctrl		left - dac data left, right - dac data right
    //	tlv_write(24,0x00); //asi2 dac output ctrl
    	tlv_write(26,0x24); //asi2 wrd/bit ctrl			bclk and wclk as output
    	tlv_write(27,0x02); //asi2 bdiv input			ADC_CLK
    //	tlv_write(28,0x84); //asi2 bclk div				powered up, 4
    	tlv_write(28,0x88); //asi2 bclk div				powered up, 8
    //	tlv_write(29,0xC0); //asi2 wclk div				powered up, 64
    	tlv_write(29,0xA0); //asi2 wclk div				powered up, 32
    	tlv_write(30,0x24); //asi2 bclk, wclk output	bclk - div outp, wclk - div outp
    	tlv_write(31,0x00); //asi2 dout					DOUT2 from ASI2
    //	tlv_write(31,0x02); //asi2 dout					DOUT2 from ASI2
    	tlv_write(32,0x00); //asi2 adc w/bclk			wclk - same as dac wclk, bclk - same as dac bclk
    
    	//ASI3
    	//also testing with 16-bit I2S
    
    	//tlv_write(33,0x18); //asi3 format ctrl		i2s, 32bit, not Hi-Z
    	tlv_write(33,0x00); //asi3 format ctrl			i2s, 16bit, not Hi-Z
    //	tlv_write(33,0x01); //asi3 format ctrl			i2s, 16bit,Dout Hi-Z
    
    	tlv_write(34,0x00); //asi3 data offset			0 bclks
    	tlv_write(39,0x06); //asi3 ADC inp ctrl			asi3[1:2] = minidsp_a_dataoutput[5:6]
    //	tlv_write(39,0x00); //asi3 ADC inp ctrl			asi3[1:2] = Z
    	tlv_write(40,0x50); //asi3 dac output ctrl		left - dac data left, right - dac data right
    	tlv_write(42,0x00); //asi3 wrd/bit clk ctrl		bclk default polarity, b/wclk power down when codec power down
    	tlv_write(43,0x02); //asi3 bdiv input			ADC_CLK
    //	tlv_write(44,0x84); //asi3 bclk div				powered up, 4
    	tlv_write(44,0x88); //asi3 bclk div				powered up, 8
    //	tlv_write(45,0xC0); //asi3 wclk div				powered up, 64
    	tlv_write(45,0xA0); //asi3 wclk div				powered up, 32
    	tlv_write(46,0x46); //asi3 bclk, wclk output	bclk - div outp, wclk - div outp
    	tlv_write(47,0x00); //asi3 dout					DOUT3 from ASI3
    	tempval = tlv_read(47);
    
    	tlv_write(55,0x21); //asi3 GPIO1/2				GPIO1 - ASI3_BCLK, GPIO2 - ASI3_WCLK
    	tlv_write(56,0x03); //asi3 GPIO3				GPIO3 - ASI3_DIN
    	tlv_write(86,0x54); //asi3 GPIO1				GPIO1 - ASI3_BCLK
    	tlv_write(87,0x50); //asi3 GPIO2				GPIO1 - ASI3_WCLK
    	tlv_write(88,0x74); //asi3 GPIO3				GPIO3 - ASI3_DIN
    	tlv_write(89,0x74); //asi3 GPIO4				GPIO4 - ASI3_DOUT
    

    可能我还在这里遗漏一些东西。 也不知道我是否可以像这样使用音频发生器。 我将 pps 中的状态更改为“run",“,是否、是否允许?

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    只是为了得到一些工作,我做了下面的处理流程. 它将音频从 ASI2 路由到 ASI3、并将音频从 ASI3 路由到 ASI2。 ASI2 和 ASI3 连接了一个蓝牙模块。 两者都与耳机配对。 目前、从 ASI2 到 ASI3 的音频工作正常。 但是、配置为 ASI3 Din 的 GPIO3 引脚似乎在示波器上输出数据。 因此、没有从 ASI3 到 ASi2 的数据。

    e2e.ti.com/.../3276.base_5F00_main_5F00_Rate48.cfge2e.ti.com/.../7080.base_5F00_main_5F00_Rate48_5F00_pps_5F00_driver.h

    以下是从.h 文件加载数据后执行的设置。

        //make sure to be in he correct book and page
    	tlv_write(0,0x00);		//jump to page 0
    	tlv_write(127,0x00);	//jump to boek 0
    	tlv_write(0,0x00);		//jump to page 0 van boek 0
    
    	//setting up clock
    	tlv_write(60,0x80); //power up miniDSPA & D together
    
    	tlv_write(4,0x33); //adc/dac clk
    	tlv_write(5,0x00); //clkin				MCLK & Low PLL
    	tlv_write(6,0x91); //PLLP & PLLR		1 & 1
    	tlv_write(7,0x07); //PLLJ				7
    	tlv_write(8,0x06); //PLLD				1680
    	tlv_write(9,0x90); //PLLD
    	tlv_write(10,0x01); //PLL_CLKIN_DIV		1
    //	tlv_write(11,0x82); //NDAC				2
    
    	tlv_write(12,0x82); //MDAC				2
    	tlv_write(13,0x00); //DOSR				128
    	tlv_write(14,0x80); //DOSR
    
    	tlv_write(18,0x01); //NADC				power down
    //	tlv_write(18,0x87); //NADC				7
    //	tempval = tlv_read(18);
    
    	tlv_write(19,0x82); //MADC				2
    	tlv_write(20,0x80); //AOSR				128
    
    	tlv_write(11,0x87); //NDAC				7 and powerup at the end
    
    	//setting up ASI's
    	//ASI1
    	tlv_write(0,0x04);	//page4
    
    	tlv_write(1,0x38); 	//asi1 audio format			DSP/32bit/Dout not high imp
    	tlv_write(2,0x00);	//asi1 left chn offset
    	tlv_write(3,0x00); 	//asi1 right chn offset
    	tlv_write(4,0x26); 	//asi1 chn setup			DAC&ADC left & right chns
    	tlv_write(5,0x00); 	//asi1 adc bus format		Use R1 settings
    	tlv_write(6,0x00); 	//asi1 multipin				Data in & out single pins
    	tlv_write(7,0x01); 	//asi1 adc input ctrl		minidsp ADC data fed to ASI1
    	tlv_write(8,0x50); 	//asi1 dac data path		left-left right-right
    	tlv_write(9,0x00); 	//asi1 adc chn tristate		nothing tristated
    //	tlv_write(9,0xFF); 	//asi1 adc chn tristate		everything tri-stated
    	tlv_write(10,0x24); //asi1 clock outputs		bclk & wclk output
    	tlv_write(11,0x02); //asi1 bit clock			adc clk 12.28MHz
    	tlv_write(12,0x81); //asi1 bit clk n-div		1
    	tlv_write(13,0x00); //asi1 word clk n-div		-
    
    	tlv_write(14,0x01); //asi1 bclk & wclk output	bclk->div outp, wclk->adc_fs clk
    //	tlv_write(15,0xA0); //asi1 dout1				from asi1
    	tlv_write(15,0x00); //asi1 dout1				from asi1
    	tlv_write(16,0x00); //asi1 bclk & wclk			adc same as dac
    
    	//ASI2
    //	tlv_write(17,0x18); //asi2 format ctrl			i2s, 32bit, not Hi-Z
    	tlv_write(17,0x00); //asi2 format ctrl			i2s, 16bit, not Hi-Z
    //	tlv_write(17,0x01); //asi2 format ctrl			i2s, 16bit, Hi-Z
    	tlv_write(18,0x00); //asi2 data offset			0 bclks
    	tlv_write(21,0x00); //asi2 adc format			sames as r17
    	tlv_write(23,0x05); //asi2 format ctrl			asi2[1:2] = minidsp_a_dataoutput[3:4]
    //	tlv_write(23,0x01); //asi2 adc input ctrl		disabled
    //	tlv_write(23,0x03); //asi2 adc input ctrl		asi2[1:2] = asi2[1:2]
    	tlv_write(24,0x50); //asi2 dac output ctrl		left - dac data left, right - dac data right
    //	tlv_write(24,0x00); //asi2 dac output ctrl
    	tlv_write(26,0x24); //asi2 wrd/bit ctrl			bclk and wclk as output
    	tlv_write(27,0x02); //asi2 bdiv input			ADC_CLK
    //	tlv_write(28,0x84); //asi2 bclk div				powered up, 4
    	tlv_write(28,0x88); //asi2 bclk div				powered up, 8
    //	tlv_write(29,0xC0); //asi2 wclk div				powered up, 64
    	tlv_write(29,0xA0); //asi2 wclk div				powered up, 32
    	tlv_write(30,0x24); //asi2 bclk, wclk output	bclk - div outp, wclk - div outp
    	tlv_write(31,0x00); //asi2 dout					DOUT2 from ASI2
    //	tlv_write(31,0x02); //asi2 dout					DOUT2 from ASI2
    	tlv_write(32,0x00); //asi2 adc w/bclk			wclk - same as dac wclk, bclk - same as dac bclk
    
    	//ASI3
    	//also testing with 16-bit I2S
    
    	//tlv_write(33,0x18); //asi3 format ctrl		i2s, 32bit, not Hi-Z
    	tlv_write(33,0x00); //asi3 format ctrl			i2s, 16bit, not Hi-Z
    //	tlv_write(33,0x01); //asi3 format ctrl			i2s, 16bit,Dout Hi-Z
    
    	tlv_write(34,0x00); //asi3 data offset			0 bclks
    	tlv_write(39,0x06); //asi3 ADC inp ctrl			asi3[1:2] = minidsp_a_dataoutput[5:6]
    //	tlv_write(39,0x00); //asi3 ADC inp ctrl			asi3[1:2] = Z
    	tlv_write(40,0x50); //asi3 dac output ctrl		left - dac data left, right - dac data right
    	tlv_write(42,0x00); //asi3 wrd/bit clk ctrl		bclk default polarity, b/wclk power down when codec power down
    	tlv_write(43,0x02); //asi3 bdiv input			ADC_CLK
    //	tlv_write(44,0x84); //asi3 bclk div				powered up, 4
    	tlv_write(44,0x88); //asi3 bclk div				powered up, 8
    //	tlv_write(45,0xC0); //asi3 wclk div				powered up, 64
    	tlv_write(45,0xA0); //asi3 wclk div				powered up, 32
    	tlv_write(46,0x46); //asi3 bclk, wclk output	bclk - div outp, wclk - div outp
    	tlv_write(47,0x00); //asi3 dout					DOUT3 from ASI3
    //	tempval = tlv_read(47);
    
    	tlv_write(55,0x21); //asi3 GPIO1/2				GPIO1 - ASI3_BCLK, GPIO2 - ASI3_WCLK
    	tlv_write(56,0x03); //asi3 GPIO3				GPIO3 - ASI3_DIN
    	tlv_write(86,0x54); //asi3 GPIO1				GPIO1 - ASI3_BCLK
    	tlv_write(87,0x50); //asi3 GPIO2				GPIO1 - ASI3_WCLK
    	tlv_write(88,0x74); //asi3 GPIO3				GPIO3 - ASI3_DIN
    	tlv_write(89,0x74); //asi3 GPIO4				GPIO4 - ASI3_DOUT

    如前所述、我针对 ASI3 将 GPIO3 配置为 Din。 GPIO1、GPIO2 和 GPIO4 似乎配置正确。 GPIO3 是否有一些功能超出了该功能?

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    我在数据表中发现了一些有趣的信息 — 第 4 页的寄存器 88、即 GPIO3 配置寄存器、没有明确说明它被用作 ASI3 DIN、而是在寄存器 56 中设置:  

    因此、将寄存器 88 设置为 0x74 位于“保留请勿使用“部分下方。 我看到前面的表 51 中说要设置此项:

    我想知道您是否将寄存器 88 引脚控制设置为 00001(寄存器 88 至 0x04)、尽管它说它可以用于 ASI1 的数据输入、可能这是一个拼写错误、这是 ASI3 的数据输入 — 根据数据表中的表 47、GPIO3 不应该能够成为 ASI1 的 DIN。 将该寄存器设置为输入可能会有所帮助。 请告诉我它是否有效!  

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    非常感谢。 这确实做到了。

    当我第一次读这篇文章时,我觉得这有点奇怪。 因为根据表 51、您必须在保留的寄存器段中设置位。 但是,在那之后,我没有太多的思考。

    再次、非常感谢。

    下一步:使用 TDM 配置 ASI1。

    此致、

    Robin  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    我尝试将一些数据从其中一条 I2S 总线输出到 ASI1 总线。 ASI2 和 ASI3 均为 16 位立体声@ 48kHz。 ASI1 是 48kHz 时的 32 位 8 通道 TDM。 如何控制将数据放置在哪个通道中? 我在“wclk1"上“上尝试了不同的连接、但数据似乎总是在通道 1 中、与 Multi_Channel_Digital_Out_脉冲没有偏移。  

    您是否还能确认所有 ASI 的输入是单独的、但输出数据通道在“miniDSP_A_DataOutput[1:8]“中共享? 我必须在 ASI2 和 ASI3 上输出的数据是否可能未放入 ASI1 的某些通道中?

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    首先、您是否已验证此操作所需的时钟是否正确输出/输入? 如果发生这种情况、则 ASI2 和 3 的 BCLK 需要 16*2*48K = 1.536MHz、ASI1 的 BCLK 需要 32*8*48K = 12.288MHz。 然后、ASI1 数据将具有针对每个 I2S2 数据点的重复样本。 由于时钟不同、我不确定 GUI 是否允许使用它。

    如果您可以验证是否能够生成正确的时钟输出、那么我会说运行 miniDSP ASI1、就像它与 ASI2 和 3 的速率相同一样、然后数据将自动完成 2 倍过采样。 然后、您可以使用第 4 页寄存器 2 配置 ASI1 数据偏移、以将样本放置在正确的通道中。 这适用于您正在输出时钟、并且您只希望将 ASI1 数据放在连续通道上的情况。 可以帮助我理解时钟的工作原理。 另外、是否可以附加 SystemSettingsCode 代码和.pfw 文件、而不是.h 和.cfg? 它更具人类可读性。

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    我尝试实现的是将两个具有自己音频总线的蓝牙模块双向连接到 tdm-bus。 tdm-bus 配置是固定的、因为它是已部署系统的一部分。

    tdm-bus 配置是一条 8 通道 32 位 tdm 总线、输入和输出总线的采样速率均为 48kHz。需要置于 ASI2 和 ASI3 的两个通道分别在输出总线中的通道时隙 1 和 2 中。 随后、来自 ASI2 和 ASI3 的音频必须置于通道时隙 1 和 2 的输出 tdm-bus 上。 该总线上的其他通道应保持不变。

    从模块连接到 ASI2 和 ASI3 的两个数据总线可按模块进行配置。 如果是单声道、也没关系。 这些总线的选项包括:

    -I2S、48kHz、16 位

    -PCM、48kHz、16 位

    -PCM、48kHz、32 位

    到目前为止的进展是:

    所有时钟均设置正确、使用示波器进行检查。 我现在将 ASI2 和 ASI3 配置为 I2S 16 位。 我成功地在 ASI2 和 ASI3 上获得了双向音频。 之前的处理流程连接 ASI2 和 ASI3、我在连接的耳机之间进行了全双工通信。

    所以我主要关心的是:

    1.是否可以将两个通道(来自 ASI2 的单声道音频和来自 ASI3 的单声道音频)输出到 ASI1 上输出 tdm 的两个通道而无需触摸该总线上的其他通道? 同时还有从输入 tdm 到 ASI2 和 ASI3 的音频?

    2.这是否也可以使用两条 16 位 I2S 总线并从每个总线(单声道)选择左通道? 因为左声道和右声道来自同一声道源、所以不管怎么说都是单声道。

    3.当我想在总线 ASI2 和 ASI3 上切换到 PCM 32 位时,这些接口的 PPS 中需要哪些组件?

    对我来说、如果我必须将音频从 tdm 输入总线输出到 ASI2 和 ASI3、这将是通道“miniDSP_A_DataOutput3:4“和“miniDSP_A_DataOutput[5:6]“中的数据。 来自 ASI2 和 ASI3 的音频将位于“miniDSP_A_DataOutput[1:8]“中。 它们必须出现在 tdm 输出总线上的插槽 1 和 2 中。 如何防止 tdm 输出总线上出现信道 3、4、5、6 中的数据? 请参阅下面的图 108。

    很抱歉有很多问题、但我必须知道。 如果我们不能将回音通道保持不变、我认为这是不可能的?

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    我认为*应该*是可能的。 是否可以附加正在使用的.pfw 文件? 我可以尝试在 EVM 上对其进行测试。 从每个通道获取左通道很简单、我们只需连接左侧。 可以同时将数据从一个 ASI 传递到另一个 ASI。 处理器间对象将从 miniDSP DAC 向 ADC 传递单独的数据流。 如您所注意到的、miniDSP A 和 D 最多可同时有 8 个流。 它将它们分成 ASI1 -> CH1 和 2、ASI2 -> CH3 和 4、ASI3 -> CH5 和 6。 那么我们还有另外两个可能。 对于 8 通道系统、我认为它假设所有 8 个通道都在 ASI1 上。 但是、您可以按照自己喜欢的方式对其进行路由。 您可能需要对多通道对象执行所有操作、然后使用寄存器 23 或 39(第 4 页)在 SystemSettingsCode 中定义要发送到 ASI2 和 3 的通道、如图所示。 切换到“PCM"没有“没有意义、PCM 一旦进入计算机、即为数据类型。 与编解码器相关、它是 I2S、然后可以将其保存为计算机上的 PCM。 因此、您可能是指这些 ASIS 上的 I2S 32 位、这应该没问题、我建议您不要在单独的 ASIS 上具有两个单独的位深度。 由于只有一个 miniDSP A 和 1 D、因此只有一组 miniDSP 时钟、因此位深度的任何变化都将意味着数据会进行一些截断。  

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    感谢您的答复。

    对于模块中 ASI2 和 ASI3 上的 I2S、我只能选择 16 位深度、没有可用的选项 32 位。 只有在 PCM 模式下、我才能选择 32 位。 这与 此编解码器数据表的第 8.3.9.2.4.5 节中所述的类似。 然而、模块的 wclk 是一种长帧同步、它是位深度的高一半(与 I2S 类似)、但只发送一个通道。

    因此、现在仍在 ASi2 和 ASI3 上处于 16 位 I2S 模式。

    出于测试目的、我将 ASI1 上的 TDM 更改为 16 位、并将 BCLK 更改为该值的一半。 现在是 6.14Mhz。 与 ASI2 和 ASI3 输入的数据对应的内容。 但是、我仍然只看到示波器上的第一个通道上出现了数据。

    还有一些奇怪的行为、当我通过 iDSP_D_A 将数据点 I2S_IN2_1 和 I2S_IN3_1 连接到通道 1 和 2 上的 Multi_Channel_Digi 输出块时。 然后、我仍然有音频从 ASI3 到 ASI2、从 ASI3 到 ASI3、因为我可以在连接的耳机中听到。 寄存器 23 和寄存器 39 设置为通道[3:4]和通道[5:6]。 奇怪的对吗?

    您将找到 pfw-file。 我压缩它、因为在此处上传不起作用。

    e2e.ti.com/.../tlv320aic3268_5F00_pfw.zip

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    您是否没有更改 PFW 文件的系统设置代码部分? 在此处可设置寄存器。 首先、我建议您查看 ASI2 和 3 输入或输出设置、这是 SystemSettingsCode 第 4 页上的寄存器 23-40。 此处为 105-108 行:

    我将附加从您的 pfw 中获取的 SystemSettingsCode 配置、我喜欢在文本编辑器中打开它并将其单独粘贴。 我删除了所有非 48K 配置、因此更短、更易于阅读。 另外需要注意的是系统设置代码中的时钟设置 — 如果要更改 MCU 上为编解码器提供时钟的时钟、还需要更改 PLL 和分频器的寄存器。  

    如果您可以更清楚地说明所使用的时钟设置和配置、我很乐意帮助您使用正确的时钟设置和配置来编辑此文件。

    此致、
    Mir

    e2e.ti.com/.../ssc.cfg

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    起初我不知道 SystemSettingsCode、因此 MCU 是从“base_main_rate48_pps_driver.h"写入“写入数据、然后我编写了时钟和 ASI 端口的设置。

    我现在对其进行了更改、将时钟和 ASI 寄存器设置从 MCU 移到了 SystemSettingsCode。 因此、MCU 现在唯一的功能是编写“base_main_rate48_pps_driver.h"中“中的所有内容。 您将找到 pfw-file。

    使用此 pfw-file、我仍然可以在连接耳机的情况下、从 ASI3 到 ASI3 以及从 ASI3 到 ASI2 的音频行为。 ASI 的时钟似乎正确。 但是、我不知道 miniDSP 需要哪种时钟频率? 从 ASI2 到 ASI1 上 tdm 的音频在示波器上看起来正常、但是从 ASI3 到 ASI1 上的 tdm 输出、在多个通道上有大量数据。

    e2e.ti.com/.../tlv320aic3268.pfw.txt

    我尝试完成的是 tdm 在 8 通道@32 位、wclk=48kHz、BCLK=12、288MHz 上

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    今天是美国假期。 请耐心等待、我们的团队明天会与您一起跟进。

    谢谢!
    Jeff McPherson

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    若要设置每个 ASI 的比特率、请检查以下寄存器:

    -第 4 页寄存器 1:我看到你设置为 DSP 和 16 位,你可能想要设置为 32 位。

    -我们需要 ASI1 的时隙模式吗? 否则、更改寄存器 3 和寄存器 8

    -由于 ASI1 是 32 位,ASI1 N div 可以设置为 1 而不是 2

    -删除第 0 页寄存器 8 和 9、J.D 中不需要 D(或更改为 0x00)

    请告诉我具体情况。

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    1.ASI1 现在确实位于 16 位。 这仅用于测试目的。 因为您说:

    “我会推荐它、不要在单独的 ASIS 上有两个单独的位深度。“

    我会改变它,它应该是什么..

    2.是的,我们需要 TDM 或时间图模式。 来自 asi2 输入的数据应在时隙 1 中、而来自 asi3 输入的数据应在时隙 2 中。

    3.当然,这也应该相应地设置正确。

    4、为什么不需要 D? 我的输入时钟是 MCLK 引脚上的 12.000MHz。

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    正如您之前所说、我曾认为您在 MCLK 上使用了 12.288MHz:

    但如果输入是 12MHz、那么它应该没有问题。  

    我认为有助于解决您的问题的另一点需要注意的是查看寄存器[0][4][4]->此寄存器在数据表中有一个拼写错误、缺少第 7 位和第 6 位。 例如、如果我们查看 AIC3263、或者 在 DS 中搜索 B0_P4_R4、我们可以看到位 7 和 6 可以建立多通道模式、因此我们可以选择 8 个通道。 但是、默认情况下、此寄存器已在系统设置代码脚本的末尾设置、我看到您将此寄存器保留在中:

    该设置应自动设置时隙、如数据表的第 8.3.9.2.5.2 节所示。 因此、您不需要时隙、应更改 寄存器 3 和寄存器 8。 这可能会帮助您解决数据问题的多个渠道。

    请告诉我您可以在这里找到什么内容。 此外、如果您可以包含不同 ASIS 数据的示波器快照、这也会很有帮助。

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    感谢您的答复。

    同时我尝试在 ASI1 上找到一些东西。 然而,无论我配置什么,它似乎不会产生任何影响。

    下面是将数据从 ASI2 环回到 ASI2 (reg23) 的示波器快照。  

    然而:

    D0 = ASI1_BCLK

    D1= ASI1_WCLK

    D2=ASI1_DOUT

    D4=ASI2_WCLK

    D5=ASI2_BCLK

    D6=ASI2_DOUT

    D7=ASI2_DIN

    下面您将找到 ASI2 输入连接到多通道输出通道 1 的处理流的示波器快照和 pfw 文件。

    e2e.ti.com/.../7418.tlv320aic3268.pfw.txt

    您能检查一下是否需要在电路板上做什么吗?

    此外、在[0][4][21]和[0][4][33]中的“辅助音频串行 ADC 接口格式选择“和“三级音频串行 ADC 接口格式选择“应该使用什么?

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    Mir 已离职、将在本周晚些时候返回此主题。

    此致、

    Garret

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    我想让你知道,我已经在这方面工作了一段时间。 我现在有多通道模式、在 32 位的条件下处理 4 个通道。 我会附加我的 PFW 文件和系统设置代码(我会单独编辑它,以便它更易于阅读)。 接下来的步骤将是 修复 ASI2 中的时钟时序、可能还有 3 个步骤(我刚才检查了 ASI2、并且时钟的时序略高于 ASI1、因此我需要混淆 AP 接收器上的设置以正确获取数据、但其 dBFS 高于预期)。 我们还可以努力使 16 位数据正确传递、以获得所有 8 个通道。 我在中使用 12MHz MCLK、并且器件生成 48kHz WCLK 输出。 如果这不是您所期望的、请告诉我。 我还会附加我的 APX 项目文件、以便您可以测试与我相同的内容。

    e2e.ti.com/.../5153.ssc.cfg

    e2e.ti.com/.../7418.tlv320aic3268.pfwe2e.ti.com/.../multi_5F00_asi_5F00_measurement.approjx

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    感谢您愿意尝试。

    我将其连接到另一个 DSP、并在 3268 中对您的项目进行了编程。 我注意到 asi2 位 — 和文字时钟来自 asi1。 还将另一个 DSP 的总线配置为 4 通道、32 位、48kHz。 那么让它生成正弦波。 但是、asi1 上的输出中没有出现数据。 在示波器上、我在 48kHz 时有来自 asi1 和 asi2 的 wclk、在 6.12MHz 时有来自 asi1 和 2 的 wclk。 但没有数据。

    我认为应该有数据、对吧? 还有其他问题吗?  将数据从 h 文件写入编解码器时、是否还必须满足其他条件?

    再次非常感谢您弄清楚。

    此致、

    Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Robin、

    是否确定您已对 ASI1 进行了输入?   我假设您正在为 ASI1 使用默认的 DOUT1 引脚? 您能否将时钟信号显示在与输入相同的示波器上? 正弦波连接到哪个引脚?

    是的、这就是我对 ASI2 时钟进行编程的方式、我发现另一个 ASIS 需要时钟来传输数据、即使数据是在内部生成的或从其他 ASIS 复制的也是如此。

    -米尔