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.
我们目前正在进行基于 aic34音频编解码器和 C6748的定制电路板设计。 我们正在尝试实施音频回送,即接收音频线路输入->ADC->McASP->EDMA->McASP->DAC->lineOut。
问题是、当我们基于 aic3106演示软件配置编解码器时、在为 DAC 寄存器加电后、我们无法再从 aic34编解码器上的寄存器读取、i2c 线将丢失。
详细信息:
Aic3106编解码器遵循 AIC31Reset --> AIC31DataConfig->AIC31SampleRateConfig->AIC31ADCInit->AIC31DACInit 的顺序。 我们使用相同的顺序、因为 aic34在概念上是具有不同 i2c 的2xaic3106
地址。 在对 aic34的编解码器 A 进行编程时,为了检查这些值是否被正确写入,我们从编解码器读回这些寄存器以进行完整性检查。 问题就是这样
我们可以成功读回 AIC31Reset、AIC31DataConfig、AIC31SampleRateConfig 和 AIC31ADCInit 的值。 但是、当我们为 AIC31DACInit 中的 DAC 加电时、我们无法再从编解码器中读回所有这些值。 此外、我们在 i2c 总线上接触其他 i2c 器件时也遇到问题、i2c 总线会损坏。
它可能来自许多方面、但为了确保在软件方面、编解码器的编程是否缺少任何内容? 也就是说、我们是否必须将编解码器 A 和编解码器 b 同时编程到 samplplerateconfig?
是否有"确定工作"的寄存器分配顺序或脚本或代码示例、以便我们可以将重点转移到硬件问题上? 因为我们的软件在 aic3106上偏置、aic34可能会有什么不同?
Gokmalci 您好!
这肯定不是编解码器的预期行为。 虽然没有强制序列需要遵循、但我们确实有一个建议的序列。 本 应用手册 中有一个 AIC3104示例、也可用于 AIC34。
您能否分享原理图的相关部分以便我了解一下?
此致、
Aaron
您好、Aaron、
我们也没有预料到。 在发布此消息之前、我已在论坛中搜索 aic34并检查了该应用手册。
与往常一样、SW 应该证明应该责怪 HW 伙计们是无辜的:))我们考虑并消除了可能的 SW 原因。
1) 1) C6748的引脚多路复用设置。 这可能是 C6748中某些行配置错误的原因、但我们仔细检查了哪些行被激活、我们不怀疑这一点是否被删除。
2) 2)寄存器分配序列。 我们关注的示例是 C6748 Starterware 作为编解码器主设备和 McASP 从设备的音频回送示例。 我们也不怀疑这一点
在 lcdk6748上完美工作、并且寄存器配置序列与应用程序兼容。 注释。
3)寄存器值错误。(我将在消息的第二部分发送原理图、以使其易于阅读、否则消息将很大、无法理解)
4) 4) i2c 控制总线问题。 有时、代码会增加等待寄存器读取/写入的延迟。 我们还检查了这一点、并在 i2c 导致问题时实现了3种不同的 i2c 实现(启用中断、基于事务、位 bang 样式)。 在所有相同的行为下、启用 DAC 线路后、i2c 读取/写入变得异常。 因此我们不认为 i2c 植入不是原因。
5) aic34的其他一些特殊情况。 我们怀疑可能需要将编解码器 A 和 b 一起设置到采样率和 PLL 设置。 但数据表指出、从编程角度来看、它们是2个独立的编解码器。 只有硬件限制、编解码器 A 和编解码器 b 复位信号必须连接在一起。 这对于我们的电路板来说是正确的、并消除了这种情况。
我们参考的代码来自 C6748 Starterware 的演示代码。
void AIC31I2SConfigure (空)
{
volatile unsigned int delay = 0xFFF;
AIC31Reset (CSL_I2C_0_DATA_CFG);
while (delay--);
/*配置数据格式和采样率*/
AIC31DataConfig (CSL_I2C_0_DATA_CFG、AIC31_datatype_I2S、SLOT_SIZE、0);
AIC31SampleRateConfig (CSL_I2C_0_DATA_CFG、AIC31_MODE_Both、SAMPLING_RATE);
/*初始化 ADC 和 DAC */
AIC31ADCInit (CSL_I2C_0_DATA_CFG);
AIC31DACInit (CSL_I2C_0_DATA_CFG);
}
我为 aic34的编解码器 A 应用了这些设置。 启用 aic34的 reg37后、i2c 线会损坏。
|
LCDKC6748 |
我们的电路板 |
AIC31复位 |
reg (0、0x00)、reg (1、0x80) |
相同 |
AIC31DataConfig |
寄存器(9、0x00)、寄存器(10、0x00) |
相同 |
AIC31SampleRateConfig |
寄存器(2、0x00)、寄存器(3、0x84)、 reg (101、0x00)、reg (102、0x08)、 reg (98、0x20)、reg (4、0x40)、 reg (5、0x00)、reg (6、0x00)、 寄存器(11、0x01)、寄存器(8、0xD0) 寄存器(7、0xA0) |
相同 |
AIC31ADCInit |
|
(REG15、0x00);(REG16、0x00); (REG17、0x00);REG18、0x00); (REG25、0xC0); REG20、0x00);REG23、0x00); (REG19、0x80);REG22、0x80); REG19、0x04);REG22、0x04);
|
AIC31DACInit |
|
(REG37、0xE0);
(REG41、0x02);REG42、0x6C); REG47、0x80);REG51、0x09); REG64、0x80);REG65、0x09); REG82、0x80);REG86、0x09); REG92、0x80);REG93、0x09); REG43、0x00);REG44、0x00); |
与编解码器 A 相关的原理图遵循与 ADC 相关的绿色圆圈输入、与 DAC 相关的蓝色输出。
红色圆圈与电源相关、橙色圆圈与控制和数据总线相关。
线性2可以是单端 J10或数字麦克风输入、MK1和 Mk2可通过跳线进行配置。
在启用跳线 J6、J29的情况下选择 J10、其他跳线断开。
编解码器是时钟中的主器件、所以一个晶振生成其时钟为 MCLK 并且由 CODE_MCLK_A 供电
Gokmalci 您好!
I2C 线路是否上拉至 IOVDD? 我在原理图上的任何位置都看不到器件的电源引脚。 我很好奇先看这个。
此致、
Aaron
Gokmalci 您好!
我看到 I2C 被上拉至与 IOVDD 相同的电压电平、因此这很好。 我在寄存器配置或原理图中也看不到任何奇怪的东西。
您能否提供 I2C 命令的一些示波器截图? 尤其是在发出 DACInit 命令时。 当 I2C 总线进入未知状态时、会出现什么写入问题、这一点很有意思。 I2C 总线作为一个整体受到影响也很有意思。
此致、
Aaron
您好、Aaron、
很抱歉耽误你的时间。 我将以附件的形式发送逻辑分析仪输出、这可能对您有所帮助。 您可以从链接 https://www.saleae.com/downloads/下载软件以检查逻辑分析仪输出
下载完成后,在右角有“选项->打开捕捉”...以打开输出。 输出由写入寄存器和读取寄存器序列组成。 由于我们希望确保写入操作是否成功、因此我们回读以进行完整性检查。 我将在 dacinit 的“中断点”Reg (37,0x0e)处发送快照。 顺便说一下、启用电力线寄存器通常是否是一个突破点?
在上一次寄存器成功寄存器写入期间、我们成功写入寄存器0x25 (十进制37)的值(0xe0)、即启用 DAC 电源线。 然后、我们要读回完整性检查的值、就存在了
i2c 编解码器不再发出 ACK。 codecA 位于地址0x1a、顺便说一下、零附加为 r/w 位 lsb、它使第一个字节为0x34。
https://www.dropbox.com/s/mjeph4ohfeemcql/2%20MHz%2C%2020%20M%20Samples%20%5B1%5D.logicdata?dl=0
逻辑分析仪输出的链接...
真诚感谢您的支持。
祝您在健康健康的日子过的非常好。