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.

[参考译文] OPT4001:CRC 计算

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1197401/opt4001-crc-calculation

器件型号:OPT4001

您好!  

我对 CRC 计算有疑问。 寄存器0和1具有以下内容:  

Reg0 = 0x080B
Reg1 = 0x801B
我计算了尾数、结果为:0x80B80
此外、我计算了 X[3](因为这是最简单的):
X[3] = 0^1^1 = 0。  
但对于 位3、CRC 显示为1:  
儿童权利委员会:1011.

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

    您好、Michael、

    您使用的转换时间是多少? 您是否可以在2次转换之间读取寄存器0和1? 到目前为止、它看起来像位3应该是0。

    谢谢、

    Brent Elliott

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

    您好、Brent、  

    我使用6.5ms 作为转换时间。
    理论 上、在读取寄存器2之前、可能会完成新的测量(读取寄存器需要~1.3ms、并且在读取寄存器1和2之间存在2.7ms 的小延迟)。 我 不知道这是否可能发生。
    您是否有防止这种情况的建议?  

    谢谢你。

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

    您好、Michael、

    您可以使用 INT 引脚来安排寄存器读取的时间。 如果您在触发中断后立即读取、则应在进行另一次转换之前获取两个寄存器的结果。 由于两次读取之间存在较大的延迟、因此您可以在 寄存器0x0B 中使用 I2C_BURST、以便在一个事务中读取两个寄存器。

    谢谢、

    Brent Elliott

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

    您好、Brent、感谢您的建议!  
    我目前无法使用 INT、因为我有 Picostar 封装。 (但计划切换到 SOT)  
    不过、我无法使 I2C_BURST 正常工作。 寄存器0B 的位0被置位。
    我在开始时发送寄存器0的地址写入。 然后、我会为后续读取获取相同的值。 当我正确理解时、I2C 停止应将计数器重置回寄存器0。   

    我附加了一个屏幕截图  

    II 还设法加快了通信速度。 这3个 i2c 命令所需的时间不到1ms。

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

    您好、Michael、

    由于此时无法使用 INT、因此在转换之间可能会读取寄存器0和1、并且 CRC 不会对齐。 如果您需要验证应用的 CRC、您可能需要丢弃一些测量值、因为这些测量值可能发生在 CRC 不对齐的窗口中。 如您所做的那样增加 SCL 运行频率应该最大限度地减少发生这种情况的可能性、因为事务处理所花费的时间将更少。

    我无法看到随附的屏幕截图。 对于自动递增寄存器读取、序列应如下所示。   

    谢谢、

    Brent Elliott