主题 : 请教linux对i2c的仲裁机制 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 26478
精华: 0
发帖: 17
金钱: 85 两
威望: 17 点
综合积分: 34 分
注册时间: 2010-08-09
最后登录: 2017-09-13
楼主  发表于: 2012-07-24 16:56

 请教linux对i2c的仲裁机制

如果同一个i2c总线上挂载了几个设备,两个应用程序同时对总线上两个不同设备进行操作的话,linux是怎么样处理的?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2012-07-24 22:40
基本上Linux是用临界段互斥的方法来处理对同一I2C总线的访问的,比如i2c_transfer()里的代码

复制代码
  1. 1348        if (adap->algo->master_xfer) {
  2. ...
  3. 1358                if (in_atomic() || irqs_disabled()) {
  4. 1359                        ret = i2c_trylock_adapter(adap);
  5. 1360                        if (!ret)
  6. 1361                                /* I2C activity is ongoing. */
  7. 1362                                return -EAGAIN;
  8. 1363                } else {
  9. 1364                        i2c_lock_adapter(adap);
  10. 1365                }
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 26478
精华: 0
发帖: 17
金钱: 85 两
威望: 17 点
综合积分: 34 分
注册时间: 2010-08-09
最后登录: 2017-09-13
2楼  发表于: 2012-07-25 10:17
哦,明白了,非常感谢