易截截图软件、单文件、免安装、纯绿色、仅160KB

关于LINUX的 I2C,高手速度进!

问题依旧。。以为自己解决了
为什么ioctl(fd,I2C_SLAVE,0x50) 正确,这个是EEPROM
而ioctl(fd,I2C_SLAVE,0xea) 则提示INVALID ARGUMENT? 这个是I/O扩展器件
可以肯定的是,硬件没问题的,因为别的CPU不用linux可以控制这两个器件
估计是地址不对,你应该给的是高6位的地址,然后加读写位,
比如: 0x50其实对应的是0xA0,
估计你应该送0x75(0xEA>>1);

内核里关于I2C的ioctl有这么一段:
switch(cmd){
case I2C_SLAVE:
case I2C_SLAVE_FORCE:
    if((arg>0x3ff)||
    (((client->flags&I2C_M_TEN)==0)&&arg>0x7f)
    return -EINVAL;
.....

其中arg就是ioctl传递的器件地址,我设置0x7f之前都是可以的,但是0x7f之后的地址都会出现-EINVAL的错误,0x7f是一个什么值?  为什么设定的是这个值??

那就对了,因为这里给的是高7位,CPU会自动在最后一位加上R/W位,这个是和CPU架构相关的。
比如说如果是slave地址是0xA0,那么你只需要给0x50(0xA0>>1),
CPU或者可能驱动会做这样的处理: (0x50 < < 1) | R/W,这就是最终的地址。



这里还与扩展的十位地址和7位地址有关的,7位地址最大只能到0x7f。楼主这里应该是7位地址模式。

恩,楼上的说的没错,不过我送0x75地址,读写的时候出现
at91_i2c: timeout 3

而write函数却返回success

这是啥原因?

那你就看看代码,看这个timeout是什么原因导致的。



看了下,TIMEOUT是由于从器件没有应答,用示波器看了下,确实是这样。


相关问答:

使用C的高手请进

大家好!我是一位C爱好者,向大家请教下,C程序员可好找工作?公司用C干些什么?
无所谓好不好找工作,一般通信、系统、嵌入式、硬件方面用的多,而且由于C的底层特性,学会后在学其他的会比较容易

不管用什么语 ......

c中的转义字符问题

    '\108'作为字符常量对不对?
转义字符'\ddd'表示3位8进制所代表的字符。 但是108不是正确的8进制表示方法,因此应该是错误的。
但是char a='\108'; 为什么编译不出错呢?
\108 没超过 ......

如何查找系统未安装补丁C - C/C++ / 新手乐园

请问各位高手如何用C/C++获得系统未安装补丁
好像很专业的东西。。。

查注册表
每个补丁如果安装了都会在注册表里面登记

请问能不能更清晰些,我想用c\c++查出来,不好意思,我是新手。还望指教。谢

分值 ......

C盘上多出2G内容

C盘上多的文件名为:dosh , Recycled ,System Volum information, AUTOEXEC.BAT, BOOT.INT , bootfoot.bin, CONFIG.SYS,IO.SYS, MSDOS.SYS, DETECT.COM ,ntldr, pagefile.sys;
而且每个盘上都有这些文件:RECYCLER ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号