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.

[参考译文] TMS320F28377D:通过 I2C 读取 EEPROM 时遇到问题

Guru**** 2595770 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/666807/tms320f28377d-trouble-reading-eeprom-through-i2c

器件型号:TMS320F28377D
主题中讨论的其他器件:C2000WARE

您好!

我已经编写了代码、通过 I2C 外设读取已编程的 EEPROM、下面是我完成的步骤。

在主发送器模式下配置 I2C 并发送 EEPROM 的起始地址。

在地址设置完成后、将 I2C 配置为主机接收器模式、按顺序读取最多16个字节(FIFO 最大值)的数据并停止数据传输。

重复上述步骤(不再次发送地址)以读取数据块(16字节)、直到所有数据读取完成。  

当我获得前一个块的停止条件中断时、逐块读取完成。

所以、当我运行这个软件时、只有第一个块的读取成功...当我保持断点来检查 并运行软件时、逐块读取正如我所期望的那样成功。然后  

我在发送命令用于下一个块读取之前保留了1微秒的延迟,这次也可以正常工作...没有延迟,它不能按预期工作。

我已经检查了传输失败时寄存器的状态、发现总线是空闲的、没有任何类型的中断、但是停止条件不会被清除。 我无法理解这种情况。

我编程的序列是否有故障或 缺少其他任何内容? 请帮助

此致、

Naveen。

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

    无延迟运行时是否总是会发生此故障?
    您是否有故障传输块的示波器捕获?
    您是否在 I2C 中启用了任何其他错误检测? 如果是、您是否在错误检测期间意外清除了停止位?

    我将亲自动手使用 EEPROM、看看明天是否可以复制该行为。

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

    Naveen、

    只需让您知道我找到了 EEPROM、并且正在努力重新创建与您尝试实现的目标类似的内容。

    同时、您可以查看器件的 I2C_boot.c。 它实际上与您的方法非常相似,但它不是一次读取16个字节,而是一次读取四个(32位)。 这是引导代码的路径。 代码有一些抽象、因此可以在所有不同的引导模式中重复使用、但我认为您应该能够遵循该过程。

    编辑添加指向 C2000Ware 中引导 ROM 源位置的链接  

    C:\ti\c2000Ware_1_00_03_00\libraries\boot_rom\f2837xd\revB\rom_sources\F2837x_bootrom\cpu01-bootrom\sources\I2C_Boot.c

    C:\ti\c2000Ware_1_00_03_00\libraries\boot_rom\f2837xd\revB\rom_sources\F2837x_bootrom\cpu01-bootrom\source\shared_Boot.c


    请告诉我您是否有关于您的问题的任何其他信息、这些信息可能有助于更快地解决问题。

    谢谢、
    标记

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mark、您好!
    我一定会查看 I2cboot.c、并更新您的行为。
    谢谢