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.

[参考译文] SK-AM64B:具有 3 个地址线的 I2C 器件@0x51 仍失败

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1599020/sk-am64b-i2c-device-0x51-with-3-address-lines-still-failed

器件型号: SK-AM64B

您好:

使用最新 SDK 时、请遵循的现有问题:  mcu_plus_sdk_am64x_11_02_00_24

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1502968/sk-am64b-sk-am64b---i2c-board-id

客户支持部门已指示 I2C EEPROM 写入/读取错误应由此 SDK 版本修复。 但显然没有。

在 board.c 文件中:

#define I2C_READ_TARGET_ADDR       (0x51U)
#define EEPROM_MEM_ADDRESS        (0x0400U)
#define EEPROM_ADDR_SIZE         (3U)
在 i2_memory_read.c 中:
 
#define BYTE_COUNT            (128U)
 
//写入 txbuffer 数组
 
  for (count = 0;count < byte_COUNT;count++)
  {
    txBuffer[COUNT]=(uint8_t) count;
  }
……
//从 rxbuffer 数组中读取
 
    for (count = 0;count < byte_COUNT;count++)
 {
 DebugP_log(地址 0x%x 处的“[I2C]数据:0x%x \r\n“、(i2cEepromMemAddr + count)、rxBuffer[COUNT]);
  }
 
读取的数据始终为整个数组显示 0xA5。
 
image.png
我认为 3 地址 I2C EEPROM 接口仍然存在问题。
 
请在 2025 年 3 月初访问报告的主题链接。
 
谢谢、
Huynh
 
 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Huynh:

    检查一下设置中的上述行为。 请等待一段时间恢复。

    此致、

    Tushar

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

    尊敬的 Huynh:

    我再次检查了驱动程序代码。  EEPROM_ADDR_SIZE 宏不表示 I2C 器件的地址位。  EEPROM_ADDR_SIZE 宏实际上表示捕获 EEPROM 的实际物理地址所需的字节数。 EEPROM 器件的地址为 (0x0400)、它是 2 字节值。

    因此 EEPROM_ADDR_SIZE 宏命令应保存值 2。 请将宏更新为值 2、如果您仍然遇到问题、请告知我们。

    请参阅下图。

    此致、

    Tushar

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

    这意味着 SDK 版本。 11.2 使得 SK I2C @0x51 且 EEPROM_ADDR_SIZE (3U) 时出现此误差。

    因此没有错误、因为旧版本使用 EEPROM_ADDR_SIZE (2U)。

    但是、当我将测试数据更改为时、对 SK 板(器件= AT24C512C)使用此示例 I2C_MEMORY_READ  

     #define BYTE_COUNT            (256U)

    然后出现了这个别名错误、其中 0x400 处的读取字节应为 0x0、依此类推、但在这里它读回 0x80:  

    但如果是 #define BYTE_COUNT            (128U) 则不会出现错误。

    这是因为 I2C 存储器事务被视为页面访问、对于该器件、该值为 128 吗?

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

    尊敬的 Huynh:

    因此没有错误、因为旧版本使用 EEPROM_ADDR_SIZE (2U)。

    是的、以上都是正确的。

    是因为 I2C 内存事务被视为页面访问、对于此器件为 128 吗?

    是的、以上都是正确的。  AT24C512C EEPROM 支持 128 字节页写入。  如果将超过 128 个数据字传输到 EEPROM、则数据字地址将回滚、并且之前的数据将被覆盖。

    请参阅的“页面写入“部分  EEPROM-at24c512c 数据表

    此致、

    Tushar