nettui 发表于 2013-6-20 15:21:31

TQ210 Linux下AT24L02的IIC驱动问题

我在TQ210下写的IIC驱动,结果老是time out ,这可能是什么原因呢?请高手指教!
<7>i2c i2c-2: master_xfer W, addr=0x50, len=2
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<7>i2c i2c-2: master_xfer W, addr=0x50, len=2
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<7>i2c i2c-2: master_xfer W, addr=0x50, len=2
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<7>i2c i2c-2: master_xfer W, addr=0x50, len=2
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<7>i2c i2c-2: master_xfer W, addr=0x50, len=2
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<7>i2c i2c-2: master_xfer W, addr=0x50, len=2
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<7>i2c i2c-2: master_xfer W, addr=0x50, len=2
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<7>i2c i2c-2: master_xfer W, addr=0x50, len=2
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<7>i2c i2c-2: master_xfer W, addr=0x50, len=2
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<7>i2c i2c-2: master_xfer W, addr=0x50, len=2
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<7>i2c i2c-2: master_xfer W, addr=0x50, len=2
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<7>i2c i2c-2: master_xfer W, addr=0x50, len=2
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<4>here is the i2c_transfer
<7>i2c i2c-2: master_xfer W, addr=0x50, len=1
<7>i2c i2c-2: master_xfer R, addr=0x50, len=1
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<4>the i2c_transfer return 0
<4>here is the i2c_transfer
<7>i2c i2c-2: master_xfer W, addr=0x50, len=1
<7>i2c i2c-2: master_xfer R, addr=0x50, len=1
<7>s3c-i2c s3c2440-i2c.2: START: 000000d0 to IICSTAT, a0 to DS
<7>s3c-i2c s3c2440-i2c.2: iiccon, 000000aa
<7>s3c-i2c s3c2440-i2c.2: timeout
<4>the i2c_transfer return 0

nettui 发表于 2013-6-20 19:05:36

好像是s3c24xx_i2c_irq函数没有执行,造成的超时,也就是中断没有触发,中断一般发生在IICDS寄存器写入完成,以及发送完成时,为什么没有触发呢?难道是因为板文件中没有添加平台数据。请版主帮忙解决下,谢谢!

nettui 发表于 2013-6-20 19:33:10

        stat |= S3C2410_IICSTAT_START;
        writel(stat, i2c->regs + S3C2410_IICSTAT);   内核此处将IICSTAT寄存器第5位置1,则数据被自动发送出去,触发中断。但是为什么超时呢?

亚瑟王 发表于 2013-6-21 09:15:30

nettui 发表于 2013-6-20 19:33 static/image/common/back.gif
stat |= S3C2410_IICSTAT_START;
        writel(stat, i2c->regs + S3C2410_IICSTAT);   内核此处将IICSTAT寄存 ...

内核已经包含了IIC驱动了,不需要额外编写啊。
超时一般是IIC初始化有问题,
1、可能是24C02匹配的上拉电阻的阻值(因为我们的IIC总线上挂载了多个IIC的设备,都操作正常,这个基本上可以排除)。
2、可能是软件初始化有问题。

nettui 发表于 2013-6-21 11:07:06

亚瑟王 发表于 2013-6-21 09:15 static/image/common/back.gif
内核已经包含了IIC驱动了,不需要额外编写啊。
超时一般是IIC初始化有问题,
1、可能是24C02匹配的上拉 ...

IIC总线驱动是/driver/i2c/buses/i2c-s3c2410.c,at24l02的设备驱动程序是不是没有提供啊?所以我才想编写下AT24L02的设备驱动程序啊

亚瑟王 发表于 2013-6-21 15:04:57

nettui 发表于 2013-6-21 11:07 static/image/common/back.gif
IIC总线驱动是/driver/i2c/buses/i2c-s3c2410.c,at24l02的设备驱动程序是不是没有提供啊?所以我才想编 ...

24C02使用的是IIC驱动,用应用程序来实现读写的。天嵌科技提供有参考的例子程序的。本论坛可以下载的。
页: [1]
查看完整版本: TQ210 Linux下AT24L02的IIC驱动问题