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.

[参考译文] TIC12400-Q1:某些寄存器写入/读取未提供预期结果

Guru**** 2511985 points
Other Parts Discussed in Thread: TIC12400-Q1

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1397075/tic12400-q1-some-register-writes-reads-are-not-giving-expected-results

器件型号:TIC12400-Q1

工具与软件:

您好!

对于在 Linux 6.6上运行的 iMX8上的一款产品、我们正在使用 TIC12400-Q1 MSDI 至 SPI。 我们参考了数据表并尝试配置寄存器
连接到串行器。 但我们观察到、有些寄存器配置成功、但有些寄存器配置失败。 写入、然后
读取在同一寄存器上执行、我们会得到不同的值。 这仅在某些寄存器中观察到。 例如、当 THRES_COMP 寄存器为时
针对所有输入配置为4V。

写入-
root@imx8mp-falcon:~# spidev_test -v -D /dev/spidev2.0 -H 0 -b 32 -p "\xFE\x1F\x00\xA2"
[14336.987180]设置模式1、cs_high、32 bits/w、最大1000000 Hz --> 0
[14337.004606]设置模式1、cs_high、32 bits/w、最大1000000 Hz --> 0
[14337.022013]设置模式1、cs_high、32 bits/w、最大频率500000Hz --> 0
SPI 模式:0x1
每个字的位数:32
最大速度:500000Hz (500kHz)
TX | FE 1F 00 A2 _________ _______ _______ _______ _______ _______||||
Rx | 01 00 00 22 __________ _______ _______ _______ _______ _______|..."|

读取-
root@imx8mp-falcon:~# spidev_test -v -D /dev/spidev2.0 -H 0 -b 32 -p "\x00\x00\x00\x22"
[14483.315089]设置模式1、cs_high、32 bits/w、最大1000000 Hz --> 0
[14483.332530]设置模式1、cs_high、32 bits/w、最大1000000 Hz --> 0
[14483.349950]设置模式1、cs_high、32位/w、最大频率500000Hz -> 0
SPI 模式:0x1
每个字的位数:32
最大速度:500000Hz (500kHz)
Tx | 00 00 00 22 __________ _______ _______ _______ _______ _______|..."|
Rx | 01 00 00 22 __________ _______ _______ _______ _______ _______|..."|

但是某些寄存器写入(如 CS_SELECT (0x1C)、模式(0x32)、器件 ID (0x1))成功。

那么、您可以在此处说明可能存在的原因。 如果您需要更多信息、请告诉我。

