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.

[参考译文] BQ76PL455A-Q1:系统故障和芯片故障未被屏蔽

Guru**** 2455560 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/660237/bq76pl455a-q1-system-fault-and-chip-fault-not-getting-masked

部件号:BQ76PL455A-Q1
主题中讨论的其他部件: BQ76PL455-Q1

您好,David:

我们使用bq76pl455a-Q1制造了定制PCB。 我能够为OV,UV,比较器和辅助通道设置正确的阈值。 但始终存在芯片故障和系统故障。

在系统故障中:sys_Reset精度(位-7)

芯片故障: USER_CKSUM_ERR (位-15)  

此错误始终存在,由于此原因,n故障引脚始终保持"低"状态。

你能帮我解决这个问题吗?

谢谢你  

Ritul Shah

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

    必须通过写入来清除SYS_RESET位。 此位用于向MCU指示发生POR或RESET。

    有关用户校验和的信息,请查看数据表的7.3 .12.6 部分...,该部分应回答您的问题。 请参阅此内容,如果您有其他问题,请随时在此处回复。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,David:

    sys_reset故障已通过将1写入该位清除。

    但 用户校验和故障仍然存在。 我无法从  数据表的7.3 .12.6 部分调试它。

    等待您的帮助。

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

    您好,Ritul,

     用户校验和用于 指示 某些寄存器值 已更改。 也就是说,如果 CSUM_RSLT寄存器 与CSUM寄存器不匹配,则将设置此故障。 阅读 CSUM_RSLT,并将 其存储在  CSUM寄存器中。 如果您正在写入寄存器以 永久 初始化它们, 则可以将其保存 到 EEPROM中。 虽然不推荐,但  也可以  屏蔽此 故障。

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

    您好,David:

    正如您提到的两个解决方案,

    1.要将CSUM_RSLT寄存器值复制到CSUM寄存器中,我无法理解如何执行此任务?

    2.屏蔽校验和错误故障。 我尝试通过屏蔽数据表中的寄存器编号107来实现这一目的。 但此命令不起作用

    nsent = WriteReg (0107,0x8000,2,FRMWRT_SGL_NR);        //用户校验和错误掩码

    delay_ms(5);

    }

    这一问题还有什么进一步的解决办法?

    正在等待您的回复。 我们在"星期六"工作,因此如果可能,请今天回答此帖子,以便我在星期六尝试。

    谢谢

    Ritul Shah

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

    您好,Ritul,

    您应该读取 CSUM_RSLT寄存器,并 将 其存储在代码中的变量中。 在我们 的示例代码中,它可以 是wTemp,也可以 是 bFrame数组中的索引,具体取决于您的使用方式。 然后,通过将这些数据写入CSUM寄存器,将结果存储到该寄存器中。 我刚刚 在GUI上执行了此操作,可以确认这将 清除用户校验和故障

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

    您好,David:

    我尝试了你所展示的方法。

    请在下面查找代码:

    nread = ReadReg (nDev_ID,244,&chksum,4,0);       //读取ChecksumRslt错误(寄存器编号:244,数据表)

    user_debug ("RD_checksum:%d\r\n",chksum);
    nsent = WriteReg (nDev_ID,240,chksum,4,FRMWRT_SGL_NR);            //根据读数写入校验和寄存器(寄存器编号:240,数据表)
    nread = ReadReg (nDev_ID,240,&chksumstr,4,0);    
    user_debug("checksum:%d\r\n",chksumstr);

    我在寄存器244和240上得到相同的值,但芯片故障错误仍然存在。

    可能的问题是什么?

    请帮我解决。

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

    您能否澄清一下您对244号登记簿的首次阅读是在做什么? 这是单个设备读取吗?

    我还要确保您正在读取寄存器以检查芯片故障错误是否仍然存在,而不是依赖NFAULT引脚f或调试。 由于堆栈设备中的故障,仍可能断言NFAULT。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,David:

    我正在使用单个设备。

    我已按照您的上述说明复制并粘贴校验和。 它运行良好,消除了芯片故障。
    只有当我连续将校验和写入USERCHECKSUM时,这种方法才有效。 (在while循环中使用)。 在初始化过程中,如果我执行一次,它将不起作用。

    此外,清除芯片故障也产生了新的问题。 为我未使用的单元生成欠压比较器故障(单元编号 14,15,16)。 此错误以前从未出现过。 [我已正确选择要使用的频道。]

    请告诉我:
    1.在初始化过程中,应该将校验和读写放置在何处,这样我就不必连续触发该功能?

    2.如果我不执行校验和复制粘贴,则不存在欠压比较器故障。 如何消除欠压比较器故障?

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

    您好,Ritul,

    校验和在后台持续运行。 每当您更改计算中包含的登记簿时,CRC将会更改。 这是为了通知您注册表已更改(可能来自注册位翻转),可能是在您不知情的情况下。  

    如果需要,您可以屏蔽它,然后读回故障,查看它是否已更改。 但这是一个需要在您的端进行评估的选项。

    您能否在GUI上发送故障的屏幕截图以及您的设置? 我不确定我是否正确理解了问题。

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

    您好,David:

    我将尝试在复制粘贴校验和后屏蔽故障。  

    我没有使用GUI。 我已经开发了具有bq76pl455-Q1的PCB和微控制器。 我正在读取故障,将其发送给控制器并在Putty上查看。

    请查找我的设置的附加视频。 希望它能帮助您了解我们的问题。

    e2e.ti.com/.../VID_5F00_2018.0317万_5F00_101222.rar</s>10.1222万

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

    您好,David:

    我正面临比较器欠压故障的问题,这妨碍了我运行代码和测试系统。

    以前我遇到了校验和错误的问题,然后按照你的建议,我存储了内部校验和并将其写入USERCHECKSUM。 这解决了校验和问题,但为我尚未选择的通道生成了比较器欠压故障。

    我的系统信道:13.

    我遵循了TI软件设计参考应用手册中的配置方法。

    请在下面找到我的代码片段。

    nsent = WriteReg (nDev_ID,16,0x1080,2,FRMWRT_SGL_NR);      //将通信波特率设置为250KBaud

    nsent = WriteReg (nDev_ID,15,0x80,1,FRMWRT_SGL_NR);       //根据数据表的标准配置

    nsent = WriteReg (nDev_ID,14,0x18,1,FRMWRT_SGL_NR);       //故障被解锁并自动清除,

    nsent = WriteReg (nDev_ID,12,0x08,1,FRMWRT_SGL_NR);       //自动地址启用

    nsent = WriteReg (nDev_ID,10,0x00,1,FRMWRT_SGL_NR); //设备地址=00


    nread = ReadReg (nDev_ID,244,&chksum,4,0); //此寄存器包含当前内部计算的寄存器校验和。
    nsent = WriteReg (nDev_ID,240,chksum,4,FRMWRT_SGL_NR); //此寄存器包含寄存器的编程校验和。
    nsent = WriteReg (0107,0x8000,2,FRMWRT_SGL_NR); //用户校验和错误掩码

    DELAY _US (500);
    nsent = WriteReg (0,81,0x18,1,FRMWRT_SGL_NR); //清除系统状态寄存器中的故障标志
    DELAY _Us (100);
    nsent = WriteReg (nDev_ID,82,0xFFC0,2,FRMWRT_SGL_NR); //清除所有故障摘要标志

    nsent = WriteReg (nDev_ID,84,0xFFFF,2,FRMWRT_SGL_NR); // UV透明
    nsent = WriteReg (nDev_ID,86,0xFFFF,2,FRMWRT_SGL_NR); // OV清除
    nsent = WriteReg (nDev_ID,88,0xFFFF,2,FRMWRT_SGL_NR); // AUX清除
    nsent = WriteReg (nDev_ID,90,0xFFFF,2,FRMWRT_SGL_NR); // COMP UV透明
    nsent = WriteReg (nDev_ID,92,0xFFFF,2,FRMWRT_SGL_NR); // COMP OV Clear

    nsent = WriteReg (nDev_ID,94,0xFFE9,2,FRMWRT_SGL_NR); // COMM FLT透明
    nsent = WriteReg (nDev_ID,96,0xFF,1,FRMWRT_SGL_NR); // SYSFLT清除
    nsent = WriteReg (nDev_ID,97,0xFFFF,2,FRMWRT_SGL_NR); //芯片清除
    nsent = WriteReg (nDev_ID,99,0x3F,1,FRMWRT_SGL_NR); //清除所有故障摘要标志

    nsent = WriteReg (nDev_ID,104,0xFFE9,2,FRMWRT_SGL_NR); //掩码通信
    nsent = WriteReg (nDev_ID,106,0xDF,1,FRMWRT_SGL_NR); //掩码系统flt.
    nsent = WriteReg (nDev_ID,107,0xE000,2,FRMWRT_SGL_NR); //掩码芯片故障

    void configure_AFE()

    nsent = WriteReg (nDev_ID,61,0x00,1,FRMWRT_SGL_NR); //初始采样延迟
    nsent = WriteReg (nDev_ID,62,0x44,1,FRMWRT_SGL_NR); //电压和温度采样间隔12.6us
    nsent = WriteReg (nDev_ID,63,0x4444.4444万,4,FRMWRT_SGL_NR); //初始采样延迟
    nsent = WriteReg (nDev_ID,7,0x00,1,FRMWRT_SGL_NR); //反向采样率和命令
    nsent = WriteReg (0,81,0x38,1,FRMWRT_SGL_NR); //清除系统状态寄存器中的故障标志
    nsent = WriteReg (nDev_ID,82,0xFFC0,2,FRMWRT_SGL_NR); //清除所有故障摘要标志

    nsent = WriteReg (nDev_ID,13,0x0D,1,FRMWRT_SGL_NR); // nchan:将单元格数设置为13
    nsent = WriteReg (nDev_ID,3,0x1FFF0000,4,FRMWRT_SGL_NR); //选择全部13个单元格,  
    nsent = WriteReg (nDev_ID,50,0x04,1,FRMWRT_SGL_NR); //自动监控周期10ms
    nsent = WriteReg (nDev_ID,51,0x1FFF0000,4,FRMWRT_SGL_NR); //自动监听信道

    nsent = WriteReg (nDev_ID,144,0xD709,2,FRMWRT_SGL_NR); //电池过压阈值
    nsent = WriteReg (nDev_ID,142,0x9999,2,FRMWRT_SGL_NR); //电池欠压阈值
    nsent = WriteReg (nDev_ID,141,0xB4,1,FRMWRT_SGL_NR); //电池比较器过压阈值
    nsent = WriteReg (nDev_ID,140,0x00,1,FRMWRT_SGL_NR); //单元比较器欠压阈值

    nsent = WriteReg (nDev_ID,146,0x0000,2,FRMWRT_SGL_NR); //辅助0欠压阈值
    nsent = WriteReg (nDev_ID,148,0xFFFF,2,FRMWRT_SGL_NR); //辅助0过压阈值
    nsent = WriteReg (nDev_ID,150,0x0000,2,FRMWRT_SGL_NR); //辅助1欠压阈值
    nsent = WriteReg (nDev_ID,152,0xFFFF,2,FRMWRT_SGL_NR); //辅助1过压阈值
    nsent = WriteReg (nDev_ID,154,0x0000,2,FRMWRT_SGL_NR); //辅助2欠压阈值
    nsent = WriteReg (nDev_ID,156,0xFFFF,2,FRMWRT_SGL_NR); //辅助2过压阈值
    nsent = WriteReg (nDev_ID,158,0x0000,2,FRMWRT_SGL_NR); //辅助3欠压阈值
    nsent = WriteReg (nDev_ID,160,0xFFFF,2,FRMWRT_SGL_NR); //辅助3过压阈值
    nsent = WriteReg (nDev_ID,162,0x0000,2,FRMWRT_SGL_NR); //辅助4欠压阈值
    nsent = WriteReg (nDev_ID,164,0xFFFF,2,FRMWRT_SGL_NR); //辅助4过压阈值
    nsent = WriteReg (nDev_ID,166,0x0000,2,FRMWRT_SGL_NR); //辅助5欠压阈值
    nsent = WriteReg (nDev_ID,168,0xFFFF,2,FRMWRT_SGL_NR); //辅助5过压阈值
    nsent = WriteReg (nDev_ID,170,0x0000,2,FRMWRT_SGL_NR); //辅助6欠压阈值
    nsent = WriteReg (nDev_ID,172,0xFFFF,2,FRMWRT_SGL_NR); //辅助6过压阈值
    nsent = WriteReg (nDev_ID,174,0x0000,2,FRMWRT_SGL_NR); //辅助7欠压阈值
    nsent = WriteReg (nDev_ID,176,0xFFFF,2,FRMWRT_SGL_NR); //辅助7过压阈值

    }

    此外,我还附上了我的示意图以供参考。  

    请帮我解决这个问题。 直到故障被清除,我才能够测试我的逻辑。

    谢谢  

    Ritul Shah

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

    我在打开您在另一个线程中发送的视频时遇到一些问题。

    是否可以尝试禁用自动显示器?

    如果可以,还请共享正在设置的故障寄存器中的值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我查看了您的视频剪辑。
    我不清楚。
    您是否仍在单元格14,15,16上存在校验和错误或OV?