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.

[参考译文] BQ76952:BQ76952:I2C 主从通信问题

Guru**** 2392905 points
Other Parts Discussed in Thread: BQ76952, BQ76942

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1375625/bq76952-bq76952-i2c-master-slave-communication-issues

器件型号:BQ76952
Thread 中讨论的其他器件: BQ76942

工具与软件:

您好!  

 
我们遇到了一个有关 STM32 (主站)和 BQ76952 (从站)之间 I2C 通信的问题、这两个都是在我们的电池管理系统中实现的。  

I2C 有两个问题。  

第一个 I2C 问题:  

使用相同的器件和相同的软件、我们注意到三种随机发生的情况:  

  1. 引导写入命令不会返回任何错误、并且进一步的通信是正确的。  
  2. 引导后、几个初始写入命令返回错误、进一步通信是正确的。 但是、我们注意到一些设备在较长的时间段(例如两个月)后失去通信、我们不知道其原因是什么。 仅在重新启动 STM32后、通信才正确。  
  3. 有时在引导后、很少的初始写入命令返回错误、并且 I2C 外设锁定。 在这种情况下、所有通信都失败。 仅在重新启动 STM32后、通信才正确。  
  4. I2C 速度:100kHz、 上拉 电阻器为10k、也使用4.7kΩ 进行了测试、未做任何更改  

我们通过在系统启动/重启时发送20个空时钟周期来解决第一个 I2C 问题。 也尝试使用9个空时钟周期、但结果比20个空时钟周期更差。 这20个空时钟周期会清除 BQ76952拉至 GND 的 SDA、并使通信正常启动。  

第二个 I2C 问题:  

ST 的 HAL 在正常运行期间在处理通信故障时存在问题、例如 SDA 和 SCL 之间短路(例如上拉电阻器之间的环境污染)。  

如果我们检测到传输错误并且在传输后仍设置 BUSY 标志、我们通过将 PE 位切换为0然后再切换回1来解决此问题。  

 

这些与 BQ76952相关的修复措施是否会导致任何缺点? 这两种解决方案解决了我们的问题、但我们不确定是否适合 BQ76952的其他一些方面和案例。 我们测试了这两种方法、都得出了积极的结果。  

此致、  

Karol  

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

    您好 Karol:

    1.是的。发送20个空时钟周期可行、您也可以将 RST_SHUT 引脚驱动为高电平小于1秒。 这将复位数字逻辑、而数字逻辑也应该恢复通信。 有关部分复位的更多信息、请参阅 [常见问题解答] BQ76952:如何复位 BQ769x2器件?

    2.我不是很遵循你的第二种方法。 您能否更深入地阐明该方法?

    发送20个空时钟周期不会出现问题。

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

    您好!  

    在运行期间 HAL 在处理 I2C 通信故障时会出现问题、例如:

    1. SDA 和 SCL 线路之间的短接(例如上拉之间的环境污染)。

    2. SCL 线路与地之间的短接。

    STM32检测到仲裁丢失(Arlo 错误)、就像在多主模式设置中一样(但在我们的案例中、没有多主模式、我们只有一个主模式:一个 STM32)。 这使得 BUSY 标志保持开启状态、等待来自其他主器件的停止条件。 在单主器件情况下(因此在我们的情况中)、发送停止条件绝不会发生(没有其他主器件)、并且所有下一次传输都会被阻止。 根据参考手册、如果没有其他主器件可以生成停止条件、则将 PE 位置为0是复位该标志的唯一选项。 STM32手册中的以下屏幕如下:

    作为权变措施、如果我们检测到传输错误并且在传输后仍设置 BUSY 标志、则将 PE 位切换为0、然后再切换回1。 该方法是否会造成任何缺点? 如上所述、我们已经解决了这个问题、但我们不确定其他方面和案例是否合适。 我们不想用我们的解决办法在其他地方造成任何其他问题。

    此致、  

    Karol  

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

    您好 Karol:

    我们感谢那里的解释! 我认为这不会引起我们方面的问题。

    现在、从 BQ76942的角度来看、我可能会建议您查看 BQ76942的 I2C 速度配置。 该器件有400kHz 和100kHz 两种模式、因此后者可能需要在此处使用。 我个人没有看到使用400kHz 时较慢时钟速度的问题、但它可能值得一看。

    此致、

    Luis Hernandez Salomon