此器件的 I2S/TDM 接口是否需要全部8个通道、还是只能发送1个通道的数据?
我看到该演示在 FSYNC 脉冲之间发送8个通道的数据。 我们尝试仅为1个通道发送数据、因为我们不需要多个通道、但到目前为止它似乎不起作用。
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.
尊敬的 Kevin:
下面是我们用于测试的未压缩音频文件示例。 我们将通过 Windows 音频播放器播放一个.wav 文件、该播放器将通过 USB 将数据发送到我们的 EVM、然后将其转换为 I2S。 或者、我们将直接使用"Audio Precision "测试设备中的 I2S 主设备。
e2e.ti.com/.../Voice_5F00_48kHz_5F00_24bit.wav
您能否与我共享所有 Book 0页面0寄存器的转储? 因此、当系统启用后、您会听到静态的声音、请读取所有寄存器并与我共享。 我将检查一些与 I2S 相关的寄存器、然后查看设置是否正确
此致、
亚瑟
尊敬的 Tony:
您无需安装跳线 J7即可使用外部源。 J23/24可以"动态"移除、这些只是在两个不同缓冲器上切换启用引脚。 我认为可以更改跳线、然后从 PPC3读取数据。
具体而言、我要检查的是"TDM_CFG"寄存器。 以"RX_"开头的寄存器字段将是与 I2S 接收器相关的设置。 我要检查并确保与 FS、时隙长度、时钟边沿和数据时隙相关的设置与您分享的 I2S 屏幕截图一致
此致、
亚瑟
好的、这似乎起作用了! 我只是在 PCB 上电时更改跳线感觉不安全。 无论如何、下面是从 Register Map 小程序的导出:
器件 | 第页 | 寄存器地址 | 寄存器名称 | 寄存器值 |
通道1 | Book0_Page0 | 0x00 | 第页 | 0x00 |
通道1 | Book0_Page0 | 0x01 | 软件复位 | 0x00 |
通道1 | Book0_Page0 | 0x02 | 器件运行模式 | 0x13 |
通道1 | Book0_Page0 | 0x03 | 通道设置 | 0x88 |
通道1 | Book0_Page0 | 0x04 | 直流阻断器寄存器0 | 0x60 |
通道1 | Book0_Page0 | 0x05 | 直流阻断器寄存器1 | 0x41 |
通道1 | Book0_Page0 | 0x06 | 其他配置1 | 0x00 |
通道1 | Book0_Page0 | 0x07 | 其他配置2 | 0x20 |
通道1 | Book0_Page0 | 0x08 | TDM 配置0 | 0x38 |
通道1 | Book0_Page0 | 0x09 | TDM 配置1 | 0x02 |
通道1 | Book0_Page0 | 0x0A | TDM 配置2 | 0x12 |
通道1 | Book0_Page0 | 0x0B | 限制器最大衰减 | 0x80 |
通道1 | Book0_Page0 | 0x0C | TDM 配置寄存器3 | 0x00 |
通道1 | Book0_Page0 | 0x0D | TDM 配置寄存器4 | 0x32 |
通道1 | Book0_Page0 | 0x0E | TDM 配置寄存器5 | 0x44 |
通道1 | Book0_Page0 | 0x0F | TDM 配置寄存器6 | 0x40 |
通道1 | Book0_Page0 | 0x10 | TDM 配置寄存器7 | 0x04 |
通道1 | Book0_Page0 | 0x11 | TDM 配置寄存器8 | 0x05 |
通道1 | Book0_Page0 | 0x12 | TDM 配置寄存器9 | 0x06 |
通道1 | Book0_Page0 | 0x13 | TDM 配置寄存器10 | 0x08 |
通道1 | Book0_Page0 | 0x14 | TDM 配置寄存器11 | 0x0A |
通道1 | Book0_Page0 | 0x15 | ICC 配置2 | 0x00 |
通道1 | Book0_Page0 | 0x16 | TDM 配置寄存器12 | 0x12 |
通道1 | Book0_Page0 | 0x17 | ICLA 配置0 | 0x0C |
通道1 | Book0_Page0 | 0x18 | ICLA 配置1 | 0x00 |
通道1 | Book0_Page0 | 0x19 | 诊断配置0 | 0x0D |
通道1 | Book0_Page0 | 0x1A | 数字音量控制 | 0x00 |
通道1 | Book0_Page0 | 0x1b | 限制器配置0 | 0x62 |
通道1 | Book0_Page0 | 0x1C | 限制器配置1 | 0x32 |
通道1 | Book0_Page0 | 0x1D | BOP 配置0 | 0x40 |
通道1 | Book0_Page0 | 0x1E | BOP 配置1 | 0x32 |
通道1 | Book0_Page0 | 0x1F | BOP 配置2 | 0x02 |
通道1 | Book0_Page0 | 0x20 | BOP 配置3 | 0x06 |
通道1 | Book0_Page0 | 0x21 | BOP 配置4 | 0x2C |
通道1 | Book0_Page0 | 0x22 | BOP 配置5 | 0x4c |
通道1 | Book0_Page0 | 0x23 | BOP 配置6 | 0x20 |
通道1 | Book0_Page0 | 0x24 | BOP 配置7 | 0x02 |
通道1 | Book0_Page0 | 0x25 | BOP 配置8 | 0x06 |
通道1 | Book0_Page0 | 0x26 | BOP 配置9 | 0x32 |
通道1 | Book0_Page0 | 0x27 | BOP 配置10 | 0x46 |
通道1 | Book0_Page0 | 0x28 | BOP 配置11 | 0x20 |
通道1 | Book0_Page0 | 0x29 | BOP 配置12 | 0x02 |
通道1 | Book0_Page0 | 0x2A | BOP 配置13 | 0x06 |
通道1 | Book0_Page0 | 0x2B | BOP 配置14 | 0x38 |
通道1 | Book0_Page0 | 0x2C | BOP 配置15 | 0x40 |
通道1 | Book0_Page0 | 0x2D | BOP 配置17 | 0x20 |
通道1 | Book0_Page0 | 0x2E | BOP 配置18 | 0x02 |
通道1 | Book0_Page0 | 0x2F | BOP 配置19 | 0x06 |
通道1 | Book0_Page0 | 0x30 | BOP 配置20 | 0x3E |
通道1 | Book0_Page0 | 0x31 | BOP 配置21 | 0x37 |
通道1 | Book0_Page0 | 0x32 | BOP 配置22 | 0x20 |
通道1 | Book0_Page0 | 0x33 | BOP 配置23 | 0xd8 |
通道1 | Book0_Page0 | 0x34 | BOP 配置24 | 0xa6 |
通道1 | Book0_Page0 | 0x35 | NoiseGate 配置0 | 0xbd |
通道1 | Book0_Page0 | 0x36 | NoiseGate 配置1 | 0xad |
通道1 | Book0_Page0 | 0x37 | LVS 配置0 | 0xa8 |
通道1 | Book0_Page0 | 0x38 | 数字输入引脚下拉 | 0x03 |
通道1 | Book0_Page0 | 0x39 | IO 驱动程序配置1 | 0xFF |
通道1 | Book0_Page0 | 0x3A | IO 驱动程序配置2 | 0xFF |
通道1 | Book0_Page0 | 0x3B | 中断掩码0 | 0xFC |
通道1 | Book0_Page0 | 0x3C | 中断掩码1 | 0xbf |
通道1 | Book0_Page0 | 0x3D | 中断掩码4 | 0xdf |
通道1 | Book0_Page0 | 0x40 | 中断掩码2 | 0xf6 |
通道1 | Book0_Page0 | 0x41 | 中断掩码3 | 0x00 |
通道1 | Book0_Page0 | 0x42 | 实时中断读回0 | 0x00 |
通道1 | Book0_Page0 | 0x43 | 实时中断读回1 | 0x02 |
通道1 | Book0_Page0 | 0x44 | 实时中断读回4 | 0x11 |
通道1 | Book0_Page0 | 0x47 | 实时中断读回2 | 0x00 |
通道1 | Book0_Page0 | 0x48 | 实时中断读回3 | 0x00 |
通道1 | Book0_Page0 | 0x49 | 锁存中断读回0 | 0x04 |
通道1 | Book0_Page0 | 0x4A | 锁存中断读回1 | 0x22 |
通道1 | Book0_Page0 | 0x4B | 锁存中断读回5 | 0x19 |
通道1 | Book0_Page0 | 0x4F | 锁存中断读回2 | 0x00 |
通道1 | Book0_Page0 | 0x50 | 锁存中断读回3 | 0x00 |
通道1 | Book0_Page0 | 0x51 | 锁存中断读回4 | 0x06 |
通道1 | Book0_Page0 | 0x52 | SAR VBAT1S0 | 0x28 |
通道1 | Book0_Page0 | 0x53 | SAR VBAT1S1 | 0xe1 |
通道1 | Book0_Page0 | 0x54 | SAR PVDD0 | 0x2F |
通道1 | Book0_Page0 | 0x55 | SAR PVDD1 | 0xe3 |
通道1 | Book0_Page0 | 0x56 | SAR ADC 转换2 | 0x73 |
通道1 | Book0_Page0 | 0x5C | 中断和时钟配置 | 0x19 |
通道1 | Book0_Page0 | 0x5D | 其他配置3 | 0x81 |
通道1 | Book0_Page0 | 0x60 | 时钟配置 | 0x09 |
通道1 | Book0_Page0 | 0x63 | 斜坡帧选择 | 0x48 |
通道1 | Book0_Page0 | 0x65 | 其他配置4 | 0x08 |
通道1 | Book0_Page0 | 0x67 | 音调发生器配置 | 0x00 |
通道1 | Book0_Page0 | 0x68 | 时钟配置 | 0x14 |
通道1 | Book0_Page0 | 0x6A | LV 启用配置 | 0x12 |
通道1 | Book0_Page0 | 0x6B | 噪声门配置2 | 0x43 |
通道1 | Book0_Page0 | 0x6C | 噪声门配置3 | 0x00 |
通道1 | Book0_Page0 | 0x6D | 噪声门配置4 | 0x00 |
通道1 | Book0_Page0 | 0x6E | 噪声门配置5 | 0x1a |
通道1 | Book0_Page0 | 0x6F | 噪声门配置6 | 0x00 |
通道1 | Book0_Page0 | 0x70 | 噪声门配置7 | 0x96 |
通道1 | Book0_Page0 | 0x71 | PVDD_UVLO | 0x03 |
通道1 | Book0_Page0 | 0x73 | DMD | 0x00 |
通道1 | Book0_Page0 | 0x7D | 版本标识 | 0x10 |
通道1 | Book0_Page0 | 0x7E | I2C 校验和 | 0x19 |
通道1 | Book0_Page0 | 0x7f | 书籍 | 0x00 |
通道1 | Book0_Page1 | 0x19 | LSR 寄存器 | 0x00 |
通道1 | Book0_Page1 | 0x36 | INT_LDO 寄存器 | 0x08 |
通道1 | Book0_Page1 | 0x3D | SDOUT HiZ 1 | 0x00 |
通道1 | Book0_Page1 | 0x3E | SDOUT HiZ 2 | 0x00 |
通道1 | Book0_Page1 | 0x3F | SDOUT HiZ 3 | 0x00 |
通道1 | Book0_Page1 | 0x40 | SDOUT HiZ 4 | 0x00 |
通道1 | Book0_Page1 | 0x41 | SDOUT HiZ 5 | 0x00 |
通道1 | Book0_Page1 | 0x42 | SDOUT HiZ 6 | 0x00 |
通道1 | Book0_Page1 | 0x43 | SDOUT HiZ 7 | 0x00 |
通道1 | Book0_Page1 | 0x44 | SDOUT HiZ 8 | 0x00 |
通道1 | Book0_Page1 | 0x45 | SDOUT HiZ 9 | 0x00 |
通道1 | Book0_Page1 | 0x4c | 边缘控制 | 0x00 |
感谢您提供的宝贵意见! 看到这与我的代码匹配也很好、因为它进行了很好的验证、它接受了我发送的内容。
托尼
您好、Tony、我检查了寄存器、发现了一些中断和一些看起来不正确的设置
INT_LTCH0 - TDM 时钟错误
INT_LTCH4 - TDM 时钟错误类型=无效的 SBCLK 比率或采样率、TDM 时钟错误类型=采样率动态变化
通道1 Book0_Page0 0x08 TDM 配置0 0x38 ->设置为0x28已启用时钟自动检测、通常情况下、帧将在帧时钟的下降沿开始、但根据 主机设置、可能可以。
通道1 Book0_Page0 0x09 TDM 配置1 0x02 ->左对齐1bcclk 偏移
通道1 Book0_Page0 0x0A TDM 配置2 0x12 ->设置为0x10、设置16位时隙和字、以匹配总线设置
通道1 Book0_Page0 0x0C TDM 配置 Reg3 0x00 ->设置为0x10、此处的设置发生冲突
请尝试一下。 这些设置假设您具有32个 BCLK/帧并且每个帧都有16位的立体声数据。 如果您的说法不正确、请告诉我
关于 DMIN、这是我们测试页上的一个设置、与 D 类所用的线性 LSR 调制相关。 我认为该设置与输出上的抖动有关。 您可以看到我们的专利 https://www.freepatentsonline.com/20200358431.pdf 中引用的值、
否则我无法分享更多关于测试页的信息
此致、
亚瑟
谢谢你! 我认为这有帮助,但我也跳过另一个问题,我有那是破坏声音数据。 我参考了这个网站、 WAV -波形音频文件格式、用于确定数据的开始位置。 在这个站点中我不清楚的是 WAV 文件 此外、 具有包含上下文数据的页脚、并且在抓取二进制数据(也需要转换为大端字节序)之前、我没有修整文件末尾的数据。 所以通过这些设置和微调 WAV 文件数据的"页脚"以及"页眉",它运行得非常好!
此致、
托尼
Arthur、
我以为我在家是自由的,直到我尝试了我的第二个测试声音文件,它无法播放整个事情。 声音文件稍大,所以我尝试了3次不同的时间,使用不同的量缩短文件尾端,以及两个轻微放大和不放大,并在所有情况下,将声音文件转换为二进制文件, 播放时、听起来好像不再播放声音数据、其大约是流的后半部分。
由于我目前有足够的内存来保存两种声音在内存中、我先尝试播放问题声音、然后尝试播放我的旧测试声音、以防问题声音关闭放大器、但它不能、第二种旧的声音播放正常。
这就是说、由于我在不得不调整 wav 文件的结尾之前还没有意识到、我仍在想知道从 mp3到 WAV 到大端字节序数据的转换过程是否正确。 我加入了测试声音,这些声音从 Audacity 项目文件级开始,然后经过转换过程的所有阶段。 我还有一个单词文档(带有两个嵌入的视频)、详细介绍了我如何转换、称为" 蛮力创建声音 Data.docx "。 我还有两个非常短的视频捕获第一个我通过 PPC3控制播放第二个声音文件,然后我播放第二个声音文件,然后第一个声音文件之间有100ms 中断,这样你就可以听到它是多么失真和短路通过 我的外部控制。
最后、我添加了 PPC3从我的设置中捕获的寄存器数据、然后是从 PPC3设置中捕获的寄存器数据。 这两项似乎都表明了
Book0_Page0 |
0x51 |
锁存中断读回4 |
0x06 |
链接。 有趣的是、关于 INT_LTC4位1、我想知道复位是否确实为1、或者说明中的复位是否可能向后、因为如果我正确读取它、默认复位是错误状态。
尊敬的 Tony:
该问题确实看起来像是数据表错误、我会向数据表所有者核实。 对于您的调试、我认为可以放心地假设两者都没有检测到0=、
听起来您的问题可能比 I2S 信号或 TAS2780设置的问题更像是系统级问题。
当您正在播放第二个不工作的声音时、如果音频停止 I2S 总线上发生的情况、会怎么样? 您看到时钟还是数据停止了?
此外、当您不播放音频时、您的主机是否会停止 I2S 时钟? (FSYNC/SBCLK)这可能是导致中断的原因
此致、
亚瑟
Arthur、
"当您正在播放第二个不工作的声音时、当音频停止 I2S 总线上发生的事情时? 你看到时钟还是数据停止了?" 数据和时钟似乎在继续运行。 在播放这两种声音的结束时、您可以从捕获中看到、我向地址0x02发送了静音(0x99)、然后将地址0x1A 处的数字音量设置为0xC9、该地址应为静音。 与此同时、时钟不会停止。
此完整捕获也作为逻辑2捕获上传到此处。 缩小后可以看到 I2C 设置、很快就会先播放 I2S 故障声音、然后播放 OK 声音、再播放 I2C 静音命令。 如果您没有 逻辑2 来自 萨莱阿 ,它可以从 https://www.saleae.com/downloads/下载 ,以根据需要查看所有信号(放大/缩小)。
e2e.ti.com/.../I2C-and-I2S-Bad-then-decent-sound.zip
此外,您是否有机会看到转换过程,从先前上传的文档中的原始声音文件中提取音频数据" 蛮力创建声音 Data.docx "这条路与你所知道的是什么吗?
谢谢!
托尼
当我从外部器件进行配置时、我花了一点时间尝试对其进行格式化并提供清晰的说明。 zip 文件中包含用于更改默认状态的实际寄存器和数据。 从很高的层面来看、该过程是:
1) I2C 发送第一个配置数据块、称为"I2C_POWER_ALT_1a"
2)暂停10ms、然后 I2C 发送 名为"I2C_POWER_ALT_1b"的第二个配置数据块
3) 3)暂停2ms 并发送2个声音数据流、两者之间暂停100ms
4) 4)发送静音寄存器设置
此时、我将 J24跳线移至'USB'、连接了 PPC3并拉动寄存器映射以确认发送的内容(此 zip 文件中还包含此内容) 尽管两个数字音量和 AMP 电平寄存器确实反映了播放声音后发送的"静音"、但这似乎匹配。
e2e.ti.com/.../Configuration-data.zip
谢谢!
托尼
谢谢你! 我将电源移动到配置中的一切之后,即使在发送之前有很小的延迟,它听起来不错,但不是这样的问题声音数据。 另外、时隙长度问题是我的文档的问题、因为我的注释不正确、但实际代码正确。
我很欣赏这篇代码评论,因为它似乎增强了我日益增长的怀疑,即我在1月22日在论坛的这个线程中以 zip 文件的形式发送回了原始声音数据,该文件名为" 蛮力创建声音 Data.docx "。 假定过程不是完全正确、我正在寻找一种方法、将 MP3 (甚至 OGG)文件转换为所需的原始 PCM 数据、然后发送到您的 AMP 芯片、以确认缺少过程。 到目前为止、我所指出的是试用 缺少全面翻译支持的专有演示库、所以我正在寻找其他地方。 我怀疑、如果我能够始终如一地发送正确转换的原始 PCM 数据、我 实际上会完全清楚!!
托尼
Arthur、您好!
PCM 的数据现在流动正常、现在明显的是、XMOS 芯片起作用时、容积远比不上我所获得的容积。 以下是我为使音量最大化所做的三件事:
在示波器上捕获的声音数据与我要发送的 PCM 数据不匹配。 我们甚至认为这可能是位移问题、因此我们尝试使用页0x00地址0x09 来处理 RX_OFFSET、它听上去不错但很安静、为1、为0很讨厌、为2时声音更大、但开始声音失真、 更大的失真、并且在3处稍微增大一点。
您知道我在配置中遗漏了什么吗?我听到的 XMOS 芯片通过 USB 从 PC 发出声音时、设置要大声得多?
谢谢!
托尼
尊敬的 Tony:
确定、我也会要求您检查 RX 偏移、因为每个位偏移都会导致6dB 的音量变化。 我再次从之前的角度检查了您的寄存器配置、设置与最近的范围截图一致。
您可以认为、在调整 RX 偏移时、您会将 MSB 移到更靠近帧起始的位置、并在某个偏移处最终将 MSB 完全丢弃。 发生这种情况时、扬声器应该会出现明显的失真。
此外、在放大器的输出端、21dBV 增益将是15.84Vpeak 或~11.22Vrms。 如果您的电源电压(PVDD)低于15.84V、则输出端会有一些削波。
我不确定有多少测试设备、但使用正弦波可以更容易地调试这是否是失调电压问题。
1) 1)生成0dBFS 1kHz 等值
2) 2)断开扬声器、因为0dBFS 正弦音几乎肯定会损坏扬声器
3)确保 PVDD >16V
4) 4)播放0dBFS 1kHz 并测量输出端的 Vrms。 如果刻度正确、则应测量~11.22Vrms。
您还可以在此测试用例中调整 RX_OFFSET、并查看 MSB 是否下降或是否发生其他类型的削波。
此致、
亚瑟