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.

[参考译文] RTOS/MSP432E411Y:I2C 驱动器会永久阻止某些 I2C 错误

Guru**** 2589280 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/740966/rtos-msp432e411y-i2c-driver-blocks-forever-for-some-i2c-errors

器件型号:MSP432E411Y

工具/软件:TI-RTOS

尊敬的 TI 专家:

我对用于 I2C 的 TI 驱动程序 I2CMSP432E4.C 有一些问题

当我向连接的器件发送软件复位时、它不会定期完成 I2C 通信。

在 I2CMSP432E4_hwiFxn 中、会检测到 errStatus = 0x8 (I2C_MASTER_ERR_DATA_ACK)。 遗憾的是、该错误不会解锁传输函数挂起的信标。 因此、整个应用程序将无法再运行。 您能否解决此问题并向我发送解决方法?

我很快就需要一个解决方案、因为它会阻止我们的软件发布!

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

    您好!

      仅为了澄清、问题是"尝试"发送停止位失败。  取自 I2CMSP432E4.c:  

    /*检查 I2C 错误*/
    if ((errStatus = I2C_MASTER_ERR_NONE)||
    (object->mode =I2CMSP432E4_error){
    /*无错误,现在检查我们接下来需要做什么*/
    }
    否则{
    /*发生了某种错误! *
    object->mode = I2CMSP432E4_error;
    
    if (errStatus &(I2C_MASTER_ERR_ARB_Lost | I2C_MASTER_ERR_ADDR_ACK){
    完成传输((I2C_Handle)参数);
    }
    否则{
    /*尝试发送停止位以立即结束所有 I2C 通信*/
    /*
    * I2C_MASTER_CMD_BURST_SEND_ERROR_STOP -和-
    * I2C_MASTER_CMD_BURST_Receive_ERROR_STOP
    *具有相同的值
    *
    I2CMasterControlhwAttrs->baseAddr、
    I2C_MASTER_CMD_BURST_SEND_ERROR_STOP);
    }
    } 

    对于软件复位、是在不考虑系统操作的情况下应用复位。

    谢谢、

    Chris

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

    在器件初始化期间发送软件复位、以在软件重启后获得定义的状态(不进行下电上电、因此器件不进行硬件复位)。

    如果"尝试"发送停止位不成功、我无法这么说。 至少中断处理程序返回、以便调用空闲函数。

    器件不确认最后一个数据字节、因此 errStatus = 0x8 (I2C_MASTER_ERR_DATA_ACK)是合理的。

    问题是 I.M.H.O.、CompleteTransfer 函数未被调用、因此在阻塞模式下不会进行 transferCallbackFxn (blockingCallback)调用、也不会发布信标"transferComplete"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Chris、

    有关此问题的任何新闻?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sven。 我有过这样的失误,我感到遗憾的是,我不再继续前进。 我相信,我已纠正了这个问题,并已与一些同事联系,寻求协助。

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

    e2e.ti.com/.../I2CMSP432E4.cPlease查找随附的。  

    否则{
    /*错误处理*/
    IF (((errStatus &(I2C_MASTER_ERR_ARB_Lost | I2C_MASTER_ERR_ADDR_ACK))||
    (object->mode =I2CMSP432E4_idle_mode)){
    /*已发生停止条件,完成传输*/
    object->mode = I2CMSP432E4_error;
    完成传输((I2C_Handle)参数);
    }
    否则{
    /*传输过程中发生错误,发送停止条件*/
    object->mode = I2CMSP432E4_error;
    I2CMasterControlhwAttrs->baseAddr、
    I2C_MASTER_CMD_BURST_SEND_ERROR_STOP);
    }
    } 

    此致、

    Chris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sven、
    此解决方案是否解决了您的特定问题? 如果可能、我想向驾驶员团队提供一些反馈。

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

    您好 Chris、

    感谢您提供修复。 我已经将其放入项目中、但我目前正忙于处理其他问题。 我希望能够在一两天内测试修复程序。 我会随时向您通报结果。

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

    修复程序运行良好。
    非常感谢您的大力支持!