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.

[参考译文] TLC59401:CAN't 接收 DC 数据的 MSB

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1347147/tlc59401-can-t-receive-msb-of-dc-data

器件型号:TLC59401
主题中讨论的其他器件: TLC5940

当我为 TLC59401编写驱动程序软件(python)时、我发现 OUT15 LED 比其他 LED 更亮。

对于全部16个 LED、发送相同的直流和相同的 GS 值、但仅 OUT15 LED 约为亮度的一半。 如果我发送 DC=32和任何 GS 值、则只有 OUT15不能开启。

我认为 TLC59401无法接收直流数据的 MSB=1。

上方的图表是 SCLK/SIN/Sout/XLAT 的分析器。 DC= 48 (110000)至32 LED (TLC59401进行级联)发现了 SIN、但 SOUT 的 MSB 似乎为直流= 16 (010000)、因此第二个 TLC59401上的 OUT15比其他的要亮一些。

这全部是针对 DC=32和 GS=32的信号连接至全部32个 LED (针对两个 TLC59401)。 我尝试了位 Bang 驱动器而不是 SPI、但结果是相同的。 该问题(MSB 强制为0)不在 GS 数据中发生、仅在 DC 数据上发生。

如果我将 SPI 模式0更改为3、则此问题消失了。 但 SPI 模式3会导致"CLK 空闲为高电平"、这与数据表不同。

