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.

[参考译文] TMS320F2800155-Q1:C2000微控制器论坛

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1358216/tms320f2800155-q1-c2000-microcontrollers-forum

器件型号:TMS320F2800155-Q1
主题中讨论的其他器件:SysConfigC2000WARE

尊敬的团队:

  当我使用例程 i2c_ex6_eeprom_interrupt.c 时、在读取数据时、将要读取的字节数设置为0、然后我的时钟线 SCL 和数据线 SDA 将保持低电平。 我再次仿真复位后、时钟线 SCL 将保持低电平、而数据线将保持高电平。 此时、IIC 总线锁定并卡在 I2CBusScan (I2CA_BASE、pAvailableI2C_targets) while (! (I2C_getStatus (base)和 I2C_STS_REG_ACCESS_RDY);在这里、我在配置总线时尝试下拉 SCL 以保持2ms 、好像无法退出总线锁定状态、我已经在 TI 论坛上查询了其他处理方法、如下:当我使用例程 i2c_ex6_eeprom_interrupt.c 时、将读取数据线路的字节数设置为0、然后将 SCL 保持低字节、读取数据线路的字节数。 我再次仿真复位后、时钟线 SCL 将保持低电平、而数据线将保持高电平。 此时、IIC 总线锁定并卡在 I2CBusScan (I2CA_BASE、pAvailableI2C_targets) while (! (I2C_getStatus (base)和 I2C_STS_REG_ACCESS_RDY);在这里、我在配置总线时尝试下拉 SCL 以保持2ms、似乎无法退出总线锁定状态、我已经在 TI 论坛上查询了其他处理方法、如下所示:

void I2CDeadLock(void)
{
   // uint8_t states;
    I2C_disableReset(I2CA_BASE);//IICMDR.ISR = 0
    DEVICE_DELAY_US(2000u);
    I2C_setConfig(I2CA_BASE, I2C_CONTROLLER_SEND_MODE);
    I2C_sendNACK(I2CA_BASE);//IICMDR. == 0
    I2C_enableFdF(I2CA_BASE); //IICMDR.FDF = 1
    I2C_enableLoopback(I2CA_BASE);//IICMDR.DLF = 1
    I2C_setDataCount(I2CA_BASE, 1);//ICCINT.ICCINT = 1
    I2C_putData(I2CA_BASE,0xFF);
    I2C_sendStartCondition(I2CA_BASE);
    DEVICE_DELAY_US(2000u);
  //  while(!(I2C_getStatus(I2CA_BASE) & I2C_STS_REG_ACCESS_RDY));


   I2C_enableReset(I2CA_BASE);//IICMDR.ISR = 1
    I2C_setConfig(I2CA_BASE, I2C_CONTROLLER_SEND_MODE);
    I2C_enableFdF(I2CA_BASE); //IICMDR.FDF = 1
    I2C_setDataCount(I2CA_BASE, 1);//ICCINT = 1
    I2C_putData(I2CA_BASE,0x01);
    I2C_sendStartCondition(I2CA_BASE);
    while(!(I2C_getStatus(I2CA_BASE) & I2C_STS_REG_ACCESS_RDY));
    I2C_sendNACK(I2CA_BASE);

    I2C_sendStopCondition(I2CA_BASE);
}

使用上述代码、可以释放 SDA 和 SCL、但这会导致我的 IIC 通信异常。

当 SCL、SDA 处于低功耗水平时、这次一直在处理中断 i2cFIFO_ISR ()、将导致我的程序运行其他。 总之、一种是在死锁状态下如何退出、另一种是在 SCL 和 SDA 仍然通电时如何操作。

此致

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

    尊敬的 Zhang:

    复位后、BUSY 位的状态是什么、您能否指定 I2C 通信如何异常?

    我会保留注释掉第14行、在复位之后、当 I2C 接收/发送一个停止位时、该位应该被清零。 当 SDA 从高电平变为低电平时、这应该会启动 START 条件。  另一个想法是尝试 在 I2C 从复位中结束后增加一些时间、如以下 E2E :TMS320F280049:I2C 配置中的建议所示

    其他可能有帮助的 E2E: TMS320F2808 I2C 问题、TMS320F28027F :I2C 扫描不阻塞

    此致!

    艾什瓦里亚

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

    尊敬的 Aishwarya Rajesh:

    首先、非常感谢您回答我的问题、

    复位后、SCL 一直为低电平、SDA 一直为高电平、这将导致我的通信异常。

    同时、当我经常在 EE 中写入和读取数据时、我发现操作无法正常通信、此时我的 I2caRegs.CMDR.STP 始终为1、我想问为什么会出现这种情况。

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

    章、

    仔细检查 I2C 时钟、电源和引脚多路复用配置。 任何 I2C 示例(示例#1使用 SysConfig 执行此操作)中都显示了应该如何执行此操作。 如果您尚未安装、我建议使用 C2000Ware 5.02 (最新版本)、该版本对 I2C SysConfig 进行了一些增强。  

    SDA 和 SCL 上是否有上拉电阻器? I2C 是一个开漏总线、总线上的一切都拉低或变为高阻抗。 要将线路上拉为高电平、需要一个外部上拉电阻、这是因为内部上拉电阻太弱。 我们通常建议使用约2.2千欧的电阻 、I2C TRM 部分和本 应用手册中提供了此信息。 配置后、当 MCU 处于复位状态(高阻抗输出)时、这两条线路的电平是多少? 如果 SCL 仍然为低电平、则需要不同的上拉电阻和/或 目标可能存在问题。

    艾什瓦里亚

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

    章、

    您是否能够解决此问题? 如果没有其他问题、我将继续、关闭此主题  

    此致、

    艾什瓦里亚