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.

[参考译文] PCM9211:无法对 PCM9211的功能进行编程

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1487699/pcm9211-fail-to-program-feature-of-pcm9211

器件型号:PCM9211

工具与软件:

您好!

这是我用于通过 I2C 接口对 PCM9211进行编程的脚本。 作为 I2C 主设备、我使用 Digital Discovery 器件:

from ctypes import *
from dwfconstants import *
import time

I2C_freq = 100e3
SCL_PIN = 24  # Change if needed
SDA_PIN = 25  # Change if needed

I2C_ADDR_MAX98089 = 0x10
I2C_ADDR_PCM9211 = 0x40
I2C_ADDR = I2C_ADDR_PCM9211

dwf = cdll.dwf
hdwf = c_int()
iNak = c_int()

dwf.FDwfDeviceOpen(c_int(-1), byref(hdwf))

if hdwf.value == hdwfNone.value:
    print("failed to open device")
    quit()

dwf.FDwfAnalogIOChannelNodeSet(hdwf, c_int(1), c_int(0), c_double(3.3))
dwf.FDwfAnalogIOEnableSet(hdwf, c_int(True))

print("Configuring I2C...")
iNak = c_int()
dwf.FDwfDigitalI2cRateSet(hdwf, c_double(I2C_freq))
dwf.FDwfDigitalI2cSclSet(hdwf, c_int(SCL_PIN))
dwf.FDwfDigitalI2cSdaSet(hdwf, c_int(SDA_PIN)) 
dwf.FDwfDigitalI2cClear(hdwf, byref(iNak))
if iNak.value == 0:
    print("I2C bus error. Check the pull-ups.")
    quit()
time.sleep(1)

#Configure PCM9211
# 1. To enable DIT Standalone Mode, set Register 0x6F = 0x05
DIT_Standalone_Mode_En = (0x6F, 0x05, "Enable DIT Standalone Mode, MPIO_C3 = TXDIN, MPIO_C1 = TXBCK, MPIO_C2 = TXLRCK")
# 2. Set master clock XMCKO as XTI/2, i.e. 12.288 MHz
Master_CLK_Freq = (0x24, 1<<2, "Set master clock to 12.288MHz")
# 3. Enable S/PDIF on MPO0 and XMCKO on MPO1 (p. 111)
MPO0_DITOUT = (0x78, 0x0D | 0x0C << 4, "Route DIT Output (TXOUT) to MPO0 and XMCKO to MPO1")
# 4. Select RXIN0 as the S/PDIF Input (DIR)
DIR_RXIN0 = (0x34, 0x00, "Select RXIN0 as input for DIR")
# 5. Route DIR Output to Main Output Port (MOP)
MOP_DIR = (0x6B, 0x01, "Route DIR Output to Main Output Port (MOP)")

Config_PCM9211 = (DIT_Standalone_Mode_En, Master_CLK_Freq, MPO0_DITOUT, DIR_RXIN0, MOP_DIR)
for reg_addr, reg_value, comment in Config_PCM9211:
    data = (c_ubyte*2)(reg_addr, reg_value)
    dwf.FDwfDigitalI2cWrite(hdwf, c_int(I2C_ADDR<<1), data, c_int(2), byref(iNak))
    if iNak.value != 0:
        print("Device power NAK "+str(iNak.value))
        quit()
    else:
        print(comment)

dwf.FDwfDeviceCloseAll()

以下是输出:

========== 重新启动:C:\Users\pyoha\Documents\work\Python_scripts\programming_motherboard_over_i2c.py ====
正在配置 I2C...
启用 DIT 独立模式、MPIO_C3 = TXDIN、MPIO_C1 = TXBCK、MPIO_C2 = TXLRCK
将主时钟设置为12.288MHz
将 DIT 输出(TXOUT)路由到 MPO0并将 XMCKO 路由到 MPO1
选择 RXIN0作为 DIR 的输入
路由 DIR 输出至主输出端口(MOP)

