Chinaunix

标题: 大侠,帮忙啊,我的IIC驱动有问题啊 [打印本页]

作者: ipx    时间: 2008-03-25 17:17
标题: 大侠,帮忙啊,我的IIC驱动有问题啊
我用的是2.6.12内核,在s3c2440开发板上写eeprom的驱动,可是调试的时候发现,drivers/i2c/busses/i2c-s3c2410.c的总线驱动有问题,在s3c24xx_i2c_xfer()函数里面和其调用的函数里面都无法访问IICCON、IICSTAT等寄存器,读到的内容为0 ,如果写入一个数再读出还是0 , 我看了下寄存器的映射地址,发现和ioremap()时是一样的,说明读写寄存器的虚拟地址是对的,但是我就是无法访问,不知道哪位大侠知道是什么问题?

顺便说一下该文件的代码我没有改动任何地方。

真心求教,在线等
作者: ipx    时间: 2008-03-26 09:02
怎么没人回复呢,再加上点说明:
电路板肯定是正常的,我在bootloader里面做过eeprom的读写,完全正常,而且,我在drivers/i2c/busses/i2c-s3c2410.c里面的s3c24xx_i2c_probe()函数做过直接读取eeprom的操作,即在return之前添加了如下内容:

{
  struct i2c_msg msg;
  char * tmp;
  int i;

  tmp=kmalloc(256,GFP_KERNEL);
  msg.addr = 0x50 ;
  msg.flags = I2C_M_RD;
  msg.len = 256;
  msg.buf = tmp;
  s3c24xx_i2c_xfer(&i2c->adap, &msg, 1);   
  for(i=0;i<256;i++)
    printk("%02x ",tmp);
   printk("\n");  
  kfree(tmp);
}

并将内容打印了出来,发现读取到的是正确的,现在主要问题就是s3c24xx_i2c_probe()可以完成对寄存器的配置,可是当有数据需要传输的时候,在s3c24xx_i2c_xfer()函数里面就无法访问到全部寄存器了,读取和写入都不行,虚拟地址传进来的也正确,我也试过在该函数里面完成寄存器的初始化,即ioremap等都拿到这个函数里面做,可还是无法正确访问该寄存器,无论写入什么,读到的都是0。

弱问一句,在内核里面由用户态调用的程序有什么访问权限的限制吗?比如寄存器的访问,或者内核可以设定部分核心内存资源受保护吗?显然s3c24xx_i2c_xfer()是有用户态程序调用的,而s3c24xx_i2c_probe()是由内核自己调用的,我觉得就这么点区别了,真是奇怪啊
作者: larryliang.chen    时间: 2008-09-25 16:37
LZ大哥,问题解决了吗?
我也想做eeprom的驱动,想请教一些资料啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2