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.

[参考译文] BQ78350-R1:如何使用块0x44读取制造商访问权限

Guru**** 2455560 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/674380/bq78350-r1-how-to-read-from-the-manufacturer-access-using-block-0x44

器件型号:BQ78350-R1

大家好、

我正在尝试从器件读取器件类型

从我对上述器件所读和写的所有内容中,从 ManufacturerAccess()读取的正确方法似乎是:

写入:0x44、0x02、0x01、0x00 (命令0x0001的小端字节序)

写入:0x44

读取(使用地址16)

但是、这不起作用、我的代码在发送第二个写入时失败。 我不确定需要发送什么其他数据才能启动写入。 我还尝试使用0x00进行写入、使用0x23和0x26进行读取。

我们非常感谢您的任何建议。 如果需要、我可以发布代码片段、我只想知道我在概念上是否做了错误的事情。 我还应该提到、当器件处于密封模式时、我认为这一点无关紧要。

感谢您的输入、

Scott Sterling Arnold

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

    您好、Scott、

    您的命令集正确。 写入时是否收到 NACK 信号?

    您必须从0x44读取。

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

    现在、我使用的是 Atmel Studio 6内置驱动程序、因此 NACK 会被提取一个位、因此、当我通过 SMBus 写入任何内容时、我所期望的是驱动程序函数返回的数据长度与我发送的数据长度相同、

    这是我的写函数、如果它有用的话

    静态 bool bms_mac_dev_read (mac_command*命令)
    {
    uint8_t msg[4]={ 0x44,command->len,command->maccode,( command->maccode >> 8)};
    uint8_t data[16];
    //仅
    在(io_write=)mbst_4 (ib_tract_mase)时,检查 readm_sbl 的 io_write
    
    
    
    
    if (IO_WRITE (BMS_I2C_SMB_IO、0x44、1)= 1)
    {
    如果(io_read (bMS_I2C_SMB_IO、data、(command->len + 3))=( command->len + 3))
    {
    sprintf (debug_buffer、"%x %x %x %x %x %x\n"、data[0]、data[1]、data[2]、data[3]、 data[4]);
    io_write (&EDBG_COM.io、debug_buffer、strlen (debug_buffer));
    while (USART_async_get_status (&EDBG_COM、NULL)= ERR_BUSY);
    //可能需要在此处执行其他操作
    返回 true;}
    
    
    break;
    }
    
    返回 false;
    } 

    因此、发生的情况是、只对 bq 进行0x44 (或0x00)的第二次写入不起作用。 我使用它的方式与 SMBus Made Simple 指南对 comcode 的处理方式类似、我认为这是为什么它不适用于从0x44读取数据的原因。 为了阐明我何时读取电压、我使用以下命令:

    if (io_write (bMS_I2C_SMB_IO、&command->comcode、1)=1)
    {
    if (io_read (bMS_I2C_SMB_IO、result、command->len)== command->len)
    //
    可能需要在此处执行其他操作
    返回 true;
    }
    
    返回 false; 

    上面电压的 comcode 和 len 分别为0x09和2、结果是 uint8_t 数组来收集收到的数据。

    因此、尽管如此、我不确定从0x44读取的含义是什么、而不是先向电路板写入0x44、然后在 SMBus 上读取。 感觉我缺少有关协议的内容。

    感谢您的回复、并确认了我到目前为止所了解的内容。 Battery Management Studio、Advanced Comm SMB 并不适合解释 Manufacturer Access 的基本工作原理。

    再次感谢、

    Scott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否需要更多信息来帮助我执行此操作、或者我是否应该切换发送消息的方式? 感谢您的任何帮助。

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

    您好、Scott、

    我附上了回答您问题的文件。

    e2e.ti.com/.../Scott.pdf