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.

[参考译文] ADS131M03:CRC 困难

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1226180/ads131m03-crc-difficulties

器件型号:ADS131M03

您好!  

我正在尝试使用器件的 CRC DIN 功能、即设置 MODE > RX_CRC_EN 位、并在每个 NULL 命令响应时检查状态> CRC_ERR 位。 我一直在使用 Saleae 逻辑分析仪来仔细检查我发送的所有数据、尤其是在使用 CRC 功能时。 我当前还清除了 MODE > CRC_TYPE 位、这意味着我正在使用数据表中称为"CCITT"的信息(尽管有些人将其称为"CCITT-false")。  

使用该算法、当我发送 NULL 命令时、我发送以下帧(24b 字长):0x 000000 1D0F00 000000 000000 000000 000000 000000 000000 000000、该帧在命令后立即对齐 CRC MSB (如数据表中所指定)。 我认为"0x1D0F"是正确的 CRC-CCITT (种子0xFFFF)、但在后续帧中对此的响应似乎始终设置了 SPI_CRC_ERR 位。 这对我来说尤其令人困惑、因为之前的 WREG 命令使用形式0b 010A AAAA ammm MMmm 进行正确响应、而不是使用状态寄存器(如果 CRC 不正确的话)进行正确响应。 因此、我非常有信心、我的 CRC 算法(使用已知工作的库、在测试系统中内置的 FastCRC 库)能够正常工作、而且器件的输入 CRC 校验也能正常工作。  我还通过 CRC 引擎运行了测试值(['1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'])并获得了正确答案(0x29B1)。 我当时想、可能设备的内部 CRC 引擎在每次检查后都没有重新播种、但由于连续的许多写入都是成功的、我认为情况不是这样。

我已经附加了一个由四个帧组成的序列-一个 WREG、一个 WREG、一个 NULL 和一个 NULL -这些帧表明了器件按照预期的方式对 WREG (具有正确的 CRC)做出响应、但在最后一个帧中、对之前的 NULL 的响应为0x3107、 它表示设置了 CRC_ERR 位、这意味着先前的命令(0x000、CRC 为0x1D04)是错误的。

您能否提供有关此处可能出现的问题的任何见解、或我可以尝试诊断的一些测试?

谢谢。

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

    尊敬的 Ben:

    欢迎来到我们的 E2E 论坛。

    似乎您的第一个时序(第一个字是 0x3107)是关于您的描述的最后一帧、而您的最后一个时序(第一个字是 0x4980) 实际上是第三个帧。 如果我的理解是正确的、您能否  在最后一次计时中发送0x 000000 000000 000000 000000 84F900而不是您在 MOSI 上发送的0x 000000 1D0F00 000000 000000 000000 000000 000000 000000 000000、然后在第一次计时中检查 MISO 上的第一个字(状态)?

    PS:当您发送0x 6700 WREG 命令时、您将0x00写入0x0E (CH1_CFG)寄存器、 您发送的寄存器数据比一个寄存器所需的数据多。 此外、当您发送0x 6980 WREG 命令时、您要将0x00写入0x13 (CH2_CFG)寄存器、 您发送的寄存器数据比一个寄存器所需的数据多。 请检查。

    此致、

    戴尔

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

    尊敬的 Dale:

    哦、天哪、抱歉、是的、这些数字是无序的-从顶端看、它们是4、1、2、3、 因为您推导出来。  

    我按照您的建议发送了帧(中间图像、如下所示)、但它仍然以设置了 CRC 错误位(底部图像、如下所示)进行响应。 顶部图像是启动器件后的第一个帧、是 MODE 寄存器的 WREG、用于设置 RX_CRC_EN 位(0x3110)。 我很不清楚为什么会这样做;0x84F9是连续24个零的 CRC、这意味着(因为我有24b 字) CRC 将使用半字节而不是字节进行编程?

    我对您的 PS 感到困惑-该器件配置为24b 字、因此(根据我的理解) WREG 命令实际上是0x670000、这意味着我要在地址0x0E (CH1_CFG)处写入一个寄存器、我要写入的数据是第二个字、 在本例中为0x000100。 由于每个寄存器是16b、并且字是 MSB 对齐的(带有"最低有效位(LSB)是零填充的以适应24或32位字大小。" [Datasheet、p. 36])、我认为我将0x0001写入 CH1_CFG 寄存器、这会将 CH1的输入多路复用器设置为"短接"。 帧中的最后一个字(在两个零帧之前、根据需要("在 DIN 上、主机提供命令;如果启用输入 CRC、则提供命令 CRC;如果禁用输入 CRC、则提供一个零字;以及另外三个零字。" [数据表、第35页]))是前两个字的 CRC、即 WREG 及其数据(0x 670000 000100)。 我有什么问题吗?

    谢谢你。

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

    尊敬的 Ben:

    谢谢、我将详细介绍并尽快与您联系。

    此致、

    戴尔

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

    尊敬的 Ben:

    我很抱歉回复的太晚了,我也为你的困惑道歉。  我试图说的是"01"写入寄存器、而不是"00"、这是我的拼写错误。 我还注意到0xAA78和0x080B 是您的 CRC 字。 请忽略上面我的 PS。

    我今天使用特定软件在 M04硬件上复制了您的确切命令和时序、还尝试了不同的帧格式、但我看到0x110F 显示为第一个状态字、表示发生了输入 CRC 错误。 我将与 设计 工程师交谈、并在明天尝试给您回复。 感谢您的耐心。

    此致、

    戴尔

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

    尊敬的 Dale:  

    感谢您进行澄清和登记。 我期待听到设计工程师的讲话。  

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

    您好 Ben

    这位设计工程师本周外出。 另外、他的经理出差到5月19日、我不确定我得到他的回复的速度有多快、因此请允许延迟几天时间与您联系。 感谢您的理解。

    此致、

    戴尔

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

    尊敬的 Ben:

    感谢您的耐心。 请使用0xCC9C 而不是0x1D0F 作为输入 CRC、具体  取决于以下时序所采用的格式。 0x1D0F 是0x0000的 CRC、不正确、 0xCC9C 是 0x000000的正确 CRC。 请注意、NULL 命令是16位命令、但字长为24位、因此输入 CRC 应计数24个零、而不是16个零。

    此致、

    戴尔

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

     我觉得很傻。 谢谢! 立即工作。