Microchip
直播中

朱利华

7年用户 167经验值
私信 关注
[问答]

主机如何在不中断的情况下判断I2C从机是否繁忙

因此,我有一个设备设置为I2C主机,其余的设备上的总线设置为奴隶。主设备向每个从设备发送命令,从设备执行此任务(运行电机、PID、重要时间敏感代码)。我想知道奴隶何时完成了它的任务。我唯一能看到的方法是不断地让主轮询从机,但是这会产生一个问题,因为每次主轮询从机时,都会触发从机上的i2c中断,并且短时间内停止运行电机代码。有什么办法可以解决这个问题吗?我在考虑将所有设备设置为主设备,所以当每个设备完成任务时,它可以发送数据,而不需要轮询。问题在于,我担心总线上的数据与试图同时通信的设备发生冲突。解决这个问题的正确方法是什么?也许问题不像我想象的那么严重,而且执行PID控制的电机代码可能需要时间来中断,并回复给主机,而不会产生很多问题?这似乎是一个标准场景,其中许多不同的设备运行任务,并在完成任务后返回报告,这通常如何解决?

回帖(14)

陈瑞微

2019-10-15 11:39:55
有单独的PIN信号吗?
举报

张娜

2019-10-15 11:45:05
HMM,一个中断驱动的从属代码不应该中断电机处理,或者不超过一些USEC……否则,是的,您可以使用另一个PIN来“请求注意”。事实上,我确实使用了数据本身——通常只有主机可以驱动数据低:所以,当奴隶请求注意时,它会为一些人拉低数据,然后主人会轮询它。我只有一个奴隶在公共汽车上请求注意…
举报

李勇

2019-10-15 11:54:13
哎哟,我忘了提及我正在使用的硬件已经构建好了,并且我没有能力连接到从机上的任何引脚。所以,为忙信号添加一个新的PIN对我来说是不可能的。所以,正如我前面提到的,不幸的是,我不能使用额外的PIN。所以你认为仅仅让从机用一个中断来回复主机,并不能使从机延迟足够的时间,从而搞砸一些简单的PID电机控制?
举报

丁亚念

2019-10-15 12:29:27
…或者做I2C EEPROM做的事情。让奴隶在忙碌的时候忽略I2C总线,所以主机的任何访问都会得到NACK。
举报

更多回帖

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