我的 LED 板有四个 TLC59401和64个 LED、我编写了将96位虚拟数据添加到直流数据顶部的驱动程序软件、工作正常。   

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

    您好!

    感谢您的联系!

    实际上、我最近收到了另一位客户的同样问题。 尽管我们尚未对其进行验证。 但是基于您的测试信息和另一位客户的测试波形。 TLC59401存在此问题。

    您能否发送两次 DC 命令以避免此问题?

    BR、Jared

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

    是的,"两次直流数据发送"可以避免这个问题,我测试。 这与"在发送直流数据之前发送96位虚拟数据"相同。

    这些方法会将损坏的 DC 数据推送到 SOUT 的未使用端。

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

    尊敬的 Susumu:

    感谢您的反馈、

    我将与我们的专家讨论并在稍后回复您。 谢谢!

    BR、Jared

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

    尊敬的 Susumu:

    我怀疑您的接口上的寄生电容会导致第一个数据包的信号失真、某些数据丢失。 您能否在开头发送一些与 TLC59401无关的命令、然后转到发送您的第一个 命令。

    BR、Jared

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

    感谢您的支持。

    TLC59401没有芯片选择、因此无法发送"无关数据"...

    我在 MODE=1之前尝试发送虚拟 SCLK、这意味着添加虚拟 GS 数据、它防止 MSB 损坏直流数据。

    这是 MSB 正常时 SCLK (橙色)和 SOUT (紫色)的示波器波形。

    这与 MSB 为 NG 时的波形相同。

    当 MSB 正常时(使用虚拟数据)、这是 SCLK (橙色)和 SIN (紫色)的波形。

    这是 MSB 为 NG (无虚假数据)时的波形。

    我无法 在 SCLK 和 SIN 上找到 OK/NG 波形之间的差异、但 SOUT 在有/无虚拟数据的情况下有所不同。

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

    尊敬的  Susumu:

    感谢您的快速反馈和如此详细的波形。

    我的意思是"无关数据"与您的意思是"虚拟数据"相同。 首先发送虚拟数据的原因是为了避免寄生电容器的影响。 我是否知道波形是从 MCU 侧还是 TLC59401侧? 如果您首先添加一些虚拟数据、问题是否仍然会发生?

    BR、Jared

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

    我认为这个问题是由 SOUT 的输出变化逻辑引起的。

    我有4个级联 TLC59401、因此为16x4 LED 发送63到0的直流数据值。 这种波形是第一个级联 TLC 的所有96x4 SCLK/SIN/SOUT 的信号。 因此、最后由 XLAT 锁存、第一个 TLC 应有15到0个直流值。

    但第四个 TLC 会收到31,62,...,48 DC 值,而不是正确的63至48。

    我想 TLC 具有通常在直流模式和 GS 模式上使用的输入移位寄存器。

    SOUT 从 A:输入移位缓冲器、B:DC 寄存器、C:GS 寄存器更改为其他值。 在这个波形中、SOUT 的15到4值是从之前的 DC 数据中锁存的 DC 寄存器的不必要泄露(我想)。 这种 A/B/C 更改逻辑可能 晚了一个时钟、我认为会发生这种问题。

    如果您全部将63 (=0x3f)发送到 DC、则永远不会遇到此问题。

    为了重新出现这个问题,我写了这些代码与以下步骤。

    1.上电

    所有寄存器复位

      MODE = 1 (直流)

      DC=0至全部(96 SCLK x TLCS 的 num)

      XLAT 1至0

      MODE = 0 (GS)

      Gs=0至全部(192 SCLK x TLCS 数量)  

      XLAT 1至0

    正常数据发送

      MODE = 1 (直流)

      DC=32到全部(96 SCLK x TLCS 数量)

      XLAT 1至0

      MODE = 0 (GS)

      Gs=2048至全部(192 SCLK x TLCS 编号)

      XLAT 1至0

    3.启动 GSCLK (PWM)和空白

    在这种情况下、级联 TLCS OUT15上的 LED 端将不会开启。

    为了避免这种问题、这些方法将起作用。

    1.发送两次直流数据。

    2.在 DC 数据顶部添加一些虚拟数据。   

    3.在发送 DC 数据之前发送虚拟 GS 数据而不使用 XLAT。

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

    我认为 SCLK 和 SIN 与 MCU 侧的波形相同。 MCU 是 Raspberry Pi Zero 2、在 MCU 和 TLC 之间、有 TXB0108PW 可将电压从3.3V 更改为5.0V。

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

    这个波形是具有一些假 SCLK 的良好模式。

    DC 寄存器泄漏发生在 GS 数据中。 请见以下信号。

    我发送 GS=2048至63-48 (第四个 TLC 的16个 LED )。 可以看到来自 DC 寄存器的泄漏。 但直流数据很短、因此不会损坏 GS 数据的 MSB。

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

    尊敬的 Susumu:

    非常感谢您的详细测试!

    起初、由于这款器件已经 RTM 存在了很长时间、我认为应该没有问题。 根据我的经验、我可以判断信号失真是否是由接口上的寄生效应引起的。 不过、根据您的详细测试结果、 TLC59401可能存在问题。

    主要原因是、我们以前没有 EVM 板、所以我无法在我们办公室对其进行验证、但我相信您的测试根据当前结果、您还需要我们帮助吗?

    BR、Jared

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

    在我的实验中、避免这个问题的最低方法是:

      在上次 GS 数据 XLAT 或电路启动后、

    "只有一个额外的 SCLK 脉冲"

      数据之前的时钟模式。

    "两个直流数据"和"向顶部直流数据添加一些虚拟数据"适用、但这些是详细的代码。

    我认为我们的电路没有前文所示的示波器波形造成严重的信号失真。 尽管 SCLK 速度很快、但该问题仍会100%发生、因此寄生电容无关紧要。  

    有人没有 注意到这个问题的原因是幸运的是、大家只使用了所有0x3F DC 数据、或者无意识地发送两次 DC 数据或额外的 SCLK。

    你不认为如果我的指出是真的,通知其他用户是需要的 TLC 和回避代码的这种行为?

     

    大约20年前,当我是一名 VLSI 的设计师时,我经历了这样的逻辑问题,这是我的错误,我在真实的电路板和 Verilog 仿真中验证,并编写了设备驱动程序代码,以恢复我的错误并发布给 VLSI 用户。

    我建议验证这种行为 适合其他 TLC 用户

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

    尊敬的 Susumu:

    感谢您在这里所做的所有工作! 我会让其他 TLC 用户知道并验证他们是否有此问题。

    非常感谢!

    BR、Jared

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

    来自 Aidan Holmes 提供的 TLC5940样片驱动器(位砰)(https://github.com/AidanHolmes/tlc5940)、

    复位例程上只有首次执行 SCLK 1至0代码。 该行为、它可以防止该行为。

    DEF 复位(自):

      '复位引脚值'
      GPIO.OUTPUT (self._blankpin、1)#设置为高电平以禁用输出(空白)
      GPIO.OUTPUT (self._progpin、0)#高电平用于写入点数据、低电平用于灰度
      GPIO.OUTPUT (self._latchpin、0)#设为高电平以完成对寄存器的写入
      GPIO.Output (self._clkpin、0)
      GPIO.Output (self._serialpin、0)
      self.dotvalues =[0x3F]* 16
      self._grayvalues =[0x0FFF]* 16
      self.wRITE_dot_values()#初始化点值
      self.writ_gray_values()#初始化 gray 值
      如果自己。_first:
        GPIO.Output (self._clkpin、1)
        GPIO.Output (self._clkpin、0)
        self._first = 0

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

    尊敬的 Susumu:

    感谢您的分享!

    BR、Jared