jiayue12450 发表于 2022-3-2 11:42:58

用IO模拟11个I2C接口如何不被阻塞呢?

最近有个项目,用一片STM芯片,模拟了11个I2C接口,每个接口上都挂了8个I2C从设备,做温度、IO扩展,一共88个设备。
单片机和PC之间用串口进行通信,PC发串口命令从单片机获取这些数据。
我的问题是:I2C用IO口来模拟,实现I2C总线的时候中间用了很多延时函数,延时函数是FOR循环实现的,会阻塞在这里。这样如果实现11路I2C ,MCU大部分是都耗在延时函数了,我担心串口响应会不及时,有没有什么方法不用延时函数实现这么多个口子的I2C呢?

wye11083 发表于 2022-3-2 12:00:14

自己实现个简易的多线程栈,实现锁,然后开12个线程同时跑。。

gsq19920418 发表于 2022-3-2 12:15:14

看I2C速度了,要求不高,就弄个RTOS呗

icoyool 发表于 2022-3-2 12:48:17

没有那么复杂, delay就改为return code; 下次再从这个code的位置开始判断; 接着处理下一个;几乎没有什么难度; 长延时才需要这么搞, us级的延时就等等吧

monkeynav 发表于 2022-3-2 12:53:26

很简单的,串口协议在中断里面处理。延时用定时器实现,一次读一路i2c就行,别全部一起来。

2nd 发表于 2022-3-2 13:38:29

用硬件外设降低代码参与,基于你目前的方案,考虑串口收发都使用DMA驱动

mPiDDR 发表于 2022-3-2 16:38:55

直接同时驱动,时间到了,同时操作所有的IO,

初音之恋 发表于 2022-3-2 16:48:35

switch case 或者 rtos
页: [1]
查看完整版本: 用IO模拟11个I2C接口如何不被阻塞呢?