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.

[参考译文] ADS131M02:接收错误的寄存器数据

Guru**** 2393255 points
Other Parts Discussed in Thread: ADS131M02

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1075315/ads131m02-receive-wrong-register-data

部件号:ADS131M02
“线程: 测试”中讨论的其它部件

你好。

我使用 ADS131M02将照片二极管的值与 Raspberry PI 4B+进行转换。

读取时钟寄存器时,响应数据为0x030E。 这是默认值。

并写入时钟寄存器,数据为0x030A,响应数据为0x4180。 这也是对的。

但再次读取时钟寄存器,响应数据为0x0264。

有什么问题?

if __name__ == "__main__":

    ad_rst.off()
    ad_rst.on()

    spi = spidev.SpiDev()

    spi.open(0, 0)
    spi.max_speed_hz = 50000
    #spi.max_speed_hz = 8192000
    #spi.max_speed_hz = 1000000
    spi.mode = 0b01
    
    tmp = [0xA1,0x80]
    crcr = calCRC16(tmp,0,2)
    crcr1 = (crcr&0xFF00)>>8
    crcr2 = crcr&0x00FF
    tmp.extend([crcr1,crcr2])
    spi.xfer(tmp)
    rrr = spi.readbytes(24)
    print(rrr)

    tmp = [0x61,0x80,0x03,0x0A]
    crcr = calCRC16(tmp,0,4)
    crcr1 = (crcr&0xFF00)>>8
    crcr2 = crcr&0x00FF
    tmp.extend([crcr1,crcr2])
    spi.xfer(tmp)
    rrr = spi.readbytes(24)
    print(rrr)

    tmp = [0xA1,0x80]
    crcr = calCRC16(tmp,0,2)
    crcr1 = (crcr&0xFF00)>>8
    crcr2 = crcr&0x00FF
    tmp.extend([crcr1,crcr2])
    spi.xfer(tmp)
    rrr = spi.readbytes(24)
    print(rrr)

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

    您好 MinKyu,

    感谢您的发帖。 您能否使用 示波器或逻辑分析仪共享几个通信捕获? 请在以下框中显示 RREG 命令和命令响应。

    看来您正在计算 SPI 输入的 CRC。 您是否将 RX_CRC_EN 设置为1b? 是否可以尝试禁用输入 CRC 并再次测试 register write 命令?

    此致,

    瑞安

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

    你好 Ryan,

    感谢你的回复。

    我检查了模式 REG,RX_CRC_EN 位为0。 模式 REG 数据为0x0516。

    RX_CRC_EN 设置为1时是否输入 CRC?

    但是,当我写入数据时没有 CRC 字节,数据就不起作用。

    1.首次读取时钟 REG 时的 RREG

    /resized-image/__size/320x240/__key/communityserver-discussion-components-files/73/ti_5F00_rreg8.jpg

    2. 重制时钟时的 RREG

    /resized-image/__size/320x240/__key/communityserver-discussion-components-files/73/ti_5F00_rreg9.jpg

    3.读取时钟 REG 秒

    /resized-image/__size/320x240/__key/communityserver-discussion-components-files/73/ti_5F00_rreg10.jpg

    此外,当我写入时钟调节数据0x7603时,时钟调节设置为0x0302。

    感谢你的帮助。

    米库尤

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

    您好,Minkyu——感谢您拍摄的示波器。 请上传分辨率更高的图像吗?

    如果 RX_CRC_EN = 1b,则输入 SPI 帧必须包含 CRC,才能正确解码命令。 如果 RX_CRC_EN = 0b,则无需发送输入 CRC。 我只是要求澄清,因为代码似乎是计算 CRC 的。  

    此致,

    瑞安

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

    你好,瑞安

    重新上传图像1920x1080。

    1.首次读取时钟 REG 时的 RREG

    2. 重制时钟时的 RREG

    3.读取时钟 REG 秒

    关于 CRC, 尽管'RX_CRC_EN'为'0b', 但我必须发送 CRC 数据才能正常工作,

    这意味着我的硬件或软件设置完全错误?

    此致,

    米库尤

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

    你好,Minkyu,

    感谢您提供高分辨率图像。 我将对以下各项进行总结:

    1. 第一帧:0x030E
    2. 第二帧:0x4180
    3. 第三帧:0x0264

    请检查每个 SPI 帧中是否使用了正确的单词大小? 默认情况下,该部件需要24位字的大小。 这意味着需要通过添加一个00h 字节(数据是 MSB 对齐的)来扩展16位命令。

    查看每个命令期间的整个通信将很有帮助。 能否用命令词(即 RREG)以及包含命令响应的第二个帧? 请为 CSN 添加范围通道,以便我们可以看到每个框架的开始和结束。 再次-如果 RX_CRC_EN = 0b,则不必发送输入 CRC。 但是,您必须用零替换输入 CRC 字才能完成 SPI 帧。 也许这就是缺失的内容:

    此致,

    瑞安

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

    你好 Ryan。

    最后,此问题得到了解决。

    感谢你的帮助。

    我发送的数据设置了24位字大小,但没有 CRC,它工作正常。

    实际上,我已经了解了 SPI 帧大小,我知道它只适用于被测设备。

    因为只读之前的数据。

    非常感谢您为解决我的问题所做的努力。

    此致,

    米库尤。

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

    您好,米奎-我很高兴这项工作现在就开始了。 很高兴随时提供帮助。

    此致,

    瑞安