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.

[参考译文] BQ27Z561:读取数据闪存时出现问题

Guru**** 2528010 points
Other Parts Discussed in Thread: BQ27Z561, BQSTUDIO, BQ27Z561-R2, EV2400

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1310382/bq27z561-issue-with-reading-data-flash

器件型号:BQ27Z561
主题中讨论的其他器件: BQSTUDIO、、 EV2400

您好!

我正在使用带有 BQ27Z561 IC 的定制电路板、并且我正在为其编写一个驱动程序。 与 IC 的通信工作原理:我能够运行"标准数据命令"(如 slubo7中所述),例如 ControlStatus()、Voltage()或 RelativeStateOfCharge ()。 我还能够执行 MAC 命令、例如"Device Name"。 但是、 当我尝试在数据闪存中读取数据时、似乎停止工作。 可以进行通信、我得到了正确的校验和、但我要读取的数据没有意义。 例如、我尝试读取"I2C 配置"、根据 sluubo7、它位于数据闪存中的地址0x4481处。 以下是代码的功能:

- I2C 写入事务:将0x3E、0x80、0x44写入 I2C (地址为0x4480而不是0x4481、因为我还想检查0x4480处的"I2C Gauging Configuration")。
- I2C 写/读事务:将0x3E 写入 I2C ,读取36个字节(2字节 AltManufacturerAccess ()+ 32字节数据+ 1字节长度+ 1字节校验和)

如前所述、可以正确读取数据(校验和匹配、从 AltManufacturerAccess 读取的2个字节与请求的地址匹配、并且长度字段为 OK)、但我为"I2C 配置"获得的值为0x12、这是无效的值。 同样、"I2C Gauging Configuration"的值为0x10、这同样似乎是无效值。

I2C 接口以100KHz 运行。
状态(从 ContolStatus()读取)为0x200,因此 IC 处于"完全访问"模式。
由于采用定制电路板设计、无法使用 BQStudio。

您能告诉我我做错了什么吗?

其他(但有点相关)问题:

-是否真的可以通过更新 IC 上的固件将 BQ27Z561 "转换为 BQ27Z561-R2 ?
-是否有一些示例代码可以让我将设计中的 BQ27Z561 IC 连接到 BQStudio ,而无需使用 EV2400 (我无法物理连接到我们的板)?

