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.

[参考译文] BQ28Z610:数据闪存访问问题

Guru**** 2524460 points
Other Parts Discussed in Thread: BQSTUDIO, EV2400

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/738029/bq28z610-data-flash-access-issues

器件型号:BQ28Z610
主题中讨论的其他器件:BQSTUDIOEV2400

 
我们已完成 BQ28Z 的学习周期。 我已经读取的所有内容都表示新参数应该写入数据闪存。 我使用参考手册第12.2.45节(如下所示)、但无法影响 DataFlash 中的任何值。 我能够顺利阅读这些内容。 我正在监控 I2C 流量、如参考手册中所述。 发生什么事了?

   
12.2.45数据闪存访问() 0x4000–0x5FFF

只有 AltManufacturerAccess()通过对物理设备进行寻址来支持访问数据闪存(DF)
地址。

要写入 DF、请发送起始地址、后跟 DF 数据块。 DF 数据块是
预期修订的 DF 数据将更新为 DF。 DF 数据块的大小从1字节到32字节不等
字节。 所有单独的数据都必须以小端字节序发送。

I2C 命令
假设:Data1位于地址0x4000、data2位于地址0x4002。
data1和 data2都是 U2类型。
要更新 data1和 data2、发送一个块写入、命令= 0x3E
Block =起始地址+ DF 数据块
     = 0x00 + 0x40 + data1_LowByte + data1_HighByte + data2_LowByte + data2_HighByte

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

    在运行学习周期之前、您最初是如何设置闪存参数的? 您是否使用 EV2400和 bqStudio 与器件通信?

    需要检查的几件事:某些器件寄存器只能在器件未密封的情况下修改。 验证设备是否未密封。 还有一个闪存更新正常电压、如果电压不够高、该电压将阻止写入数据闪存。 确保将该值设置为正确的电平、并且电压足够高、允许写入闪存。

    此致、
    Matt
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的快速回复! 在学习周期中、团队使用的是 BQStudio 和 EVK。 但是、我现在尝试将这些参数写入生产板上的闪存、其中 BQ28Z 只能通过微控制器 I2C 进行访问。

    我正在从制造访问寄存器读取0x0203、该寄存器似乎表示安全模式为"保留"状态吗?

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

    检查器件是否密封的最佳位置是运行状态 A 寄存器(SEC1、SEC0位)。
    由于负责学习周期的团队能够使用 BQStudio 写入闪存、我建议首先使用 BQStudio 的"Advanced I2C Comm"窗口、以确保 I2C 命令正常工作、然后再尝试使用微控制器。 使用此工具、您可以熟悉命令的结构以及写入数据闪存的校验和。 下面是一个指向前面的线程的链接、该线程通过 以下示例完成了该过程:e2e.ti.com/.../2336247

    Matt
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在0x0054处找到了运行状态(但没有'A')。 这是正确的吗? 读取4个字节将返回0x06 0x01 0x00 0x00。 我假设这都是小端字节序、因此实际上它是0x00000106。

    这似乎表示位9-8 (SEC1、sec2)是(0、1)(即完全访问)、位14-13 (也是 SEC1、sec2)是(0、0)(即保留)。 这有道理吗?

    同时、我将遵循随附的内容并与测试团队合作、看看我们是否可以在那里写入 I2C 并通过主机 IC 重现结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    操作状态(0x0054)是读取 SEC 位的正确位置。 位9-8显示您具有完全访问权限。  

    希望您能够让 I2C 在该示例中正常工作!

    Matt

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

    好的、它终于开始工作了。 我认为 TI 应该修改他们的文档、因为12.2.45中描述的程序完全不正确。

    对于任何其他正在努力写入数据闪存的人、以下是过程:

    1. 写入0x3E (AltManufacturingAccess) MAC 地址(小端字节序)后跟要写入的数据(注:最小数据为1、最大数据为32)
    2. 写入0x60 (MacDataChecksum)校验和,计算如下
    3. 写入0x61 (MacDataLength)写入的字节总数,包括 MAC 地址、数据字节、校验和、和 MACDataLength 本身
    4. 从 MAC 地址读回以验证(将地址写回以读0x3E 并读回所需的字节数)

    特殊条件:如果以32字节的块进行写入、则可以将步骤1、2和3合并为单次写入、因为上面提到的地址是连续的。 例如、如果将所有数据写入0x3E、MAC 地址将写入0x3E 和0x3F、32个数据字节将填充0x40-0x5F、校验和数据长度将流入0x60和0x61。

    标准过程示例(将[0x1、0x2、0x3、0x4]写入 MAC 地址0x4700):

    [开始(W)] 0x3E 0x00 0x47 0x01 0x02 0x03 0x04 [停止]

    [开始(W)] 0x60 0xAE 0x08 [停止]

    [开始(W)] 0x3E 0x00 0x47 [开始(R)](读取字节数)[停止]

    特殊条件示例(将32个字节写入0x4700):

    [开始(W)] 0x3E 0x00 0x47 0xB4 0x2A 0x00 0x00 0x00 0x00 0x02 0x13 0x6D 0x02 0xBF 0x47 0xC1 0x65 0x01 0x02 0x92 0x6D 0x02 0xC2 0xC2 0xC2 0xC2 0xC4 0x47 0x66 0x04 0x12 0x6D 0x02 0xC5 0x47 0xD3 0x24 ]

    [开始(W)] 0x3E 0x00 0x47 [开始(R)](读取32个字节)[停止]

    0x3E= 0x00

    0x3F = 0x47

    0x40-0x5F = 0xB4-0x47

    0x60 (校验和)= 0xD3

    0x61 (总长度)= 0x24

    校验和计算:

    校验和= 0xFF - LSB (ADDR1 + ADDDR2 + D1 + D2…… + DN)