完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 xble 于 2016-2-26 11:41 编辑
上一个帖子使用i2cdetect测试开发板的i2c出现下面的错误,其实手里其他板子也有类似问题,那时以为是nxp公司i2c器件的特性,现在看来是linux kernel版本有了变化,而i2c-tools没有跟进更新。i2cdetect -y -r 0 0 1 2 3 [ 206.572471] owl_i2c: owl_i2c_fifo_irq(): [i2c0] no ACK, fifostat 0x3 [ 206.572471] 4 5 6 7 8 [ 206.581801] owl_i2c: owl_i2c_fifo_irq(): [i2c0] no ACK, fifostat 0x3 [ 206.581801] 9 a b c d e[ 206.590939] owl_i2c: owl_i2c_fifo_irq(): [i2c0] no ACK, fifostat 0x3 [ 206.590939] 跟进上面的log找到出错的地方:i2c-owl.c文件的owl_i2c_fifo_irq函数。仔细研究代码,fifostat被设置的缘故,怎么处理这个问题呢? 首先自己不想随意修改i2c-dev.h之类的标准文件,如果可以修改这些标准文件个,ioctl函数可以传递任意命令和参数,应该很容易解决问题。 应用层自己使用i2c_smbus_read_byte_data函数替换i2c_smbus_read_byte函数,可以为前者command参数为0xe。然后i2c-dev.c 文件中判断这个数值,调用set_i2ctools_i2c_flag函数,他实现在i2c-owl.c文件中EXPORT_SYMBOL(set_i2ctools_i2c_flag);,进而修改can_use_fifo_trans函数返回值,根据输出log稍微修改一下,即可到达我们的需求。 执行i2cdetect命令,结果正常: root@Lemuntu:~# i2cdetect -y -r 2 =0=call ioctl filename=/dev/i2c-2: 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- root@Lemuntu:~# i2cdetect -y -r 0=0=call ioctl filename=/dev/i2c-0: 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- root@Lemuntu:~# i2cdetect -y -r 1 =0=call ioctl filename=/dev/i2c-1: 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 当然这里只是简单的应用一下i2c接口,没有真正分析i2c核心层的具体实现,下面有机会在详细分析一下i2c的实现细节。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 00:51 , Processed in 0.400721 second(s), Total 41, Slave 31 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号