BTW、我看到了对类似问题的各种回答、告诉人们阅读"Gauge comunization"(slua801)以尝试修复他们的问题(slua801也列在 https://www.ti.com/product/BQ27Z561#tech-docs 下)。 读完该文档后、我认为它不适用于 BQ27Z561、至少对于似乎使用寻址方案(将32字节数据块编号发送到器件)的数据闪存读取/写入例程来说不是如此、 我认为这与 BQ27Z561访问数据闪存的方式不兼容。

谢谢。
博格丹

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

    您好、Bogdan、

    您似乎有正确的写入和读取顺序。 我能说的是、TRM 可能不包含 DataFlash 的正确存储器寻址、这可能是您读取闪存时的值没有意义的。  

    您能否提供固件版本?  AltManufacturerAccess () 0x0002固件版本。 利用这些信息、我可以向您发送固件版本的内存寻址。 使用 BQStudio 很容易做到这一点。  

    -是否确实可以通过更新 IC 上的固件将 BQ27Z561 "转换为 BQ27Z561-R2?

    可以、使用 BQStudio。

    -是否有一些示例代码可让我在设计中将 BQ27Z561 IC 连接到 BQStudio 而无需使用 EV2400 (我无法物理连接到我们的电路板)?

    访问 BQStudio 需要 EV2400。

    如果您获得 EV2400、请执行以下操作以查看正确的存储器寻址。 单击 Window -> Preferences -> All Global Setting -> Show Advanced Views (窗口->首选项->所有全局设置->显示高级视图)。 然后、在"Data Memory"选项卡中、您将看到 Physical Addresses。  



    此致、
    何塞·库索

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

    您好、Jose、

    感谢您的快速回复。 查询  AltManufacturerAccess() 0x0002得到该结果(逐字节):

    [0]= 0x15
    [1]= 0x61
    [2]= 0x02
    [3]= 0x01
    [4]= 0x00
    [5]= 0x15
    [6]= 0x02
    [7]= 0x04
    [8]= 0x75
    [9]= 0x02
    [10]= 0x00

    谢谢。
    博格丹

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

    尊敬的  Bogdan:

    看起来您使用的是固件版本2.01内部版本15。 我找到版本2.01内部版本21。 它是一个不同的构建、但在寻址方面应该几乎相同。  

    请参阅随附的带有所有地址的 csv 文件。  e2e.ti.com/.../default_5F00_settings_5F00_with_5F00_memory_5F00_addressing.gg.csv

    例如、I2C 电量监测配置。 它的十进制偏移为1600 (0x640)。 其物理地址为0x4000 + 0x640 = 0x4640  




    希望这对您有所帮助!

    此致、
    何塞·库索

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

    您好、Jose、

    谢谢、您发送给我的存储器映射似乎部分修复了我的问题。 我说"部分"是因为显然那里还有一些缺失的部件。 例如、"I2C 电量监测配置"在您发送给我的.csv 中具有默认值0x20 (我已验证它在 IC 中具有相同的值)、但在 sluubo7中具有0x08。 这本身不是问题、但是根据 sluubo7、这个值的高4位不具有任何意义、并且这个字段的值应该在0x00和0x0F 之间(页26):

    我是否能够理解、位字段定义也会从一个固件版本变为另一个固件版本? 如果是,这种不成问题是否在某处存在?

    此外,虽然我真的很感激你的快速反应和帮助解决这种情况,我不得不认为这不应该发生在第一. 我花了将近两天的时间尝试找出我的代码中的错误,事实证明我不会做错任何事情,但我缺少一个关键的信息,即数据闪存图取决于固件版本。 这是在官方文档中编写的吗? 如果是、可从何处下载每个版本的存储器映射? 因为如果这些信息写在某处、我完全错过了该信息。 如果不是、我认为这对于 TI 来说将是一个非常大的问题。 我知道没有完善的数据表、但是这是非常重要的信息、没有这些信息、就无法正确使用器件。 我真的对 TI 抱有更高的期望。

    编辑:我现在注意到位域定义也在.csv 中、很抱歉错过了这个。

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

    尊敬的  Bogdan:

    很遗憾听到您花了很多时间尝试找出问题所在。 我同意您的观点、即应该更好地记录这一点。 我们关注您的问题。 我要把它带到我的上司面前。  

    如果您有任何其他问题、请告知我们。  

    此致、
    何塞·库索

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

    您好、Jose、

    现在没有问题了、再次感谢您的帮助。

    此致、
    博格丹

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

    您好、Jose、

    看起来我实际上可能有另一个问题、这一次我无法获得 RSOC 更改的 Ian nterrupt。  

    -数据闪存中的"SOC delta"被设置为1 (因此我应该在 RSOC 每变化1%时获得一个中断)。
    -数据闪存中的"IO Config"设置为4 (启用中断、中断线低电平有效)。

    上述设置使用您 在上一篇文章中附加的.csv 中的偏移和位字段定义 (我已验证我写入数据闪存的值已正确读回)。  

    根据 sluubo7中的"Host itnterrupts"部分、这就是我需要的全部内容、以获得 RSOC 更改中断。 但是,当我读取 RelativeStateOfCharge ()时,我可以看到 RSOC 降低,但中断永远不会触发。 中断 处理代码是从另一个驱动程序复制/粘贴具有类似的低电平有效中断引脚、因此该部分代码很难出现问题。

    如果我理解正确、您提供的闪存映射不同于器件上的固件、那么我如何知道闪存映射是否完全兼容呢?

    谢谢。
    博格丹

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

    尊敬的 Bogdan:

    为了更好地跟踪该论坛中的线程、我们建议在不同的线程中介绍不同的主题。 您可以在新主题中发布此问题吗?

    此致、
    何塞·库索

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

    您好、Jose、

    新主题: e2e.ti.com/.../bq27z561-interrupt-configuration-for-rsoc-change-interrupts-and-firmware-version-mess

    谢谢。
    博格丹