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.

[参考译文] Linux/TPS23861:TPS23861:PoE、具有6个 TPS23861-I2C(24端口),随机断电

Guru**** 2492385 points
Other Parts Discussed in Thread: TPS23861

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/704120/linux-tps23861-tps23861-poe-with-6x-tps23861-i2c-24port-random-power-off

器件型号:TPS23861

工具/软件:Linux

您好;

我们对24端口 PoE 开关 (__LW_AT__6x TPS23861)使用半自动模式。 正常情况下、它工作正常、但有时我们的软件通过电源事件寄存器(03H)检测电源状态变化。 (每次一个 ps23861的4个端口检测到电源更改事件。)
这导致随机芯片的四个端口关闭并重新启动。 大约10到20秒
现在、我们有寄存器03H、05h、07h、09h、0Bh 的日志、 但仍然无法找到原因。

下面这是我们的 ps23861寄存器的初始化代码

(i=0;<g_poe_chip_num; i++)

PoE_CHILE_REG_SET (I、0x19、0x0F);/* POFF/PWON *
PoE_CHILE_REG_SET (I、0x12、0xAA);/*操作模式:半自动*
PoE_CHIP_REG_SET (I、0x13、0x0F);/*断开使能*
PoE_CHILE_REG_SET (I、0x29、0x00);/*断开阈值*

PoE_CHIP_REG_SET (I、0x14、0xFF);/*检测/分类使能*
PoE_CHIP_REG_SET (I、0x18、0xFF);/*检测/分类重启*
PoE_CHIP_REG_SET (I、0x21、0x55);//如果发生4类分类,则设置两个事件分类

PoE_CHILE_REG_SET (I、0x2A、0x66);/* ICUT21配置:645mA */
PoE_CHILE_REG_SET (I、0x2B、0x66);/* ICUT43配置:645mA *

我们如何找到问题? 我们是否可以收集任何其他信息?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    添加:
    顺便说一下、我在从这个网站下载的 main_semi 自动.c 文件中找到了下面的代码。 normal_operating 和 Vmark_workaround 之间有何区别?

    #if (NORMAL 运行= 1)
    TPS_SetPortPower (sysPortNum、TPS_ON);
    #endif

    #if (Vmark_workaround = 1)
    TPS_SetPortOpMode (sysPortNum、OPERATing_MODE_AUTO);
    #endif
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     尊敬的用户5237297:

    当您看到电源状态发生变化时、您可以检查寄存器0x00~0x10的状态吗? 我想检查端口上是否发生了任何故障。 您还可以向我发送原理图吗? 谢谢。

    此致、

    一分钱

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

    这是绕过 IC 先前版本中的 Vmark 问题的权变措施。 您可以向我发送您的分类波形(软件应使用0x19打开端口而不使用变通办法)、我可以检查您的器件是否存在 Vmark 问题。 谢谢。

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

    e2e.ti.com/.../TPS23861.doc

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Penny;
    1、Vmark 代表?的含义
    2、我们的代码:
    HAL_i2c_read_n (POE_PS23861_SLAVE_ADDR_BASE+I、0x03、buf+3、1);
    HAL_i2c_read_n (POE_PS23861_SLAVE_ADDR_BASE+I、0x05、buf+5、1);
    HAL_i2c_read_n (POE_PS23861_SLAVE_ADDR_BASE+I、0x07、buf+7、1);
    HAL_i2c_read_n (POE_PS23861_SLAVE_ADDR_BASE+I、0x09、buf+9、1);
    HAL_i2c_read_n (POE_PS23861_SLAVE_ADDR_BASE+I、0x0B、buf+0xB、1);

    if (buf[0xB]和(1<<7))

    vlog_write (vlog_notification、"PoE"、"power"、""、"POE 芯片[%d]发生热关断。"、i);


    if (buf[0xB]和(1<<5))

    vlog_write (vlog_notification、"PoE"、"POWER"、""、"POE 芯片[%d]发生了 VDD UVLO。"、I);


    if (buf[0xB]和(1<<4))

    vlog_write (vlog_notification、"PoE"、"POWER"、""、"POE 芯片[%d]发生了 VPWR 欠压。"、i);


    对于(j=0、<POE_PS23861_PORT_NUM; j++)

    UIF_t * UIF;

    端口= POE_PS23861_PORT_NUM*I + j;
    UIF = UIF_LOOPUP_BY_POE_PORT (PORT);
    if (!UIF)

    继续;


    G_PoE_PORT_STATUS[port].events.event_PowerGoodStatusChange =((buf[3]>> 4)和(<j))?1:0;
    if (g_poe_port_state[port].event.event_PowerGoodStatusChange)

    vlog_write (vlog_notification、"poe"、"power"、UIF->name、"Interface [%s] PoE power Good state change."、UIF->name);


    G_PoE+端口状态[port].event.event_PowerEnableStatusChange =((buf[3])和(<j))?1:0;
    if (g_poe_port_state[port].event.event_PowerEnableStatusChange)

    vlog_write (vlog_notification、"poe"、"power"、UIF->name、"Interface [%s] PoE power enable state change."、UIF->name);


    G_PoE+端口状态[port].event.event_Detection =((buf[5])和(<j))?1:0;
    G_PoE+端口状态[port].event.event_Classification =((buf[5]>> 4)和(<j))?1:0;
    if (!g_poe_port_state[port].PE)// PoE 端口未启用电源

    if (g_poe_port_state[port].event.event_Detection & g_poe_port_state[port].event.event_Classification)

    int v;
    V =(1<<j);

    HAL_i2c_write (POE_PS23861_SLAVE_ADDR_BASE+I、0x19、v);
    vlog_write (vlog_notification、"PoE"、"power"、UIF->name、"Interface [%s] PoE power on by event classification。"、UIF->name);



    G_PoE+端口状态[port].event.event_DisconnectOccurred =((buf[7]>> 4)和(<j))?1:0;
    if (g_poe_port_state[port].event.event_DisconnectOccurred)

    vlog_write (vlog_notification、"poe"、"power"、UIF->name、"Interface [%s] PoE disconnect."、UIF->name);


    G_PoE+端口状态[port].event.event_ICUTFaultOcpurred =((buf[7])和(<j))?1:0;
    if (g_poe_port_state[port].event.event_ICUTFaultOccurred)

    vlog_write (vlog_notification、"poe"、"power"、UIF->name、"Interface [%s] PoE icut fault。"、UIF->name);


    G_PoE_PORT_STATUS[port].events.event_ILIMFaultOccurred =((buf[9]>> 4)和(<j))?1:0;
    if (g_poe_port_state[port].event_ILIMFaultOccurred)

    vlog_write (vlog_notification、"poe"、"power"、UIF->name、"Interface [%s] PoE ILIM fault."、UIF->name);


    G_PoE+端口状态[port].event.event_StartFaultOccurred =((buf[9])和(<j))?1:0;
    if (g_poe_port_state[port].event_StartFaultOccurred)

    vlog_write (vlog_notification、"poe"、"power"、UIF->name、"Interface [%s] PoE start fault."、UIF->name);

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

     尊敬的用户5237297:

    Vmark 是分级期间的标记电压。 在第二个分类期间、旧的 TPS23861器件的标记电压将降至7V 以下。 我们现在已经解决了这个问题。

    我已经查看了您的原理图。  TPS23861不需要10欧姆栅极电阻器(R253、R252、R255、R254)和栅极和感应之间的510K 电阻器(R315、R316、R314、R317)。 请移除这些电阻器。 对于 PSE 事件寄存器、您能否在端口关闭后转储这些寄存器的值?

    谢谢。  

    此致、

    一分钱

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Penny;
    510K 电阻器尚未焊接;我认为10 Ω 栅极电阻器不会受到影响。Ω
    ,);我们的异常现象是一个 IC 的四个端口将被放在一起,然后一起上(大约10到20秒并且在另外几个小时内,将出现另一个 IC。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Penny;
    我们检查寄存器0x03~0x0B、只有良好的状态变化和我们可以检测到的良好的使能变化、没有其他故障。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Penny;
    此问题非常紧迫,我们的产品正在等待发货,我们是否可以商定一个常见的沟通时间? 我在中国。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的用户5237297:

    您位于何处(哪个城市)? 我们需要找到一个本地 FAE 来为您提供支持。 寄存器0x11中的 AUTO 位(MSB)设置是什么? 谢谢。

    此致、
    一分钱
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    寄存器0x11中的 AUTO 位(MSB)设置为0

    我们像这样对寄存器0x11进行编程
    HAL_i2c_write (0x30、POE_PS23861_CMD_UNLOCK、POE_PS23861_SLAVE_ADDR_TEMP);/*解锁所有芯片*

    (i=0;<g_poe_chip_num; i++)

    HAL_i2c_write (POE_PS23861_SLAVE_ADDR_TEMP、0x11、0x40+I);/*设置芯片地址*
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、user5237297,

    发生随机断电时、您能否为所有寄存器发送日志? 您还能在发生端口电压、电流波形时捕获它吗? 谢谢。

    此致、
    一分钱