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.

[参考译文] RTOS/BQ2.7621万-G1:BQ2.7621万-G1读取仪表寄存器

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/579422/rtos-bq27621-g1-bq27621-g1-reading-the-gauge-registers

部件号:BQ2.7621万-G1

工具/软件:TI-RTOS

我在查看"仪表配置参数"时遇到了很多问题。

我遵循bq2.7621万-G1的SLUAP5A-Quickstart指南中的步骤:

  • 在图2上:  
  • Voltage[2]= I2CReadSubCommand (0x04,2100)  
    • I2CWrite (0x0.41万)
    • 缓冲区[2]= I2CRead (2100)

它在I2C命令代码中的真正含义是什么??  “100”是什么?

我的理解来自 SLUAD4C-Technical Reference

  • 表4.1  
  • Voltage()和Flags()都是标准命令

因此,我一直在使用以下顺序阅读:

  • Rd 0x06 Flags_register [0];
  • Rd 0x07 Flags_register_[1];

但是,确实存在一些问题。  因为当我按照 《SLUAP5A-Quickstart指南》(图1)中的说明进行操作时。

[CFGUPMODE]位将在第一次尝试时返回... 返回的校验和不正确...这意味着芯片尚未就绪。

如果我拖了很长时间,就可以了。

所以,我的问题是:我在阅读 Flags_register时做了什么错误?

为什么doc说这些寄存器是“I2CReadSubCommand”

感谢您的建议。

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

    "100"是一个100us延迟。

    有关详细说明和代码示例,请参阅以下应用说明: www.ti.com/.../slua801.pdf

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

    我确实遵循了所有示例,每次写入校验和时都会遇到问题

    • i2cWrite (0x60,0xAB);   //例如,0xAB是新值
    • 我正在使用TI SimpleLink SDK i2c驱动程序....  它卡在 I2CCC26XX_primeTransfer (句柄,交易)中;

    仅当我更新校验和值时。

    在侧注:为什么doc说“Voltage is subcommand?”(电压是子命令?)

    Voltage[2]= I2CReadSubCommand (0x04,2100)

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

    我不确定SimpleLink I2C驱动程序。 CC26XX组/BT LE E2E的人员可能会提供帮助?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    下面是我遵循文档的顺序。 仅为了测试,我需要长时间延迟,然后才能在步骤6之后再次写入相同的校验和。  

    如果我将延迟放在步骤4之前或删除延迟,则写入校验和将锁定(由于设备不响应,i2c驱动程序将永远等待)

    所以,我担心的是,我做了什么错误,RAM更新没有准备好编程??

    //步骤1 //注意:subCmd地址=0

    gaugeWriteSubCmd (0x8000);//解开key1

    gaugeWriteSubCmd (0x8000);//解开密钥2

    //步骤2.

    gaugeWriteSubCmd (0x0013);// Set_CFGUPDATE

    //步骤3.

    用于(count=0;count<50;count++)//

    flags = gaugeReadCmd (0x06);// config update-bit4

    如果((flags和0x0010)//)等待至设置BIT4

    断开;//退出回路

    }

    否则

    Delay_MS(20);//等待时间最长为20ms*50=1s

    }

    //步骤4.

    gaugeWriteByte (0x61,0x00);//启用块数据存储器控制

    //步骤5.

    gaugeWriteByte (0x3E,0x52);//访问设计容量参数

    //步骤6

    gaugeWriteByte (0x3F,0x00);//访问数据位置

    Delay_MS(1500);//等待1.5秒

    old_cs =(uint8_t)gaugeReadByte(0x60);//旧校验和

    gaugeWriteByte (0x60,old_cs);  // 旧校验和

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您不应该需要这样长时间的延迟。

    SLUA801的代码已通过bq2.7621万进行了测试,不需要这些长时间的延迟。 虽然这在Linux平台上运行,但实际I2C事务"快速",因为数据包之间没有显著的延迟(除了代码中的延迟)。

    建议写入校验和与校验校验和之间的延迟为10ms。

    以下是一个正常工作的典型序列(从bq2.7621万 FS文件中提取):
    W:AA 3E 52 01 //子类0x52,块1
    W:AA 40 00 02 BC 13 39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 //块数据
    W:AA 60 F3 //写入校验和
    X:10 //等待10毫秒
    W:AA 3E 52 01 //子类0x52,块1
    C:AA 60 F3 //读取校验和并进行比较
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我明白这不是一个正常的情况,需要这种拖延和锁闭。 你能想到任何可能的原因吗?或者我在init序列中做了错误的事吗??