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.

[参考译文] LMK03318:如何通过 i2c 成功配置 EEPROM?

Guru**** 2556870 points
Other Parts Discussed in Thread: LMK03318EVM, CODELOADER, LMK03318

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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/670814/lmk03318-how-could-i-configure-eeprom-successfully-via-i2c

器件型号:LMK03318
主题中讨论的其他器件: CODELOADER

您好!

我参考文档通过 i2c 写入 SRAM 和 EEPROM、

在写入 SRAM 中、看起来不错。 当我写入 EEPROM 时、它具有奇怪的状态。

我执行第3步和第5步以进行如下检查:

3.向 R137.0写入1。 这会将整个 SRAM 内容编程到 EEPROM 中。 完成后、将显示中的内容
R136将递增1。 R136包含 EEPROM 编程周期的总数
已成功完成。

4.将0x00写入 R144以防止 EEPROM 意外编程。

5.如果 EEPROM 写入不成功、R137.5的回读会导致1。 在这种情况下、器件将不会
正常工作、将被锁定。 要解锁器件以实现正确操作、请写入一个新的 EEPROM
应启动并成功完成序列。

第3步:我看到 R136递增1。

第5步:我看到 R137.5没有产生1、因此我相信它是成功的。

奇怪的状态如下所示:

因为我为时钟生成向 EEPROM 配置了错误的值、所以无法通过 PCIe 找到 MAC 器件。

但是、当我"下电上电"时、通过 PCIe 找到 MAC 器件仍然是正常的。

它表示我未成功配置到 EEPROM、但步骤5仍然成功完成。

你有什么想法吗?

此致

