免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2893 | 回复: 2
打印 上一主题 下一主题

大侠,帮忙啊,我的IIC驱动有问题啊 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-25 17:17 |只看该作者 |倒序浏览
我用的是2.6.12内核,在s3c2440开发板上写eeprom的驱动,可是调试的时候发现,drivers/i2c/busses/i2c-s3c2410.c的总线驱动有问题,在s3c24xx_i2c_xfer()函数里面和其调用的函数里面都无法访问IICCON、IICSTAT等寄存器,读到的内容为0 ,如果写入一个数再读出还是0 , 我看了下寄存器的映射地址,发现和ioremap()时是一样的,说明读写寄存器的虚拟地址是对的,但是我就是无法访问,不知道哪位大侠知道是什么问题?

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

真心求教,在线等

论坛徽章:
0
2 [报告]
发表于 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()是由内核自己调用的,我觉得就这么点区别了,真是奇怪啊

论坛徽章:
0
3 [报告]
发表于 2008-09-25 16:37 |只看该作者
LZ大哥,问题解决了吗?
我也想做eeprom的驱动,想请教一些资料啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP