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.

[参考译文] TPS65987D:芯片在 FLem 和 FLwd (闪存更新过程)期间不写入闪存

Guru**** 2609895 points
Other Parts Discussed in Thread: TPS65988

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1434237/tps65987d-chip-does-not-write-flash-during-flem-and-flwd-flash-update-procedure

器件型号:TPS65987D
主题中讨论的其他器件:TPS65988TPS65987

工具与软件:

您好!

我目前正在实施 TPS65987DDHRSHR 芯片闪存芯片的更新过程。 我实现的伪 C 代码中所述的所有逻辑

"TPS65987和 TPS65988 SPI 闪存固件更新 over I2C"-手册。 我注意到我所提供的固件映像实际上并未写入闪存芯片。 ERASE 和 WRITE 命令(FLem 和 FLwd)均不会更改闪存的内容。 我始终等待(如手册中所述)让 cmd 寄存器变为0、然后再从数据寄存器读取返回值。 我始终在继续之前确认返回值为零。 总结:

-我找到非活动区域地址与 FLrr 命令->返回正确的地址(在我的例子0x9000 )

-我用 FLem 擦除闪存区域(四倍4KB、因此我提供存储器地址、将0x04作为第五个字节)->返回成功(0x00)

   -在正常更新期间,我不会在此时读取,但在调试期间,我做了,闪存芯片在此时没有擦除

-擦除后,我继续使用 FLwd 与64字节的数据在数据寄存器(与每4cc 命令,我首先指定寄存器0x09为 Data0 ,然后长度64字节-> 0x40后的数据)。 我始终等待 cmd 寄存器变为0x00、然后再继续。 我验证了我的补丁是否小于16KB

   -如果我现在读取芯片,它仍然包含旧的数据

-现在我用 FLvy 验证芯片内容。 它返回 true、这是有意义的、因为没有任何变化、以前的内容也是有效的。

-现在重复相同的活动区域0x2000在本例中

我曾尝试将逻辑分析仪连接到 SPI 引脚、但我的分析仪只能对24 MHz 进行解码、而且由于时钟以24 MHz 运行、这有点不可靠。 我的分析仪程序会向我发出警告、WREN 位未设置、但我不确定这是由于采样率较低还是实际未发送。

我发现以下论坛条目可能与时序和过早返回成功标志的打字控制器相关、但没有提到如何解决此问题:

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/958048/tps65987d-problems-writing-to-flash

您能帮助我如何使闪存更新正常工作吗?

您还需要哪些其他信息?

此致、

文森特

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

    您好、Vincent:  

    感谢您联系我们!

    我将对此进行深入研究、并在一周结束前提供反馈。  

    此致、  

    Aya Khedr

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

    尊敬的 Aya:

    感谢您关注此问题!

    同时,我能够自己解决这个问题。

    问题在于、闪存芯片不仅受写使能位的保护、而且还受块保护位的保护。 我们最初使用 flashrom Linux 工具将固件上传到闪存、而该工具似乎自动设置块保护。 要使更新过程有效、我们需要手动重新刷写闪存芯片以取消设置块保护引脚。

    当观察一个更快的 Oszi-Trace 时、我们看到 Typ-C 控制器尝试启用 Write-Enable-Latch 三次、但每次都不成功(因为 BP2-0位被置位)。 之后、它会尝试写入闪存、当然哪个会失败。 遗憾的是、Typ-C 控制器仍然报告闪存擦除成功、即使没有成功。

    关于时序问题:

    即使未写入数据、"闪存擦除"和"闪存写入"命令也会立即返回成功。 我通过等待操作后可以采取的最大数量来解决它(如我们的闪存手册中所述)。

    仍然存在的问题是:

    是否有办法使用4cc 命令而不是直接由外部程序员来远程复位块保护位? 是否有将原始 SPI 命令写入闪存的命令或者 TypC-Controller 是否支持复位 BlockProtect?

    我们需要设置以下 SPI 命令来复位块保护:写入使能(0x06)、清除块保护(0x01、0x00)。

    非常感谢、

    文森特

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

    您好、Vincent:  

    感谢您的更新。  

    我们最初使用 flashrom Linux 工具将固件上载到闪存中、此工具似乎自动设置了块保护。

    我不太熟悉使用 Linux 工具执行此过程。 我将在内部进行检查并向您提供反馈。  

    此致、  

    Aya Khedr

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

    尊敬的 Aya:

    如果可以通过拼写错误控制器取消设置块保护位、是否有任何新的见解?

    此致、

    文森特

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

    您好、Vincent:  

    感谢您的耐心。

    遗憾的是、我认为通过 PD 控制器无法实现这一点。 您使用的是什么 SPI 闪存?

    此致、  

    Aya Khedr