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.

[参考译文] BQ79616-Q1:COML CAN#39;t communicate

Guru**** 2610015 points
Other Parts Discussed in Thread: BQ79616

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1056040/bq79616-q1-coml-can-t-communicate

器件型号:BQ79616-Q1

系统结构:一件式 BQ79600、八件式 BQ79616。

上电后、BQ79600通过 COMH 与 BQ79616通信。

当中间 BQ79616的所有电源和采集线路断开连接时、COMH 可以与 COMH 侧的其余 BQ79616通信、但此时会切换方向、尝试通过 COML 与 COML 侧的 BQ79616通信、 但仍然无法通过 COML 与 COML 侧的其余 BQ79616通信。导致此问题的原因是什么?

使用以下代码将切花定向至 COML:

SpiWriteReg (0、CONTROL1、0x80、1、FRMWRT_SGL_W);

SpiWriteReg (0、CONTROL1、0xA0、1、FRMWRT_SGL_W);

SpiWriteReg (0、0x34C、0x00、1、FRMWRT_All_W);

SpiWriteReg (0、CONTROL1、0x80、1、FRMWRT_All_W);

SpiWriteReg (0、COMM_CTRL、0x02、1、 FRMWRT_All_W);

SpiWriteReg (0、CONTROL1、0x81、1、 FRMWRT_All_W);

对于(I = 0;I < 5;I++)

  SpiWriteReg (0、dir1_ADDR、I、1、 FRMWRT_ALL_W);

SpiWriteReg (0、 COMM_CTRL、0x02、1、 FRMWRT_All_W);

SpiWriteReg (4、 COMM_CTRL、0x03、1、FRMWRT_SGL_W);

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

    您好!

    请在线参考 bq79600数据表的表7-10。 此表提供了应精确使用的反向自动寻址的分步说明。

    此致、


    泰勒

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

    我的程序遵循上表中的流程、但反向通信仍然不好

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

    当一根电缆断开时、我将菊花链的方向切换到 COML、但反向通信仍然不好

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

    小强

    您能否提供有关"不好"的含义的更多详细信息? 您能否在执行上述例程时测量并查看 COML 引脚是否有任何波形? 请仔细检查 CRC 命令、上面的例程适用于3个器件、请确保您更改了它以满足您的器件数量或您也使用了3个器件。

    此致、


    泰勒

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


    大家好、我上周遇到了类似的问题、
    尝试与12个 BQ79616器件通信。

    8是这里的魔法编号...

    使用 SPI 代码和 TOTALBOARDS 5、6、7 (包括桥接器)、一切正常。
    一旦 TALBOARDS 超过7、stackRead 就不再工作

    SYS_MAIN.c
    SpiReadReg (0、VCELL16_HI+(16-ACTIVECHANNELS)*2、RESPONSE_FRAME_STK、ACTIVECHANNELS*2、0、 FRMWRT_STK_R);

    μ^^进入无限循环、看门狗在120秒后将其终止。
    我修复了冻结、但仍然无法读取最后一个128字节的数据包。

    bq79616.c
    //prepare the number of loops of 128 byte Readthat need to ocloops that need to ocle.(//准备需要
    I =(int)(M/128);

    我的解决方案就是不立即读取整个堆栈:

    SYS_MAIN.c
    for (currentBoard=0;currentBoard <(TOTALBOARDS -1);currentBoard++)

    SpiReadReg (TALBOARDS-currentBoard-1、VCELL16_HI+(16-ACTIVECHANNELS)*2、RESPONSE_FRAME_SGL、ACTIVECHANNELS*2、0、 FRMWRT_SGL_R);
    (笑声)

    for (channel=0;channel<(ACTIVECHANNELS*2);channel+=2)

    int boardByteStart = 0;//单板、不需要偏移
    (笑声)

    (笑声)


    现在我能够读取全部12个器件(TTOLBOARDS = 13)
    这可能有助于解决该问题。

    我只想问另外一个不相关的问题:
    我是否正确进行计数、或者它们是否以反向方式读取(在自动寻址 COMH 时)

    我猜是 singleRead 的 boardId、因为以下 printf:
    printf ("板%d:\t"、TOTALBOARDS-currentBoard-1);

    如果我错了、请纠正我的问题。
    不管怎样,我能够读取12块电路板:-)

    此致
    Collin

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

     

    "不好"意味着无法从 SpiReadReg 函数读取器件值。

    如果连接正常、BQ79600的 COMH 可以读取8个 BQ79616段的值、例如、地址4的 BQ79616断开连接、0-3的数据可以通过 CONH 正常读取、然后将方向切换到 COML、 并希望读取地址5-7的3个 BQ79616段的值。SpiReadReg 和  SpiReadReg 返回 PDC_STATUS_SPI_RDY_TIMEOUT 无法读取该值。

    使用以下代码将切花定向至 COML:

    SpiWriteReg (0、CONTROL1、0x80、1、FRMWRT_SGL_W);

    SpiWriteReg (0、0x34C、0x00、1、FRMWRT_All_W);

    SpiWriteReg (0、CONTROL1、0x80、1、FRMWRT_All_W);

    SpiWriteReg (0、COMM_CTRL、0x02、1、 FRMWRT_All_W);

    SpiWriteReg (0、CONTROL1、0x81、1、 FRMWRT_All_W);

    对于(I = 0;I < 4;I++)

      SpiWriteReg (0、dir1_ADDR、I、1、 FRMWRT_ALL_W);

    SpiWriteReg (0、 COMM_CTRL、0x02、1、 FRMWRT_All_W);

    SpiWriteReg (3、 COMM_CTRL、0x03、1、FRMWRT_SGL_W);