并在此处附加该电路的屏幕截图。

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

    Prashant、您好!

    您能否共享初始化序列中每个寄存器的完整配置序列尝试?  

    最可能的问题是、在完成所有器件寄存器的配置之前、您需要在 CONFIG 寄存器(0x1A[11]= 1)中设置 TRIGGER 位。  设置 TRIGGER 位后、其他配置寄存器变为只读状态、器件会在 INx 引脚上启动轮询序列。  如果在配置完成之前触发位被设置为1、则寄存器将不接受新的写入值、并且将返回在读取期间触发位被设置为1时的寄存器值。

    另一个可能的原因可能是某些 SPI 写入某些寄存器时出现 SPI 错误、这可能是因为奇偶校验错误、该错误可能会导致器件拒绝寄存器的新值并保留之前的值。  检查返回不正确值的寄存器的格式和字节值可以确定这是否是可能的原因。  您还可以尝试在每次 SPI 写入后读取 INT_STAT 寄存器并读取任何其他寄存器、以作为调试工具检查可能存在的 SPI 和奇偶校验错误。

    此致、

    Jonathan

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

    谢谢。 它有所帮助

    您可以分享将引脚配置为模拟输入的步骤吗? 并读取电压。

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

    Prashant、您好!

    我首先建议查看 配置 TIC12400-Q1多开关检测接口(MSDI)的步骤 应用手册(链接)

    它提供了一种更分步的方法来配置器件设置(包括 ADC)。  如果您还有在本应用手册中未解决的具体问题、请告诉我。

    此致、

    Jonathan

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

    Prashant、您好!

    如果我正确地为 INT_EN_CFG1寄存器(0x25)解码 SPI 字节序列、看起来您正在将寄存器值设置为0x000400。  因此、该寄存器的位21-20被设置为"00"、这是"IN10不产生中断"的设置。

    我不确定您的 THRESMAP_CFG1寄存器配置是否正确。  我想您要尝试使用0x000080的值配置此寄存器、该值与将 THRES2分配给 THRESMAP_IN10字段的设置相对应。  我认为这会使您的字节序列"\x00\x01\x00\xDE"

    此致、

    Jonathan

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

    谢谢 Jonathan。  ADC 模式正常工作。

    如前几条消息所述、我们将 IN10用于 ADC。 您可以告诉我电压测量的顺序吗?

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

    Prashant、您好!

    我不确定我是否了解您提出的电压测量问题。  如果您询问如何根据 ADC 代码计算电压、则计算结果为:

    ADCcode = VINX x 1024÷6

    此致、

    Jonathan

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

    谢谢。 读取 ADC 引脚上的电压。

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

    太棒了! 很高兴它现在可以为您效劳。  谢谢您让我知道。

    此致、

    Jonathan

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

    Jonathan、您好!

    我们看到另外一个问题。

    当配置为比较器模式时、仅当湿性电流设置为0 mA 时才能看到产生的中断。
    当湿性电流配置为任何其他非零值时、当线路上的输入电压超过阈值时、不会生成中断。
    您可以在此处说明可能的原因。

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

    Prashant、您好!

    如果您可以提供您现在使用的器件寄存器配置以及连接到输入引脚的开关电路的原理图表示、我可以看一下。

    此致、

    Jonathan

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

    Prashant、您好!

    为了澄清一下、我看到了早些时候发布的原理图、但它没有显示开关。 看到湿性电流将流经的完整路径会有所帮助。

    此致、

    Jonathan

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

    Jonathan、您好!

    附上原理图的屏幕截图。 请告诉我这是可以的、或者您需要任何其他信息。

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

    Prashant、您好!

    您的原理图仅使非板载端口连接器短路。  您提供的原理图中是否未显示当前路径中的任何其他元件?  您是否使用了物理开关、如果使用了物理开关、它们是否已连接到 GND?  

    此致、

    Jonathan

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

    Jonathan、您好!

    开关输入线路连接到另一侧的物理开关。 我们将这些物理开关设置为高电平、然后读取状态和中断、从而进行测试。

    连接原理图的连接器页面。 请告诉我这是否澄清。

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

    Prashant、您好!

    感谢您提供有关开关的更多信息。  我不知道您使用的是高侧开关配置。  这将要求器件处于在 CS_SELECT 寄存器0x1C 中配置的灌电流模式。  此寄存器值不在您之前的帖子中、并且您未为我提供更新的值、因此我假设您将其保留为默认值、即针对电流源模式设置的默认值、这需要低侧开关配置(开关至接地)。

    如果您处于电流源模式、则器件将从 INx 引脚的 VS 电源拉取电流。  如果您处于电流吸收模式、该器件将向 INx 引脚灌入电流、直至 GND。

    如果您将一个高侧开关连接到 INx 引脚、并且您处于电流源模式、则不会有良好的接地路径使湿性电流流动、并且 INx 引脚电压将保持在检测阈值以上。

    请确认寄存器配置、我还建议您验证示波器上的实际引脚电压、以确保它们达到预期的电平。

    此致、

    Jonathan

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

    Prashant、您好!

    这些器件的基本工作原理为欧姆定律(V = I*R)、因此电压电平基于电阻两端的压降以及一定的电流。

    使用电流源配置时、GND 或0V 是"固定"电压基准、电阻位于 GND 和 INx 引脚之间。  因此、INx 引脚电压始终是电阻两端电压降的乘积(Vinx = I*R)。

    但是、在灌电流配置中、电阻位于电源电压和 INx 引脚之间、因此电源电压变为"固定"电压基准。  然后、INx 引脚电压是从电源电压中减去电阻两端的压降。 (Vinx = Vs -(I*R))

    从原理图中可以看到一个100欧姆的串联电阻器、因此即使在15mA 的最大湿性电流阈值下、该100欧姆电阻器上的最大压降为1.5V。  因此、您的 INx 引脚电压将仅比电源电压低1.5V。  对于灌电流配置、您需要更大的串联电阻、以产生足够大的压降、使电压降至比较器或 ADC 电压阈值以下。

    我也对您的21V 至22V 电平有疑问或顾虑。  您使用的电源电压是多少?  TIC12400-Q1是12V 器件、可承受高达35V 的电压电平、但不应在大于16V 的稳定电压下运行。  如果工作电压大于16V、则可以在某些器件中使用较长的时间、因此只能在12V 系统中使用。

    此致、

    Jonathan

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

    Jonathan、您好!

    感谢您提供信息。

    • 所以,我相信比较器遵循的顺序是正确的,对吗?.

    • 在开关开路条件下的 CSI 模式下、当湿性电流设置为非零值时、我们在 INx 引脚上观察到21V 的电压。
      IC 芯片应仅在拉电流模式下提供电压、而不在灌电流模式下提供电压。 请确认。

            那么、问题是当湿性电流较高时、为什么在 CSI 模式下 INx 引脚上会出现高电压(即21V)?

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

    Prashant、您好!

    对于5mA 配置、IN0_IN1电流电平似乎设置为0mA、而 IN10电流电平似乎设置为具有您的值的1mA。  否则、在具有2V 阈值和灌电流模式的比较器模式下、您的 SPI 序列看起来正确。

    我对您拥有的21V 至22V 电平也有疑问或顾虑。  您使用的电源电压是多少?  [报价]

    这里是器件相对于电流源、灌电流和内部多路复用器的工作方式的简化图。  该器件的工作方式更像限流器、可拉取或灌入高达配置的湿性电流电平的电流。  不过、欧姆定律是一般原理、因此 INx 引脚上的电压电平将取决于外部电阻负载。  该器件不会"强制"恒定电流电平、并且由于最大电压电平是 VS 电源或电池电压、因此大电阻负载可能会导致较低的电流电平。

    在采用灌电流配置的情况下、INx 引脚和 GND 之间通过 FET 创建了一条低阻抗路径。  由于这些 FET 位于 GND 和 INx 引脚之间、因此存在一定的压降、会强制最小 INx 引脚电压达到数据表中指定的>0V 电平。  但是、器件不会在 INx 引脚上放置21V 电压、该电平必须来自外部源。

    在电流源配置中、在 VS 电源引脚和 INx 引脚之间创建一条低阻抗路径。  因此、可在 INx 引脚上放置的最大电压是二极管的压降(0.6V)小于 VS 电源电压。

    在0mA 配置中、会有一些漏电流流经 MUX 电路(在数据表中指定为+/- 110uA)、仅当特定 INx 通道主动连接到比较器或 ADC 进行采样时(18-24us)、才会出现该电流。  如果 INx 引脚上的外部电路未提供到 GND 的低阻抗路径或具有足够的滤波电容来吸收此电流、它可能会暂时将 INx 引脚拉至高电平、并对要采样的电压增加一些误差。  但是、在0mA 情况下、每个引脚上的0.1 μ F 电容和外部电路应该可以防止 INx 引脚上出现大电压。

    在灌电流模式下、在没有外部源的情况下、INx 引脚上看到的最大电压为 Vcsi_drop、它的最大电平为2.1V (远低于21V)。  因此、我会检查是否有外部源将 INx 引脚拉至该高电压。

    此致、

    Jonathan

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

    Jonathan、您好!

    感谢您的详细解释。

    • 在 CSO 模式下、是否可以添加内部上拉电阻器来实现0 mA 湿性电流?

    •  我们还在验证引脚10上的 ADC 模式。 仅当湿性电流为0mA 时、才会生成中断。 更高的湿性电流不会产生中断。 共享以下序列。 请提供您的建议。

    spidev_test -v -D /dev/spidev2.0 -H 0 -b 32 -p "\x00\x00\x00\x04"- INT_STAT
    spidev_test -v -D /dev/spidev2.0 -H 0 -b 32 -p "\x00\x08\x00\XE4"- MODE - ADC (10行)
    spidev_test -v -D /dev/spidev2.0 -H 0 -b 32 -p "\x00\x00\x00\xBA"-湿性电流0mA
    spidev_test -v -D /dev/spidev2.0 -H 0 -b 32 -p "\xFE\XFF\XFF\xB7"- IN_EN 所有通道
    spidev_test -v -D /dev/spidev2.0 -H 0 -b 32 -p "\xFE\x1F\x00\XC8"- INT_EN_CFG0 -全部启用
    spidev_test -v -D /dev/spidev2.0 -H 0 -b 32 -p "\x01\x00\x60\xCA"- INT_EN_CFG1 - ADC 输入中断发生器(10)
    spidev_test -v -D /dev/spidev2.0 -H 0 -b 32 -p "\xA4\x06\x00\xD2"- THRES_CFG0 19.5v
    spidev_test -v -D /dev/spidev2.0 -H 0 -b 32 -p "\x00\x14\x04\xB4"- config - Trigger、CRC、VS_MEAS_EN
    spidev_test -v -D /dev/spidev2.0 -H 0 -b 32 -p "\x00\x00\x00\x04"- INT_STAT

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

    Prashant、您好!

    否、无法添加内部上拉电阻器。  湿性电流实际上与添加上拉电阻器相同。  则需要在外部添加任何所需的上拉电阻器。

    我将尝试使用 EVM 来查看您的序列。

    此致、

    Jonathan

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

    Prashant、您好!

    您的注意事项表明 THRES_CFG0为19.5V、但请注意、ADC 仅具有0V 至6V 的范围。  因此、您要配置大约4.98V 的 ADC 中断阈值。  这是您需要的阈值电压吗?  我不明白19.5V 注释。

    您能否测量和验证 IN10引脚上的实际电压、以确保其交叉点高于和低于4.98V?

    此致、

    Jonathan