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.

[参考译文] ADS7138:ADS7138上的 CRC 模块

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1211770/ads7138-crc-module-on-ads7138

器件型号:ADS7138

您好!

我想知道我在处理 ADS7138的 CRC 功能时出了什么问题。

​以下寄存器配置工作正常、并将 ADC 配置为自主模式:

ADC 寄存器 链接
0x05 0x00
0x01 0x02
0x12 为0xff
0x17 0x01
0x14 为0xff
0x04 0x35
0x01 0x30
0x10 0x11
0x03 0x07

通过先前的寄存器配置、我执行读取操作并获得数字十六进制。 模拟输入上的固定输入电压来调整代码。

不过、当我在 ADC 上启用 CRC 模块时。 它意味着将 GENERAL__CFG 寄存器(0x01)的位6设置为"1"。 请参阅新表下方、其中显示了启用 CRC 的 ADC 配置。

ADC 寄存器中 链接
0x05 0x00
0x01 0x 4. 2.
0x12 为0xff
0x17 0x01
0x14 为0xff
0x04 0x35
0x01 0x 7. 0
0x10 0x11
0x03 0x07

在采用以前的配置时、当我执行与之前相同的读取操作时、对于所有读取值、结果都是0x00……此外、ADC 正进入阻塞模式、要使其再次工作、我需要使 PCB 重新上电。

1) 1)我是否以正确的方式配置 ADC? 我还测试了为每个配置命令附加 CRC 字节、但这同样无法正常工作。 请参阅以下两个示例:  

a.配置 ADC 的一个寄存器而不在末尾附加 CRC 的脚本行:"WIB 2E 0812 FF"

其中:  

- 0x2E 是设备地址

​- 0x08是操作码

- 0x12是内部寄存器

- 0xFF 是要写入寄存器的值。

b.配置一个 ADC 寄存器并在末尾附加 CRC 计算的脚本行:"WIB 2E 0812 FF D5. "

- 0x2E 是设备地址

​- 0x08是操作码

- 0x12是内部寄存器

- 0xFF 是要写入寄存器的值。

- 0x D5. :是命令的 CRC 值

这两种情况都无法正常工作、当我执行读操作时、结果始终为0x00。 在 ADC 上执行读取操作的脚本行为: "RIB 2E 10A6 1"

其中:

-0x2E:是器件地址。

-0x10:是操作码

-0xA6:表示读取的值。

​-0x1:是要读取的字节数。 在本例中仅一个字节。

2) 2)您认为如何在启用 CRC 模块的情况下执行 ADC 读取操作? 它是否也在读取值的末尾附加了 CRC 字节? 我已尝试读取两个连续的字节(RIB 2E 10A6 1)、结果也是0x00...

提前感谢并问候

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

    您好、Enrique、

    您是否在 ADS7138产品文件夹中找到了 CRC 计算器工具?  如果没有、您可以在此处找到: CRC 计算器工具 您需要在每个传输的字节中插入正确的 CRC 值、例如  Host -> 7-bit_Addr、R/W; Opcode; CRC ;地址; CRC ;数据; CRC ;数据; CRC ;。 数据; CRC

    试一下、让我们知道您如何制作。

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

    您好、Tom、

    感谢您的回答。 但我真的不明白应该如何发送 CRC。 请参阅以下我要发送的脚本、以将 ADC 配置为自动模式:  

    WIB 2E 0805 00
    延迟10
    第02章我是谁
    延迟10
    WIB 2E 0812 FF
    延迟10
    WIB 2E 0817 01.
    延迟10
    WIB 2E 0814 FF
    延迟10
    第35章我是谁
    延迟10
    第30章暗黑漩涡30.
    延迟10
    北京赛车 pk10 11.
    延迟10
    WIB 2E 0803 07.

    前一个脚本未使用 CRC 功能配置 ADC。 为了在 ADS7138上启用 CRC 功能、我应该在寄存器"01"上添加值"42"。 因此、应修改前一个脚本的以下指令:

    WIB 2E 0801 02 =>  WIB 2E 0801 4. 2.  

    我的问题是:

    1) 1)如果 我在脚本的第2条指令上启用 CRC、这意味着应该在 CRC 计算不正确的情况下发送第1条指令(WIB 2E 0805 00)? 那么我第一次启用 CRC 的指令(WIB 2E 0801)会怎样呢  4. 2)、我应该发送 CRC、还是应该根据前一个脚本(WIB 2E 0812 FF)在第3条指令上发送 CRC?

    2) 2)根据主机用于发送 I2C 命令的前一个脚本、我无法使用 CRC 发送您的方法。 也许我理解有些错误、但脚本的 I2C 命令具有以下参数...让我们以脚本的第1条指令为例:wib 2E 0805 00

    -WIB =>写入主机的 I2C 命令

    -2E =>偏差地址

    -0805 =>操作码+寄存器地址  

    -00 =>要在寄存器上写入的值。

    (主机仅接受器件地址之后的2个字节的地址、并接受1个字节的写入指定的寄存器)

    因此,我如何才能从主机发送您的 CRC 方法:7-bit_Addr, R/W; 操作码;  CRC ;地址;  CRC ;数据;  CRC ;数据;  CRC ;。 数据;  CRC ;?

    例如、启用 CRC 后的第3条指令为 WIB 2E 0812 FF。 使用 CRC 计算、我得到以下 CRC 值:

    -08 => CRC:38

    -12 => CRC:7E.

    -FF=> CRC:F3

    我进行了测试、以两种不同的方式发送来自主机的指令、但没有成功结果:

    -选项 A: WIB 2E 08 38 12 7E FF F3.

    -选项 B:

    第38章我是谁
    延迟10
    WIB 2E12 7E
    延迟10
    WIB 2EFF F3

    3) I2C 读数。 如何处理读取值的 CRC? 例如、在不启用 CRC 的情况下、我发送下一个命令来读取与 AIN3相关的寄存器的 LSB:RIB 2E 10A6 1

    -rib =>读取主机的 I2C 命令

    -2E =>器件地址。

    -1006 =>操作码+稳压器 地址。

    -1 => 1个字节要读取

    主机应如何发送读取命令以遵循您的 CRC 操作码方法;  CRC ;地址;  CRC ;数据;  CRC? 如何在主机上算出读取值的 CRC?例如、在执行读取指令后、ADC 将发送到主机0x32。 我可以弄清楚、在启用 CRC 的情况下、ADC 发送的是数据;CRC。 因此、主机应读取2个字节:

    -字节1:0x32

    -字节2 (CRC):0x9E

    因此、主机应实现 Excel 工作表的 CRC 公式、以验证 CRC 值、是否正确? 不过、I2C 通信出现问题、数据已损坏、数据将损坏、CRC 也会损坏。 因此、主机无法验证在 ADC 上计算的读取数据最终是接收到的数据、当 i2c 总线出现问题且数据损坏时、是正确的吗?

    如您所见、此 CRC 主题上的问号太多、从主机的角度来看、有关如何处理此主题的信息也不多。 因此、如果您可以在此处发布 CRC 代码示例、其中主机将配置 ADC 并请求读取一个通道...

    提前感谢。

    您好!

    Enrique Perez