[其他ST产品] mcu iic问题:mcu作为i2c-slave, main函数内循环打印,收到 i2c get 时,循环打印停止了是什么原因?

[复制链接]
 楼主| probedog 发表于 2024-5-11 20:00 | 显示全部楼层 |阅读模式
ic, ge, MCU, I2c, AI
mcu作为i2c-slave, main函数内循环打印, 收到 i2c set 时,循环打印正常, 收到 i2c get 时,循环打印停止了
com4 窗口是 mcu 循环打印的数据, 执行 i2cset -f -y 0 0x33 0x42 0x41 不影响打印 执行 i2cget -f -y 0 0x33 0x41 后打印停止了是什么原因
打印停止前
iicget打印停止

一秒落纱 发表于 2024-6-19 10:56 | 显示全部楼层
在MCU(微控制器单元)作为I2C从设备的情况下,如果主函数内的循环打印在收到"i2c get"命令时停止了,可能是I2C通信通常是通过中断来处理的。当MCU作为从设备接收到I2C数据时,可能会触发一个中断。如果中断服务例程(ISR)没有正确地保存和恢复上下文,或者在ISR中消耗了太多时间,可能会导致主循环的执行被暂停。
夜阑风雨 发表于 2024-6-19 13:00 | 显示全部楼层
如果I2C通信和主循环打印操作共享了某些资源(如内存、外设等),可能会发生资源竞争。例如,如果I2C通信正在访问一个共享的缓冲区,而主循环也在尝试访问该缓冲区,可能会导致主循环被阻塞。
远山寻你 发表于 2024-6-19 15:00 | 显示全部楼层
在MCU的程序中,可能存在一个状态机来处理I2C通信。如果状态机逻辑设计不当,可能会在接收到"i2c get"命令后进入一个状态,导致主循环的执行被暂停。
光辉梦境 发表于 2024-6-19 19:00 | 显示全部楼层
如果MCU支持多任务或多线程,可能存在优先级设置问题。如果I2C中断或任务的优先级高于主循环,那么在I2C通信期间,主循环可能会被抢占。
三生万物 发表于 2024-6-19 21:00 | 显示全部楼层
可能是软件编程错误,比如在处理I2C数据时出现了死循环、内存溢出或其他逻辑错误,导致程序无法继续执行主循环。
淡漠安然 发表于 2024-6-19 23:00 | 显示全部楼层
虽然不太常见,但也有可能是硬件问题,比如I2C总线上的电气问题导致MCU在接收到数据时进入了一个异常状态。
暖了夏天蓝了海 发表于 2024-6-20 02:00 | 显示全部楼层
确保ISR正确地保存和恢复了上下文,并且不会阻塞太长时间。
江河千里 发表于 2024-6-20 04:00 | 显示全部楼层
检查资源访问:确保没有资源竞争,所有共享资源都有适当的同步机制。
别乱了阵脚 发表于 2024-6-20 11:00 | 显示全部楼层
检查状态机的设计,确保在接收到I2C命令后,程序能够正确地继续执行。
冰春彩落下 发表于 2024-6-20 13:00 | 显示全部楼层
如果MCU支持多任务,检查任务和中断的优先级设置。
小小蚂蚁举千斤 发表于 2024-6-23 17:35 | 显示全部楼层
可能是I2C通信通常是通过中断来处理的
duo点 发表于 2024-6-24 10:41 | 显示全部楼层
检查I2C中断处理逻辑
两只袜子 发表于 2024-6-24 12:00 | 显示全部楼层
调整中断优先级
jcky001 发表于 2024-6-24 15:00 | 显示全部楼层
使用调试器或逻辑分析仪来监视I2C通信和MCU的行为,以便更好地理解问题所在。
cr315 发表于 2024-6-24 15:00 | 显示全部楼层
检查代码逻辑
AdaMaYun 发表于 2024-6-24 22:26 | 显示全部楼层
I2C通信通常是通过中断来处理的
喂什么玩意 发表于 2024-6-30 14:45 | 显示全部楼层
确保从设备正确实现了I2C协议的读取操作。需要检查从设备的代码,确认它能够正确地响应读取请求并发送数据。
wang6623 发表于 2024-6-30 15:07 | 显示全部楼层
可能存在数据传输错误或冲突,导致主设备无法收到正确的响应或从设备无法发送正确的数据。
wang6623 发表于 2024-6-30 15:07 | 显示全部楼层
检查硬件连接和电路设计,确保I2C总线上的信号完整性和稳定性。特别是检查SDA(数据线)和SCL(时钟线)上的信号质量,避免电气问题导致通信失败。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

486

主题

3268

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部