瑞红太阳

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ruihong、
    您的请求将被指派给一位专家、他很快就会回来。
    此致
    Puneet
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    我添加如下注释:

    在我的计算机中、我只获得一个 i2c devce (0x53)、因此我尝试将日期写入0x53、

    但我不确定它是否写入 SRAM、因为在下电上电后将数据写入 EEPROM 似乎不有用。

    如何将日期写入 SRAM?

    此致

    瑞红太阳  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Puneet、您好!
    很抱歉因为紧急情况而推送您。
    我是否可以有专家尽快回答这个问题?

    BR、
    Jason
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在对 EEPROM 进行编程之前、必须将有用的数据写入 SRAM。 请遵循写入 SRAM 过程(数据表中的第10.5.4节):

    下面详细介绍了将器件寄存器传输到相应 SRAM 页面的编程序列。
    对器件寄存器进行编程、以匹配所需的设置。
    2.向 R145[3:0]写入一个有效的 SRAM 页(0至5)以提交当前寄存器数据。
    3.向 R137.6写入1。 这可确保器件寄存器被复制到所需的 SRAM 页。
    4.如果需要将另一个器件设置写入不同的 SRAM 页、请重复步骤1-3并选择一个未使用的 SRAM 页。

    然后、您可以按照第10.5.5节对 EEPROM 进行编程。

    此致、
    Alan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我重新阅读您的初始帖子、并获得以下反馈:

    您将"错误的 EEPROM 值"配置为什么意思? 您是否有意尝试对错误/无效配置进行编程? 如果是、原因是什么?

    如果您在不更改任何器件配置设置(例如输入、PLL、输出或状态设置)的情况下通过10.5.4和10.5.5对器件加电并立即写入 SRAM 和 EEPROM、则只需使用初始加电时从 EEPROM 初始化的相同配置重新编程 EEPROM 页面。 这是否解释了为什么您没有看到您期望看到的故障?

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

    我很长时间尝试第10.5.4节和第10.5.5节、但它仍然没有用处、也许我会错过什么?

    我执行如下简单测试:

    ##请按照第10.5.4节##进行操作
    我读取 R14的器件(0x53)、它的值为0x1d。
    2.我将 R14的器件(0x53)写入0x0。
    3.我将 R145的器件(0x53)写入0x0
    4.我将 R137的器件(0x53)写入0x50

    ##请参阅第10.5.5节。 ##
    5.我将 R144的器件(0x53)写入0xEA
    6.我将 R137的器件(0x53)写入0x11
    7、我将 R144的器件(0x53)写入0x00

    当我检查 R136和 R137时、它们的模块如下所示:
    写入 EEPROM 之前:R136:0x100e
    :R137:0x0010
    写入 EEPROM 后:R136:0x110e
    :R137:0x0011

    在第10.5.5节中,我看到如下:
    向 R137.0写入1。 这会将整个 SRAM 内容编程到 EEPROM 中。 完成后、将显示中的内容
    R136将递增1。 R136包含 EEPROM 编程周期的总数
    已成功完成。


    如果 EEPROM 写入失败、R137.5的回读会导致1。 在这种情况下、器件将不会
    正常工作、将被锁定。

    所以、
    0x100e -> 0x110e 正确吗? 为什么 R136.8添加1、而 R136.0添加1?
    0x0010 -> 0x0011是否正确? 我看到 R137.5为0、那么写入 EEPROM 是否成功?

    当我重新上电时、EEPROM 不会发生变化。 R14仍在获取0x1d、而不是0x0。
    我想什么了吗?


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

    您好、Alan、

    1.我只是尝试修改 EEPROM 的任何值、然后检查重新上电后是否有任何更改。

    2.您是说在重新上电后无法将错误的值写入 EEPROM?

    目前、我们有一个配置文件、我尝试按照10.5.4和10.5.5写入 SRAM 和 EEPROM。  

    但在重新加电后写入 EEPROM 仍然没有用处、我尝试检查它为什么不有用。

    因此、我尝试为特定寄存器写入 SRAM 和 EEPROM、该值与原始值不同、遵循10.5.4和10.5.5。

    重新上电后、特定寄存器仍保持原始值、而不是新值。

    如上所述、这让我感到困惑。

    此致、

    瑞红太阳

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

    您好、Ruihong、

    您是否正在使用 LMK03318EVM 和 CodeLoader 软件? 您要写入哪个 EEPROM 页面?

    感谢您运行简单测试来对 SRAM 和 EEPROM 进行编程。  成功对 EEPROM 进行编程后、R136增加1、R137.5将读回为0。

    请在编程 EEPROM 之前和之后读回寄存器 R136和 R137。 您能否确认 R136 (后)= R136 (前)+ 1和 R137.5 (后)= 0? 您从 R136 / R137读回的数据将以0x88 / 0x89开头、后跟一个字节的数据。

    此外、请检查以确保在加电/复位时加载正确的 EEPROM 页面。 如果您使用的是 LMK03318EVM、则必须根据 LMK03318EVM 用户指南的表3设置控制引脚。 例如、如果您将设置写入 EEPROM 第0页、则需要在加电/复位时从 EEPROM 第0页加载寄存器。 为了从 EEPROM 第0页加载、GPIO2和 GPIO3必须被拉至低电平。 如需更多信息、请参阅 LMK03318EVM 用户指南的表3。

    此致、
    通道

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

    您好、Lane、

    R136增加1、R137.5为0。 我们仍然无法找到客户主机编程的根本原因。 现在、我们尝试逐步缩小范围以进行调试。

    1.通过随附的"LMK03318-L1_pg5_export from GUI"导入(恢复)配置代码到 LMK03318中、然后存储到 NVM 中。 因此、请回收电源以检查设置。  结果 符合我们的经验。

    2.然后、将十六进制的寄存器值从 GUI 导出到文本文件。 然后、将其提供给软件团队、以便在 Linux 上的 CPU 中实施。 首先写入 SRAM 而不重新循环、然后使用 GUI 从 SRAM 读取设置。 我们发现该设置未成功写入 LMK03318、即使地址也从0x53更改为0x37。 我们尝试通过主机读回该设置、然后将其导出为随附的"LMK03318_HOST 读回"。

    对此问题有什么想法、请帮助将此段作为参考代码进行比较并由 CPU 回读?

    e2e.ti.com/.../LMK03318_2D00_L1_5F00_pg5_5F00_export-from-GUI.txt

    e2e.ti.com/.../LMK03318_5F00_read-back-by-host.txt

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

    您好 Jason、

    我按照(1)操作、成功地使用"LMK03318-L1_pg5_export from GUI.txt"对 NVM 页面(5)进行了编程。 在一个下电上电后、器件寄存器从 EEPROM 第5页初始化。 R8的回读显示 R8[6:4]= 0x5、表示器件寄存器在上电后从 EEPROM 第5页加载。 您是否执行了这些步骤、并且无法正确加载/存储到 NVM 中? 请清楚您观察到的结果。

    然后、我按照(2)操作并使用 GUI 读取 SRAM 设置。 然后、我将十六进制寄存器设置导出到附加的文件"Register dump and comparation.xlsx"。 在此文件中、我将寄存器转储的结果与"LMK03318_host.txt"进行比较、并突出显示具有不同值的寄存器。 突出显示的寄存器对配置不重要、因此我认为它们不是问题。

    请注意、我在"LMK03318_host.txt"中看到、您从主机进行回读时正在从两个寄存器16位字读回数据。 例如、第一行以00:0b10开头。 在这种情况下、R0包含10、而 R1包含0b。 在与预期寄存器值进行比较时、请确保考虑到这一点。

    此外、还随附了一个 Excel 工作表、可用于生成用于对 LMK03318进行编程的脚本。 工作手册中包含相关说明。

    对器件进行编程时需要记住的一个重要细节是 EEPROM 编程命令必须是原子写入;正如数据表中描述的那样、写入 R144和 R137至关重要、而不会中断序列、并使用串行总线上的任何器件的其他读取/写入命令。 请确保您正确遵循编程步骤。

    此致、
    通道

    e2e.ti.com/.../Register-dump-and-comparison.xlsx 

    e2e.ti.com/.../LMK033x8_5F00_EEPROM_5F00_programming_5F00_worksheet_5F00_GeneralCust.xlsx