TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] TMS320F28035:与 EEPROM 24LC01BT-E/OT 的 I2C 接口存在问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/723686/tms320f28035-issue-with-i2c-interfacing-with-eeprom-24lc01bt-e-ot

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

您好!

我们正在尝试在微控制器(TMS320F28035)和 EEPROM 24LC01BT-E/OT 之间建立通信。 但它会带来以下问题:

1) 1)数据通过 I2C 线路传输。 但是、当我们读回时、读取缓冲区是0x0000。

2) 2)我们无法调试数据是否已正确写入 EEPROM、并且问题出在只读函数。 与通过读取函数一样、我们只能知道 EEPROM 中写入的内容。

3)我们在控制套件(Example_2803xI2C_EEPROM)中尝试了示例代码 V130、这似乎起作用、但在此代码中、读写函数似乎同步为: 例如、如果我在其他位置写入数据、在其他位置读取数据、那么两个缓冲区中的数据也始终相同。

我们不需要基于中断的 I2C,因此我们编写了一段代码,提供了第1)和第2)点中提到的问题。

随函附上 SDA 和 SCLK 的代码和波形、请告诉我我们是否在按顺序或 code.e2e.ti.com/.../EEPROM_5F00_TEST_5F00_1.txt 中出现错误

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

    您是否曾尝试使用 c2000ware 中的示例? OT 可能对控制套件示例进行一些更新。

    没有使用基于中断的示例的任何原因?
    中断将有助于确保我们在正确的实例中进行读取和写入。


    由于 FIFO 是多个字节的数据,因此也很适合使用 FIFO。

    在整个 EEPROM 中、读取缓冲区中读取的值是否相同?

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

    参考之前的 E2E 帖子可能会有所帮助、该帖子还提供了有关 EEPROM 示例的一些详细信息:

    e2e.ti.com/.../2627724

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

    是的、整个 EEPROM 在缓冲区中读取相同值的问题即将出现。

    我将尝试在程序中使用 FIFO 和中断。

    谢谢

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

    您好!

    感谢您的建议、导入示例的问题已解决。 我还有一个疑问:

    我们的要求是1)从 CAN 获取值、将其写入 EEPROM 中的某些位置。

    2) 2)从某些位置读取值。

    3) 3)在代码中使用这些值。

    当前代码出现的问题是调试后读取和写入代码、但我们需要在数据来自 CAN 后进行读取和写入。 如果可能、请为此建议解决方案。

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

    您好,

    您能否发布有关此主题的新查询,因为这是一个相互排斥的主题?

    很容易让正确的人进入。

    此致。

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

    我们的目标是

    1) 1) 1)输入 GUI 中的校准变量。

    1) 1)从 GUI (通过 CAN)读取值、并将相同的值写入 EEPROM

    2) 2)根据需要从 EEPROM 读取这些位置。

     

    该过程中面临的问题包括:

     

    1) 1)     我们在控制套件上找到了相同的示例。

    集成了相同的状态机、但我们在执行测试时发现了一个问题、即当我们尝试读取/写入超过2个字节时、我们也无法读取。

    我们将字节数设为2、将 I2C_Max_Buffer_size 设为6。 但在程序中、仍然缓冲区大小被视为4、请求为相同的解决方案提供建议。

     

    2) 2)     我们希望将传递到写入缓冲区的数据设置为变量、因为它通过 CAN、我们需要在 EEPROM 中传递相同的值。

     

    3) 3)     我们找到了一个应用手册:适用于高级应用的单相能量计解决方案、其中有一个 GUI、但下载后我们无法打开它。 可能缺少一些文件或需要一些预要求的软件。 我们也会请求帮助、因为我们将能够从同一个 GUI 中获得一些帮助。

    以下是应用手册的链接:

    http://www.ti.com/lit/ug/tidu386/tidu386.pdf

     

    下载的文件是 slaa517e

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

    我无法回答所有这些问题。 创建新帖子、重点关注您遇到的每个问题可能是一个好主意。 您可能还需要在不同的论坛上咨询(例如有关 slaa517e 的问题)。

    我假设您仍在讨论 i2c_EEPROM 示例。 默认情况下、该示例一次仅发送/接收2个字节、需要更改以处理更多字节。 请记住、F2803x FIFO 缓冲区大小为4字节宽。

    2.这不应该是问题。 如果您有与此相关的具体问题、请告知我们。 如果与 I2C 无关、请创建新帖子。

    3.我在本设计指南中看不到参考的 GUI。 您可能在谈论 slaa517e?

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

    尊敬的 Kevin:

    我们尝试将 I2CCNT 更改为2以上、实际上我们也开发了一个新代码。 但直到读取的2个字节仍然正常、但超过2个字节会出现问题、例如数据不匹配

    1) 1)请求告知我们是否要对写入/读取超过两个字节的数据进行任何检查、但增加 I2CCNT 寄存器除外。

    2) 2)我们甚至尝试传递不同的位置并调用相同的函数两次、请求让我们知道在2个不同的位置进行读取/写入、而不提供上电复位。

    谢谢  

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

    您好!

    问题可能出在 I2CMDR 寄存器。 当写入/读取程序时、I2CMDR.STP 位被置位为1、当 I2C 模块的内部数据计数器(I2CCNT)计数到0时、这将导致器件产生一个停止条件。

    将该位置位时、可以继续填充 TX/RX FIFO 缓冲区、发送更多字节而不会停止通信。

    有关 I2C 外设的更多信息、请参阅 F2803x I2C 指南:

    http://www.ti.com/lit/sprufz9

    最棒的
    Kevin

    编辑:

    您可能需要查看您正在使用的 EEPROM 的数据表、其中应提供如何正确从存储器读取连续字节的说明。

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

    您好!

    我们尝试将停止条件设置为0。

    现在、当我们调用2个不同的函数时、我们能够读取和写入2个以上的字节、但接下来的问题是数据变得不匹配。

    例如:如果我们在地址0x0056写入0x10,在0x0068写入0x20,则在0x0056写入0x20,在0068写入0x10。

    随函附上读写函数

    这两个函数都被调用2次,参数不同,希望在2个不同的位置写入。

    unsigned char EEPROM_WRITE (uint16 t_data、uint16 t_add)

    if (I2caRegs.I2CMDR.bit.STP=1)

    返回0;

    I2caRegs.I2CSAR = 0x50;
    I2caRegs.I2CCNT = 4;
    I2caRegs.I2CDXR = t_add>8;
    I2caRegs.I2CDXR = t_add;
    I2caRegs.I2CDXR = t_data>>8;
    I2caRegs.I2CDXR = t_data;
    I2caRegs.I2CMDR.ALL = 0x6E20;
    W_FLAG = 1;

    返回1;

    无符号字符 EEPROM_READ_M (uint16 r_add)


    if (I2caRegs.I2CMDR.bit.STP=1)

    返回0;

    I2caRegs.I2CSAR = 0x50;
    I2caRegs.I2CCNT = 2;
    I2caRegs.I2CDXR = r_add>8;
    I2caRegs.I2CDXR = r_add;
    I2caRegs.I2CMDR.ALL = 0x2620;
    DELAY_US (1000);
    I2caRegs.I2CCNT = 2;
    I2caRegs.I2CMDR.ALL = 0x2C20;
    for (i=0;i<2;i++)

    Z[i]=I2caRegs.I2CDRR;
    // I2caRegs.I2CMDR.bit.STP=0;
    DELAY_US (2000);

    数据= I2caRegs.I2CDRR;

     

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

    器件型号:TMS320F28035

    您好!

    我们的要求是1)从 CAN 获取值、将其写入 EEPROM 中的某些位置。

    • 2) 2)从某些位置读取值。

      3) 3)在代码中使用这些值。

    我们尝试将停止条件设置为0。

    现在、当我们调用2个不同的函数时、我们能够读取和写入2个以上的字节、但接下来的问题是数据变得不匹配。

    例如:如果我们在地址0x0056写入0x10,在0x0068写入0x20,则在0x0056写入0x20,在0068写入0x10。

    随函附上读写函数

    这两个函数都被调用2次,参数不同,希望在2个不同的位置写入。

    unsigned char EEPROM_WRITE (uint16 t_data、uint16 t_add)

    if (I2caRegs.I2CMDR.bit.STP=1)

    返回0;

    I2caRegs.I2CSAR = 0x50;
    I2caRegs.I2CCNT = 4;
    I2caRegs.I2CDXR = t_add>8;
    I2caRegs.I2CDXR = t_add;
    I2caRegs.I2CDXR = t_data>>8;
    I2caRegs.I2CDXR = t_data;
    I2caRegs.I2CMDR.ALL = 0x6E20;
    W_FLAG = 1;

    返回1;

    无符号字符 EEPROM_READ_M (uint16 r_add)


    if (I2caRegs.I2CMDR.bit.STP=1)

    返回0;

    I2caRegs.I2CSAR = 0x50;
    I2caRegs.I2CCNT = 2;
    I2caRegs.I2CDXR = r_add>8;
    I2caRegs.I2CDXR = r_add;
    I2caRegs.I2CMDR.ALL = 0x2620;
    DELAY_US (1000);
    I2caRegs.I2CCNT = 2;
    I2caRegs.I2CMDR.ALL = 0x2C20;
    for (i=0;i<2;i++)

    Z[i]=I2caRegs.I2CDRR;
    // I2caRegs.I2CMDR.bit.STP=0;
    DELAY_US (2000);

    数据= I2caRegs.I2CDRR;

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如前所述、您应该查看特定 EEPROM 的数据表、了解应如何格式化写入的数据以及如何正确读回数据。

    字节序可能因存储器器件而异。

    最棒的
    Kevin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我合并了此帖子、因为它是重复的。