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.

[参考译文] RM44L920:I2C 代码锁定在 i2cisStopDetected (i2cREG)上

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1074546/rm44l920-i2c-code-locked-on-i2cisstopdetected-i2creg

部件号:RM44L920
“线程:HALCOGEN”中讨论的其它部件

大家好,我对 I2C 代码有疑问。

我正在看这一示例,并尝试编写自己的代码。

i2cSetSlaveAdd(i2cREG1, Slave_Address);/*配置从属设备的地址以与*/通话
i2cSetDirection (i2cREG1,I2C_TRANSMERTER);/*将方向设置为 Transmitter*/
i2cSetCount (i2cREG1,1);/*配置数据计数*/
i2cSetMode (i2cREG1,I2C_MASTER);/*将模式设为 Master*/
i2cSetStop (i2cREG1);/*设定计数后停止*/
i2cSetStart(i2cREG1);/*发射开始条件*/
i2cSendByte (i2cREG1,0x00);

while (i2cIsBusBusy (i2cREG1)== true);/*等待总线占线被清除*/
当(i2cIsStopDetected (i2cREG1)== 0)时;/*等待检测到 Stop 时*/

i2cClearSCD (i2cREG1);
i2cSetSlaveAdd(i2cREG1, Slave_Address);/*配置从属设备的地址以与*/通话
i2cSetDirection (i2cREG1,I2C_RECEIVER);/*将方向设置为 RECEIVI*/

当我启动我的应用程序时,它等待着'while (i2cIsStopDetected (i2cREG1)== 0);'代码。

我以哈洛科根为例。

我应该为什么解决?

谢谢

安东尼

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

     你好,安东尼,

    发送一字节数据后,是否发送 STP?

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

    什么是 STP?

    当我修正如下代码时,它是有效的。

    但我仍然不知道它的作用原因

    i2cSetSlaveAdd(i2cREG1, Slave_Address);/*配置从属设备的地址以与*/通话
    i2cSetDirection (i2cREG1,I2C_TRANSMERTER);/*将方向设置为 Transmitter*/
    i2cSetCount (i2cREG1,1);/*配置数据计数*/
    i2cSetStart(i2cREG1);
    while (i2cIsBusBusy (i2cREG1)== true);/*等待总线占线被清除*/
    i2cSendByte (i2cREG1,0x00);
    why((i2cREG1->STR & I2C_ARDY )== false );
    i2cREG1->MDR = I2C_RESET_OUT;//要设置具有“C”的 MDR,则不能重置

    i2cSetMode (i2cREG1,I2C_MASTER);
    i2cSetDirection (i2cREG1,I2C_RECIVER);
    i2cSetCount (i2cREG1,data_count);

    i2cSetStart(i2cREG1);
    i2cSetStop(i2cREG1);
    i2cReceive(i2cREG1, data_count, sensTemp);//接收2字节数据

    while (i2cIsBusBusy (i2cREG1)== true);

    /*等待检测到停止*/
    i2cIsStopDetected (i2cREG1)== false);
    /*清除停止条件*/
    i2cClearSCD (i2cREG1);

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

    请知道您已经使您的代码有效。

    STP 已停止

    发送一个字节的数据不会自动停止。  

    i2cSendByte (i2cREG1,0x00);
    why((i2cREG1->STR & I2C_ARDY )== false );--> 您可以在此处查看 BB。

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

    在 HALCOGen 帮助(example_i2cSlave_TX_RX.c)上,不要发送 STP。

    然后,如果我想让我的代码成为示例,我应该使用 i2cSend 代替 iwcSendByte 吗?