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-R1A:从 DataFlash 寄存器读取数据时出现问题

Guru**** 2609895 points
Other Parts Discussed in Thread: BQ78350-R1A, BQSTUDIO, BQ78350-R1

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1077056/bq78350-r1a-problems-with-reading-data-from-dataflash-registers

部件号:BQ78350-R1A
“线程”中讨论的其它部件: BQSTUDIOBQ78350-R1

你(们)好

我正在运行一些嵌入式应用程序,我的 MCU 已连接到 BQ78350-R1A,我正在尝试读取数据闪存中特定寄存器的数据。

(例如,0x4099地址的设备化学)

我正在使用(0x44) ManufacturerBlockAccess 进行读取,但 我不使用校验和。

据我了解,我总是需要在 I2C 读取中读取35字节 (长度为1字节+地址为2字节+数据为32字节)。 我是对的吗?

当我从上面的寄存器重置 MCU 后第一次读取数据时,我会得到数据(我的例子是 Lion),但当我再次尝试读取数据时,我会得到一些垃圾数据。

其他寄存器(设备名称,制造商名称...)的结果相同

我的代码可能有什么问题?

我还尝试使用 bqStudio 来比较逻辑分析器上的 I2C 数据,但其中不可能读取闪存中特定寄存器中的数据(或者可能我没有找到)

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

    你好,尤里,

    如果您已连接 BQStudio,请注意其仪表板将定期读取数据,并且寄存器可能不会与您预期的相同。  通过单击“自动刷新”横幅禁用仪表板更新,同时停止轮询。  或者在操作过程中断开接口与 SMBus 的连接,以免干扰 MCU 事务。

    块访问是正确的访问方法。 数据格式随数据类型而变化。 通常,命令0x44会将该命令指定为前2个字节。 请参阅《BQ78350-R1技术参考手册》第17.2节:

    在 BQStudio 中,Advanced Comm SMB 工具将允许您读取数据块,这可能对逻辑分析器比较很有用。  例如,读数为0x4099:

    它显示了已发送和读回数据的命令。  数据包含命令“99 40”,后跟数据,此处为5字符串,长度“04”和4个字符“4C 49 4F 4E”或 L I O N

    缓冲区将始终具有 32字节大小,但您不需要读取所有字节。

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

    感谢您的回复。

    我尝试在 BQStudio 中使用0x4099的块读取,但在我的0x4099读取和 BQStudio 的0x4099读取之间,我没有看到任何特定的逻辑分析器数据变化。

    我知道 BQStudio 在每个已发送 I2C 数据包的末尾使用校验和,但我不使用校验和,这是唯一的变化。

    所以问题——我需要使用校验和还是不需要从电池读取数据块?

    是否有启用/禁用校验和的配置寄存器?

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

    你好,尤里,

    有一个寄存器设置可启用 PEC (数据包错误检查)。 即使未启用 PEC 字节,BQStudio 也将始终发送 PEC 字节,但这不是必需的(如果未在数据闪存设置中启用)。  

    此致,

    马特

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

    谢谢

    我发现块读取和 BQStudio 块读取之间存在另一个差异。

    我注意到,当 BQStudio 发送块读取序列时,写入数据包和读取数据包之间会有一些延迟。 在我的代码中,我在写数据包后立即发送读取数据包。

    也许这是错误的。

    写入数据包和读取数据包之间是否需要一些最小延迟?

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

    你好,尤里,

    我不知道数据表第7.12节以外的任何要求。  

    您是否已验证所有通信的字节都是相同的? 我看到其他用户的读数中没有包含字节数。 以下是一个示例: https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/939010/bq78350-r1-bq78350-r1-communicate-error

    此致,

    马特

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

    谢谢 Matt

    我终于解决了我的问题。

    我在写入数据包和读取数据包之间插入了1毫秒的延迟,现在它正在工作。

    根据第7.12节的规定,我的代码中有一段 Tbuf 时间,可能是太小了。