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.

[参考译文] CCS/TMS320F28075:I2C 停止条件未发生、发送的数据中的第一个位丢失

Guru**** 2538955 points
Other Parts Discussed in Thread: TMS320F28075, DAC7574

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/594060/ccs-tms320f28075-i2c-stop-condition-not-occurring-and-first-bit-missing-in-data-sent

器件型号:TMS320F28075
Thread 中讨论的其他器件: DAC7574、controlSUITE

工具/软件:Code Composer Studio

大家好、

我正在尝试测试 TMS320F28075的 I2C 模块、我正在使用写入 EEPROM v180的控制套件示例代码。 我尚未连接任何 EEPROM、但我已通过电阻器3KΩ 将 SDA 和 SCL 连接到 Vcc- 5V。 如图中所示。

但当我转到调试会话时、我看到正在发生一个开始条件并且正在发送数据(仅限地址)、正在使用8位模式、此后会生成8位(地址)、但不会发生停止条件。 BTW 如果发送的地址字节为0x98 (10011000)、则 SDA 将通过(00110000)(即

如果发送10101010 (0xAA)、我会看到01010100表示在 SDA 上发送左移数据。  

我也加载了捕捉以供参考。

  图像:发送的地址为0xAA

通道1:SDA

通道2:SCL

我已经像这样启动了 I2C

I2caRegs.I2CSAR.ALL = 0x0098;

I2caRegs.I2CPSC.all = 6;
I2caRegs.I2CCLKL = 10;
I2caRegs.I2CCLKH = 5; 49k
I2caRegs.I2CIER.ALL = 0x24;  

I2caRegs.I2CMDR.ALL = 0x0020;  

I2caRegs.I2CFFTX.ALL = 0x6000;  

写入操作

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

I2caRegs.I2CSAR.ALL = 0x98;

IF (I2cRegs.I2CSTR.bit.BB = 1)

返回 I2C_BUS_BUS_BUSY_ERROR;


I2caRegs.I2CCNT = 1;


I2caRegs.I2CDXR.ALL = 0xAA;

I2caRegs.I2CMDR.all =0x6E20;

是否有人能告诉我可能缺少的内容或问题?

提前感谢

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

    我写信告诉您、C2000团队成员已被分配到此帖子、应该很快回答。

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

    感谢您指派一位 C2000成员来回答问题、我热切地等待回复。

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

    根据您的 I2C 配置、您将使用7位寻址模式。

    在7位寻址模式中、当 I2CSAR = 0x0098时、Bit0:6代表7位从器件地址。 您会在波形中看到0x30

    SDA 引脚被拉、这表示您看到一个停止位。

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

    您好、Manoj、

    感谢您的回复、正如您所说、我在波形中看到了0x30。 但实际上我应该得到0x98、对吧?

    您说 SDA 被拉至高电平、是的、它被拉至高电平、但不是在 SCL 的高电平期间。 对于 STOP 条件、SDA 必须在 SCL 的高电平期间被拉高。  

     图像源:28075 I2C 模块文档

    我得到的是这样的。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不能、您不会看到0x98、只是因为您在 I2CSAR 中写入了0x98。 位7被忽略、因为只有位0:6代表7位寻址模式中的地址。 这就是在开始位后观察0x30的原因。

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

    因此、如果 SDA 发送0x30而不是0x98、那么从器件是否能够在调用时检测到地址? 我正在使用地址为0x98的 DAC7574 EVM。 我之所以提出这个问题、是因为我在 A1A0 = 00的情况下连接 DAC7574时、看不到出现任何 ACK。

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

    Lakshmi、

    对于 DAC7574、如果 A0 = A1 = 0、则从器件地址为0x4C、而不是0x98

    此致、

    曼诺伊

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

    您好、Manoj、

    正如您说过的、我尝试发送地址为0x4C。 它在 SDA 线上发送0x98并接收 ACK。 DAC 还根据控制字节后的第一个值提供输出。 控制字节为0x10。 但输出不依赖于控制字节后的第2个字节。

    我写过这样的

    I2caRegs.I2CCNT = 3;

    I2caRegs.I2CDXR.ALL = 0x10;

    I2caRegs.I2CDXR.All = I2C_HIGH_D;//0xFF

    I2caRegs.I2CDXR.All = I2C_LOW_D;//0xF0

    因此、当我改变 I2C_HIGH_D 时、DAC 输出会相应变化。 但输出 wrt I2C_LOW_D 没有变化、您能不能知道为什么会发生这种情况?(1)

    BTW 正如您所说、我发送0x4C 而不是0x98、我无法控制地址字节中的 R/W'。  它会自动执行写操作。 您能告诉我如何更改为读取模式吗?(2)

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

    您能否检查在 example_2807xI2C_EEPROM.c 中定义的 I2CA_ReadData 和 I2CA_WriteData 函数

    路径: \device_support\F2807x\V210\F2807x_examples_cpu1\i2c_EEPROM\cpu01

    是否在发送0xF0时获得确认?

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

    大家好、Manoj
    我使用的程序与您指定的程序相同、但为 v180、是的、我在0xF0之后获得 ACK (控制字节后的第二个字节- I2C_LOW_D)。

    我已经更新了屏幕截图。 它在0xFF 和0xF0之后都有 ACK

    此致、

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

    此致、