STM32
直播中

陈燕

8年用户 1171经验值
私信 关注
[问答]

stm32G0x0 I2C长时间运行数据接收和实际不一致是为什么?

我们用STM32的hal库 加一个rtos 进行数据收发(master) 由于设计的时候没考虑到线程切换的问题 所以发生了在master收从机数据的时候 发生线程切换 导致master发给slave的ack 被拉的很长 到1ms以上,之后返回的数据就不对的 ,但是多次读数据之后 又正常了,请问这种情况下 从数据寄存器拿到的数据还保证正确吗?如上图所示 ack被拉了1ms左右,看了stm32的手册是允许clk L 延申的 有没有超时时间这种说法



回帖(1)

h1654155598.0450

2024-3-13 17:24:23
从您的描述来看,长时间运行数据接收和实际不一致的原因可能是由于线程切换导致的ACK信号不稳定,进而影响了数据的传输。当ACK信号高电平持续拉高1ms以上时,数据可能无法正确传输。

根据您的描述,即使出现数据传输错误,多次读取数据后又恢复正常,这可能是由于某些线程切换导致的时序问题,并且由于ACK信号恢复稳定,数据传输也相应恢复正常。

关于从数据寄存器取出的数据是否保证正确,这取决于整个I2C传输的稳定性。如果ACK信号的不稳定性只是偶尔发生,大部分时间是正常的,那么通过从数据寄存器取出数据,一般可以保证正确性。但是如果ACK信号不稳定性较长时间持续存在,可能会导致数据传输错误,从数据寄存器取出的数据可能不正确。

针对该问题,您可能需要考虑在设计时对线程切换和ACK信号引发的时序问题进行调整和优化,以确保数据的稳定传输。此外,了解具体的超时时间和时序要求,可以参考STM32的技术手册和参考资料,以了解更多关于I2C接口的限制和建议。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分