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.

[参考译文] MSP432E411Y:I2CMSP432E4驱动器在通信故障后无法恢复

Guru**** 2406510 points
Other Parts Discussed in Thread: MSP432E411Y, HDC1080

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/893714/msp432e411y-i2cmsp432e4-driver-does-not-recover-after-communication-failure

器件型号:MSP432E411Y
主题中讨论的其他器件: HDC1080

尊敬的专家:

我使用 I2CMSP432E4驱动程序的修补版本已有一段时间,请参阅相关文章

现在、我认为现在是升级到 SimpleLink 4.10的时候了。 但我遇到了新驱动程序问题、需要帮助。

我们有一个 HDC1080通过连接器连接到 MSP432E411Y。 此连接可能会断开并再次连接。 I2C 通信应在重新连接后恢复、并使用修补的驱动程序进行。 使用新的驱动程序时、我会遇到一种奇怪的行为:

  1. 在传感器已连接的情况下启动 UC ->传输状态0 ->确定
  2. 断开传感器->变速器状态-1
  3. 重新连接 传感器->变速器状态-8

我可以重复步骤2和3多次、状态可重现、但不正常。

然后、我在 I2CMSP432E4 .C 的第963行中设置一个断点 (我将 I2C.c 和 I2CMSP432E4 .c 复制到了我的项目中、以获取调试信息。)

我在连接传感器时单步执行代码(按 F6键)。 返回值和传输状态变为0 ->正常。

我让程序再次运行。 现在工作正常:

  1. 断开传感器->变速器状态-5
  2. 重新连接 传感器->变速器状态0

我可以重复步骤1和2多次、状态可重现且正常。

我使用以下代码打开驱动程序:

I2C_Params i2cParams;
I2C_Params_init (&i2cParams);
i2cParams.transferMode = I2C_MODE_BLOCKING;
i2cParams.bitrate = I2C_100kHz;

/*检查 I2C 是否已打开-
* I2C 可能已经被另一个 HAL 模块打开、例如
*扩展板或 MAC 地址存储驱动程序的 Board_LHC04_I2C8
*
I2C_SENSOR_ASSERT (i2cIdx < I2C_COUNT);
I2CMSP432E4_Object * i2cObjPtr = I2C_CONFIG[i2cIdx].object;
if (i2cObjPtr -> isOpen)
{
objPtr->i2cHandle =(I2C_Handle)&(I2C_CONFIG[i2cIdx]);
/*检查正确的设置*/
i2C_sensor_assert (i2cObjPtr -> transferMode = i2cParams.transferMode);
i2C_sensor_assert (i2cObjPtr -> bitrate = i2cParams.bitrate);
}
其他
{
// I2C_open 通过 GPIOPadConfigSet()清除 AMSEL 位,因此不再有 ADC 输入
objPtr->i2cHandle = I2C_open (i2cIdx、&i2cParams);
}
i2C_sensor_assert (objPtr ->i2cHandle!= NULL);

要发送数据的代码:

静态 bool HDC1080config (I2C_SensorObject * self)
{
//将 HDC1080配置为组合温度和湿度测量,每个分辨率为14位*/
uint8_t writeBuffer[]=
{
HDC_CONFIG、//写入 HDC1080配置寄存器(指针寄存器的设置)
0x10、0x00 // MSB 优先、仅位12 = 1:结合测量温度和湿度、高精度
};
// I2C_Transaction i2cTransaction;
// i2cTransaction.slaveAddress = I2C_ADR_HDC1080;
// i2cTransaction.writeBuf = writeBuffer;
// i2cTransaction.writeCount = sizeof (writeBuffer);


// i2cTransaction.readHandf = NULL;// i2ctransfer_readtransfer...(i2i2ctransfer_read0);// i2c.return = sizeof (i2cTransaction.readHandle);// i2i2cTransfer_readHandle;// i2i2ctrans
self->i2cTransaction.slaveAddress = I2C_ADR_HDC1080;
self->i2cTransaction.writeBuf = writeBuffer;
self->i2cTransaction.writeCount = sizeof (writeBuffer);
self->i2cTransaction.readBuf =空;
self->i2cTransaction.ReadCount = 0;
self->i2cTransaction.status = I2C_STATUS_SUCCESS;
返回(I2C_TRANSFRAT(self->i2cHandle,&(self->i2cTransaction));
}

您是否可以尝试重现问题并解决问题?

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

    Sven、您好!

    很抱歉耽误你的时间。  让我联系 SDK 软件团队、看看我是否可以让他们来看看。   

    谢谢、

    JD