但当我尝试测量 PCM9211的 MPO1引脚处的信号时(使用 Digilent Waveforms 软件的"Logic"接口)、我看不到任何信号...但希望看到12.888MHz。

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

    我已检查寄存器。 回读值正常:

    ======================== RESTART: C:\Users\pyoha\Documents\WORK\Python_scripts\read_i2c_divices_v1.py =======================
    Configuring I2C...
    Reading all registers from I2C device at 0x40...
    White check mark I2C Device 0x40 detected. Reading registers...
    
    
    I2C Register Values:
    Register 0x00: NACK
    Register 0x01: NACK
    Register 0x02: NACK
    Register 0x03: NACK
    Register 0x04: NACK
    Register 0x05: NACK
    Register 0x06: NACK
    Register 0x07: NACK
    Register 0x08: NACK
    Register 0x09: NACK
    Register 0x0A: NACK
    Register 0x0B: NACK
    Register 0x0C: NACK
    Register 0x0D: NACK
    Register 0x0E: NACK
    Register 0x0F: NACK
    Register 0x10: NACK
    Register 0x11: NACK
    Register 0x12: NACK
    Register 0x13: NACK
    Register 0x14: NACK
    Register 0x15: NACK
    Register 0x16: NACK
    Register 0x17: NACK
    Register 0x18: NACK
    Register 0x19: NACK
    Register 0x1A: NACK
    Register 0x1B: NACK
    Register 0x1C: NACK
    Register 0x1D: NACK
    Register 0x1E: NACK
    Register 0x1F: NACK
    Register 0x20: 0x00
    Register 0x21: 0x00
    Register 0x22: 0x01
    Register 0x23: 0x04
    Register 0x24: 0x04
    Register 0x25: 0x01
    Register 0x26: 0x01
    Register 0x27: 0x00
    Register 0x28: 0x03
    Register 0x29: 0x0C
    Register 0x2A: 0xFF
    Register 0x2B: 0xFF
    Register 0x2C: 0x00
    Register 0x2D: 0x00
    Register 0x2E: 0x00
    Register 0x2F: 0x04
    Register 0x30: 0x02
    Register 0x31: 0x1A
    Register 0x32: 0x22
    Register 0x33: 0x22
    Register 0x34: 0x00
    Register 0x35: 0x02
    Register 0x36: 0x02
    Register 0x37: 0x00
    Register 0x38: 0x80
    Register 0x39: 0x80
    Register 0x3A: 0x00
    Register 0x3B: 0x00
    Register 0x3C: 0x00
    Register 0x3D: 0x00
    Register 0x3E: NACK
    Register 0x3F: NACK
    Register 0x40: 0xC0
    Register 0x41: 0xFF
    Register 0x42: 0x02
    Register 0x43: NACK
    Register 0x44: NACK
    Register 0x45: NACK
    Register 0x46: 0xD7
    Register 0x47: 0xD7
    Register 0x48: 0x00
    Register 0x49: 0x00
    Register 0x4A: NACK
    Register 0x4B: NACK
    Register 0x4C: NACK
    Register 0x4D: NACK
    Register 0x4E: NACK
    Register 0x4F: NACK
    Register 0x50: NACK
    Register 0x51: NACK
    Register 0x52: NACK
    Register 0x53: NACK
    Register 0x54: NACK
    Register 0x55: NACK
    Register 0x56: NACK
    Register 0x57: NACK
    Register 0x58: NACK
    Register 0x59: NACK
    Register 0x5A: 0x00
    Register 0x5B: 0x00
    Register 0x5C: 0x00
    Register 0x5D: 0x00
    Register 0x5E: 0x00
    Register 0x5F: 0x00
    Register 0x60: 0x44
    Register 0x61: 0x10
    Register 0x62: 0x00
    Register 0x63: 0x00
    Register 0x64: 0x00
    Register 0x65: 0x00
    Register 0x66: 0x00
    Register 0x67: 0x00
    Register 0x68: 0x00
    Register 0x69: 0x00
    Register 0x6A: 0x00
    Register 0x6B: 0x01
    Register 0x6C: 0x00
    Register 0x6D: 0x00
    Register 0x6E: 0x0F
    Register 0x6F: 0x05
    Register 0x70: 0x00
    Register 0x71: 0x00
    Register 0x72: 0x00
    Register 0x73: 0x00
    Register 0x74: 0x00
    Register 0x75: 0x00
    Register 0x76: 0x00
    Register 0x77: 0x00
    Register 0x78: 0xCD
    Register 0x79: 0x00
    Register 0x7A: 0x00
    Register 0x7B: 0x00
    Register 0x7C: 0x00
    Register 0x7D: 0x00
    Register 0x7E: 0x00
    Register 0x7F: NACK
    Register 0x80: NACK
    Register 0x81: NACK
    Register 0x82: NACK
    Register 0x83: NACK
    Register 0x84: NACK
    Register 0x85: NACK
    Register 0x86: NACK
    Register 0x87: NACK
    Register 0x88: NACK
    Register 0x89: NACK
    Register 0x8A: NACK
    Register 0x8B: NACK
    Register 0x8C: NACK
    Register 0x8D: NACK
    Register 0x8E: NACK
    Register 0x8F: NACK
    Register 0x90: NACK
    Register 0x91: NACK
    Register 0x92: NACK
    Register 0x93: NACK
    Register 0x94: NACK
    Register 0x95: NACK
    Register 0x96: NACK
    Register 0x97: NACK
    Register 0x98: NACK
    Register 0x99: NACK
    Register 0x9A: NACK
    Register 0x9B: NACK
    Register 0x9C: NACK
    Register 0x9D: NACK
    Register 0x9E: NACK
    Register 0x9F: NACK
    Register 0xA0: 0x00
    Register 0xA1: 0x00
    Register 0xA2: 0x01
    Register 0xA3: 0x04
    Register 0xA4: 0x04
    Register 0xA5: 0x01
    Register 0xA6: 0x01
    Register 0xA7: 0x00
    Register 0xA8: 0x03
    Register 0xA9: 0x0C
    Register 0xAA: 0xFF
    Register 0xAB: 0xFF
    Register 0xAC: 0x00
    Register 0xAD: 0x00
    Register 0xAE: 0x00
    Register 0xAF: 0x04
    Register 0xB0: 0x02
    Register 0xB1: 0x1A
    Register 0xB2: 0x22
    Register 0xB3: 0x22
    Register 0xB4: 0x00
    Register 0xB5: 0x02
    Register 0xB6: 0x02
    Register 0xB7: 0x00
    Register 0xB8: 0x80
    Register 0xB9: 0x80
    Register 0xBA: 0x00
    Register 0xBB: 0x00
    Register 0xBC: 0x00
    Register 0xBD: 0x00
    Register 0xBE: NACK
    Register 0xBF: NACK
    Register 0xC0: 0xC0
    Register 0xC1: 0xFF
    Register 0xC2: 0x02
    Register 0xC3: NACK
    Register 0xC4: NACK
    Register 0xC5: NACK
    Register 0xC6: 0xD7
    Register 0xC7: 0xD7
    Register 0xC8: 0x00
    Register 0xC9: 0x00
    Register 0xCA: NACK
    Register 0xCB: NACK
    Register 0xCC: NACK
    Register 0xCD: NACK
    Register 0xCE: NACK
    Register 0xCF: NACK
    Register 0xD0: NACK
    Register 0xD1: NACK
    Register 0xD2: NACK
    Register 0xD3: NACK
    Register 0xD4: NACK
    Register 0xD5: NACK
    Register 0xD6: NACK
    Register 0xD7: NACK
    Register 0xD8: NACK
    Register 0xD9: NACK
    Register 0xDA: 0x00
    Register 0xDB: 0x00
    Register 0xDC: 0x00
    Register 0xDD: 0x00
    Register 0xDE: 0x00
    Register 0xDF: 0x00
    Register 0xE0: 0x44
    Register 0xE1: 0x10
    Register 0xE2: 0x00
    Register 0xE3: 0x00
    Register 0xE4: 0x00
    Register 0xE5: 0x00
    Register 0xE6: 0x00
    Register 0xE7: 0x00
    Register 0xE8: 0x00
    Register 0xE9: 0x00
    Register 0xEA: 0x00
    Register 0xEB: 0x01
    Register 0xEC: 0x00
    Register 0xED: 0x00
    Register 0xEE: 0x0F
    Register 0xEF: 0x05
    Register 0xF0: 0x00
    Register 0xF1: 0x00
    Register 0xF2: 0x00
    Register 0xF3: 0x00
    Register 0xF4: 0x00
    Register 0xF5: 0x00
    Register 0xF6: 0x00
    Register 0xF7: 0x00
    Register 0xF8: 0xCD
    Register 0xF9: 0x00
    Register 0xFA: 0x00
    Register 0xFB: 0x00
    Register 0xFC: 0x00
    Register 0xFD: 0x00
    Register 0xFE: 0x00
    Register 0xFF: NACK

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

    已解决问题、我忘记启用石英输出(即将0x24上的 pin4设置为"1"):


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

    你(们)好。 感谢您告知我们问题已得到解决。

    此致、

    Arash