linux下I2C驱动发送IO时序,Linux I2C 驱动阅读的碰到的一些网上没有提到的东西

# re: Linux I2C 驱动阅读的碰到的一些网上没有提到的东西  回复  更多评论

2009-04-11 13:39 by 初学都

楼主,你好。我看了你那篇《Linux I2C核心、总线与设备驱动[转]》,让我明白了不少,不过我还是有些不明白的地方,想请教一下。

我挂的I2C设备是只可以写的,不能读,所以只有一个写从机地址,可是当我调用内核的I2C驱动时发现,写操作执行后,在示波器上看到,在开始信号之后,它先发送完从机地址并接收到应答信号,可之后立即出现了一个停止信号(我后面还有数据要发的呀),然后又开始发送从机地址,并在收到应答后又出现一个停止位,如此反复;

在我下面的程序运行时,只在示波器上抓到四组这样“开始—从机地址—应答—停止”的信号,却没有看到我接下来要发数据,同时还打印出“Remote I/O error”的错误,我先把我的程序贴一下,希望能得到你的指点,谢谢

#define I2C_TENBIT 0x704

#define I2C_SLAVE 0x703

#define CHIP_ADDR 0x30 >> 1 // 7 bits for fm31256 address

#define IO_DEV "/dev/i2c-0"

main(int argc, char *argv[])

{

unsigned char REG_WRITE=0X30; /*写地址*/

unsigned char data=0xf4;

int ret;

ret=0;

if ((fd = open(IO_DEV, O_RDWR)) < 0)

perror("open i2c_adpter error");

else //设置I2C访问模式

{

if(ioctl(fd,I2C_TENBIT,0))

perror("set i2c 7bits address mode error");

if(ioctl(fd,I2C_SLAVE,CHIP_ADDR))

perror("set device address error");

}

if((ret = write (fd, REG_WRITE, 1))!= 1)//发从机地址

{

perror("set address error"); //这里打印Remote I/O error

}

else

{

if (write (fd, &data, 1))!= 1)//发送数据,但在示波器上没有 看到date的值

perror("write date error"); //这里打印Remote I/O error

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值