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.

[参考译文] TMP126:TMP126

Guru**** 2756835 points

Other Parts Discussed in Thread: TMP126, TMP126EVM, INA229

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1424888/tmp126-tmp126

器件型号:TMP126
Thread 中讨论的其他器件:INA229

工具与软件:

您好!

我正在使用 STM32F469BIT7微控制器通过 SPI1总线与 TMP126芯片通信。 不过、我会遇到芯片不响应命令(例如读取配置寄存器、温度结果寄存器、THigh_Limit 和 TLow_Limit 寄存器值)的问题。

根据我的理解、TMP126需要16位数据传输。 因此、我已将 SPI 总线配置为使用16位数据帧进行通信。

根据 TMP126数据表、"数据在串行时钟(SCLK)的下降边沿上计时输出、而数据在 SCLK 的上升边沿上计时输入。" 这意味着 SPI 模式应该为1、其中 CPOL = 0且 CPHA = 1。

以下是我配置的 SPI 设置:

  • SPI 速度:5.625 MHz
  • CPOL:0
  • CPHA:1
  • 数据宽度:16位

SPI 总线配置如下:

//设置 SPI 参数
Spi1Handle_power_board.instance        = SPI1_POWER_BOARD;
Spi1Handle_power_board.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
Spi1Handle_power_board.Init.direction     = SPI_DIRECTION_2LINE;
Spi1Handle_power_board.Init.CLKPhase      = SPI_PHASE_2EDGE;
Spi1Handle_power_board.Init.CLKPolarity    = SPI_POLARIT_LOW
Spi1Handle_power_board.Init.DataSize      = SPI_DATASIZE_16BIT;
Spi1Handle_power_board.Init.FirstBit      = SPI_FIRSTBIT_MSB;
Spi1Handle_power_board.Init.Ti 模式       = SPI_TIMODE_DISABLE
Spi1Handle_power_board.Init.CRCCalculation   = SPI_CRCCALCULATION_DISABLE
Spi1Handle_power_board.Init.CRCPolynomial   =七;
Spi1Handle_power_board.Init.nss        = SPI_NSS_soft;
Spi1Handle_power_board.Init.Mode        = SPI_MODE_MASTER;
请查找随附的原理图以供参考。 您能否告知我可能做错了什么? 感谢您的帮助!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为应该是 CPOL=0和 CPHA=0。 通常、这里的错误会导致数据移位、而不是无数据移位。 但是、TMP126可能会忽略 它不理解的命令字。  

    我还担心使用10千欧电阻器可能难以实现5MHz。 您是否使用示波器查看过通信?

    谢谢!

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

    我一直在使用逻辑分析仪监控事务。 当 CPHA 设置为1时、不会移位任何数据。 然而、当 CPHA 设置为0时、数据会移位。

    根据数据表、TMP126可以在最大10 MHz 下运行。 我最初将其配置为5.625 MHz、但后来按照您的建议将其更改为0.7 MHz、并采集数据供您参考。 尽管如此、我仍然遇到了与芯片配置和数据读取相关的问题。

    以下是 CPHA = 1时的快照:

    数据表示(Micro DataOut / Micro datain):

    1. 第一个数据 :配置寄存器的写命令(复位命令): RegAddr = 0x0003, Data = 0x0100
    2. 良好 :1毫秒
    3. 第二个数据 :配置寄存器的写命令:RegAddr = 0x0003、Data = 0x0002 (连续转换62.5ms)
    4. 第三个数据 :用于验证配置寄存器的读取命令。 用0x0000进行响应

    其余参数遵循警报使能寄存器、温度下限、上限、迟滞、温度压摆率限值和连续温度结果寄存器的配置。

    当 CPHA = 1时、写入命令值是正确的、但 TMP126没有响应。

    下面的快照展示了数据和 SCLK 之间的同步。

    以下是 CPHA = 0时的快照:

    写入/读取命令值似乎在通过 SPI 总线发送时受到干扰、如下所示:

    下面的快照展示了数据和 SCLK 之间的同步。

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

    尊敬的任、

    我已经测试了所有四种 SPI 模式(CPOL 和 CPHA 的组合)、模式1是唯一在 SPI 总线上输出正确值的模式。 我还尝试按如下方式更改频率:

    • 90 MHz / 256 = 350kHz
    • 90 MHz / 128 = 700kHz
    • 90 MHz / 64 = 1.4 MHz
    • 90 MHz / 32 = 2.8125 MHz
    • 90 MHz / 16 = 5.625 MHz

    但是、TMP126没有响应或零响应。 我不确定还能做些什么来使其正常工作。 非常感谢您的帮助!

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

    您必须将主机控制器和逻辑分析仪配置为相同的 CPOL 和 CPHA 设置、以避免分析仪中的数据出现移位或不正确。  

    在 TMP126EVM 中、我可以看到它使用 CPOL=1、CPHA=1通信、如此处所示:

    显示的数据是 TMP126上的共享 SIO 引脚。 我无法像在您的设置中那样在电阻器之前探测 MOSI 引脚。 请注意、主机必须为第3个和第4个字节发送0xFF 0xFF、以便 TMP126在此期间进行响应。 我在您的捕获中看不到这种情况。

    我建议使用 CPOL=0 CPHA=0、因为数据表中显示时钟处于闲置状态低电平。 我可以使用 CPOL=0 CPHA=0将 TMP126EVM GUI 更改为传输、看起来像这样:

    我共享的两个事务都是对器件 ID 寄存器0x0C 的读取。 我的原型 TMP126报告的 ID 为0x0126、其中数据表规定、生产样片应报告0x2126。 在任何速率下、CPOL1/CPHA1都是 CPOL0/CPHA0的互补配置。 您可以看到、它们都与 TMP126配合使用。 但是、CPOL1/CPHA0或 CPOL0/CPHA1配置将与 TMP126不兼容。  

    请告诉我这是否有助于消除您对 CPOL/CPHA 的困惑。  

    我确实注意到、在第一个字节期间有东西拉低了您的 MISO 线。 这不应来自 TMP126 -您的 SPI 引脚是否与另外一个器件共用?

    您的分析仪能够记录模拟、我想看看您能否分享它。 这是为了解决上拉和总线频率问题。

    谢谢!

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

    同意! 我已将逻辑分析仪设置为 CPOL = 0和 CPHA = 0。

    GPIO 引脚配置为 SPI 设置的一部分、引脚设置为无下拉/下拉。 我不认为引脚应配置上拉电阻器。 不管 SPI GPIO 引脚是设置为下拉、NOPULL 还是上拉、相同的 SPI 配置都能够完美地用于多个 INA229芯片。 仅供参考。

    但是、我已将配置更改为 GPIO 引脚上拉、我观察到这些引脚在空闲状态期间为高电平。 芯片正在响应、但值不正确。

    大多数时候、接收到的数据与发送的数据完全相同。


    此外、3个 TMP126传感器和2个 INA229芯片之间共享 SPI1。

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

    上拉意味着引脚会限制其驱动强度。 您可以针对其全驱动强度配置 MOSI 引脚吗? 10千欧电阻限制了 MOSI 控制 MISO/SIO 的能力、因此它不应被其配置进一步限制。 您的 MISO 应该是纯输入、没有拉取。 您仍在 MISO 上表现出奇怪的行为、表明引脚不稳定。 应该在模拟中查看这一点。 它可能会向您显示电平在移动、就像浮动一样。

    谢谢!

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

    我有点困惑。 数据表中并未提及您到目前为止一直提供的建议。

    例如:

    • 虚拟字节应为0xFF、而不是0x00。
    • 频率与 MOSI 引脚上的可变电阻值成正比?
    • 我没有看到任何基于可变电阻器值的 MOSI 引脚驱动能力的信息

    我建议在数据表中包含所有这些信息、以便更轻松地正确实施。

    您能否确认以下配置是否是您推荐的配置? 这是我一直在关注的问题:

    在微控制器端:

    • SCLK:无拉
    • MISO:无拉取
    • MOSI: 无拉

    为了方便大家了解、我在将预分频器配置为256时可以读取温度值。

    90 MHz / 256 = 350kHz

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

    尊敬的任、

    非常感谢您的支持!

    我能够弄清楚它并使它起作用、但不清楚实现更高频率和正确驱动该 MOSI 引脚的芯片所能达到的电阻值有多低!

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

    MOSI 上的电阻器用于使 MOSI 像开漏驱动器一样运行。 它通过限制来自 MOSI 的电流来实现这一点。 如果您将 GPIO 配置为也限制其驱动强度、它将比预期的更弱。  

    TMP126有一个用于数据传输的单一双向 SIO 引脚。 有时 SIO 将是输出、有时则是输入。 我们无法将 SIO (有时将用作输出)直接连接到另一个输出 MOSI。 如果两个输出之一尝试灌入逻辑低电平电流、而另一个输出尝试拉取逻辑高电平电流、则只有当其中一个输出断开时、才会停止大电流。 为防止这种情况发生、我们在 MOSI 上放置了一个电阻器来限制其输出电流。 这使得它的运行方式与一个具有开漏输出的总线相似:信号的上升时间现在受到由电阻器和任一寄生电容组成的 RC 电路的限制。 如果您可以在 TMP126 SIO 成为输出之前禁用 MOSI 输出、则可以在不使用电阻器的情况下避免该问题。 您必须在软件中仔细控制此设置以避免损坏硬件。 如果这样做、您可以避免 RC 电路和糟糕的上升时间、从而实现可能更高的时钟速率。 这就是我建议您启用 SIO 引脚的模拟捕获并观察上升/下降时间的原因。 您的电阻器和寄生电容可能不支持 TMP126的最大时钟速率。

    谢谢!