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.

[参考译文] PCM1862:通过 SPI 配置时出现问题

Guru**** 2399195 points
Other Parts Discussed in Thread: PCM1865, PCM1862

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/691003/pcm1862-problems-configuring-through-spi

器件型号:PCM1862
主题中讨论的其他器件:PCM1865

通过 SPI 接口设置寄存器失败。

我们使用的是 PCM1865 IC,我们希望通过 SPI 接口配置 T快 来寄存器。 (我们的 uC 作为 SPI 主器件、而 PCM 作为 SPI 从器件)

我们使用的是缓存文件中显示的初始序列

之后、我们需要验证我们是否有效地配置了所需的内容。 因此、我们尝试多次读取 Register6。 重点是、我们在 MISO 线路中看不到任何内容。 因此、我们似乎无法读取(因此、我们可能也无法正确写入)


作为硬件设置、我们将使用下一个引脚配置。
连接到3.3V 的引脚26可选择 SPI 接口;
引脚25 CS
引脚24时钟
引脚23 MOSI
引脚22 MISO

SPI 时钟信号为500kHz、我们使用的是 CPOL = 0和 CPH = 1 (即在下降时钟边沿中获取数据)

在这里,我插入一些有关的帧的捕获。 我们可能使用了错误的时序、或者我们可能需要一些写入操作才能读取任何内容。

正在写入寄存器6

读取寄存器0x6时,我们预期会读取之前插入的0x50。

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

    您好、Alberto、

    欢迎使用 E2E、感谢您关注我们的产品!

    这不是常见问题、器件应能够通过 SPI 进行通信。 您能否验证器件行为以查看器件是否实际正在配置? 例如在监控输出的同时更改 ADC 的模拟增益。

    是否可以尝试使用 I2C 接口来验证器件是否正常工作?

    此致、

     Diego Melendez López í a
      音频应用工程师

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

    您好、Diego、

    感谢您的回复、最后我成功地读取了寄存器。  

    启动后、我读取了某些寄存器、实际上我读取了数据表中指示的默认值。 例如:

    地址6 -> 0x41

    现在的重点是、我似乎无法写入此类寄存器。  

    我的代码很简单、如下所示:

     PCM1862_Read (6、0);
     延迟(20);//ms
     PCM1862_Write (0、0);
     延迟(20);//ms
     PCM1862_Write (6、0x50);
     延迟(20);//ms
     PCM1862_Read (6、0);
     延迟(20);//ms

    因此、我希望读取0x50值、但我始终读取默认的0x41。 那么、我在这里缺少什么呢? 我是否必须以某种方式启用写入操作?

    我在这里展示的其他信息是我的简单库函数

    void PCM1862_Write (uint8_t 地址、uint8_t 值){
     //将 SS 引脚置为低电平以选择芯片:
     digitalWrite (slaveSelectPin、low);
     // 通过 SPI 发送地址和值:
     spi.transfer ((address << 0));
     spi.transfer (value);
     //将 SS 引脚置为高电平以取消选择芯片:
     digitalWrite (slaveSelectPin、HIGH);
     

    void PCM1862_read (uint8_t 地址、uint8_t 值){
     uint32_t readVal;

     //将 SS 引脚置为低电平以选择芯片:
     digitalWrite (slaveSelectPin、low);
     //延迟(1);
     // 通过 SPI 发送地址和值:
     spi.transfer ((address << 1)| 1);
     readVal = spi.transfer (value);
     //将 SS 引脚置为高电平以取消选择芯片:

     serial.print ("读取值:添加");
     serial.print (address、DEC);
     serial.print ("= 0x");
     serial.print (readVal、hex);
     serial.print ("\n");
     
     //延迟(1);
     digitalWrite (slaveSelectPin、HIGH);

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