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.

[参考译文] LP87745-Q1:用于将数据读取和写入 PMIC 的示例代码

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1117230/lp87745-q1-sample-code-for-reading-and-writing-data-into-pmic

器件型号:LP87745-Q1
主题中讨论的其他器件:IWR6843LP8764-Q1USB2ANY

您好、社区

我们将 LP87745 PMIC 用于具有 IWR6843的定制板。 我想通过 SPI 与该 PMIC 通信。 是否有任何可供参考的示例代码?

此 IC 的数据表中没有太多信息、因此很难与此 PMIC 通信。

谢谢、此致、

Neil

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

    您好、Neil、

    您可以从 LP87745-Q1产品页面申请获取完整数据表。 SPI 帧格式与 LP8764-Q1中的 SPI 帧几乎相同。 只有 PMIC 与主机之间的 SPI_STATUS 字节存在差异。

    这里是我一直与 USB2ANY 一起使用的一个 Python 示例、用于与 SPI 通信。

        def formSpiFrame(self, command, page, address, data):
            cArray=c_ubyte*4
            cFrame=cArray(0,0,0,0)
            cFrame[0]=address&0xFF
            cFrame[1]=((page&0x7)<<5)|((command&0x1)<<4)
            cFrame[2]=data&0xFF
            if (self.CRC and command==0):
                cFrame[3]=self.calcCrc(cFrame,3)
            return cFrame
        
        # Returns the read value
        def spiRegisterRead(self, page, address):
            spiFrame=self.formSpiFrame(1, page, address, 0)
            ADDR=spiFrame[0]
            PAGE_OTHER=spiFrame[1]
            nBytes=3
            if self.CRC:
                nBytes=4
            self.u2a_.u2aSPI_WriteAndReadEx(self.HANDLE, self.SPI_CS, nBytes, ctypes.byref(spiFrame))
            if self.CRC:
                RDATA=spiFrame[2]
                CRC=spiFrame[3]
                self.crcCompare([ADDR, PAGE_OTHER, RDATA], 3, CRC)
            print(spiFrame[0], spiFrame[1])
            if spiFrame[0]!=(spiFrame[1]^0xFF):
                print("Device is not responding to SPI.")
            return spiFrame[2]
        
        # Returns the number of bytes read
        def spiRegisterWrite(self, page, address, value):
            spiFrame=self.formSpiFrame(0, page, address, value)
            nBytes=3
            if self.CRC:
                nBytes=4
            bytesRead=self.u2a_.u2aSPI_WriteAndReadEx(self.HANDLE, self.SPI_CS, nBytes, ctypes.byref(spiFrame))
            if spiFrame[0]!=(spiFrame[1]^0xFF):
                print("Device is not responding to SPI.")
            return bytesRead

    BR、

    Samuli

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

    您好、Samuli、

    感谢您的回复、我现在可以阅读采用 IWR6843的 LP87745 PMIC。 但是、我必须保持芯片选择、直到发送所有数据( params.csHold = 1)、否则我无法接收完整数据。

    当  params.csHold = 0且 params.dataSize = 16时、我可以接收到0x10ef; 当 params.dataSize = 8时、我接收到0x10、因为 CS 信号变为高电平。

    但是、在 总传输期间保持 params.csHold = 1时、我接收到总数据。 例如、在读取地址0x01处的 DEV_REV 寄存器时、我读取0x10ef96。  

    谢谢、此致、

    Neil

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

    您好、Neil、

    是的、CS 必须在整个 SPI 帧期间保持低电平。 CS 的上升沿被解释为传输结束。

    BR、

    Samuli