免费注册 查看新帖 |

Chinaunix

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

LINUX下i2c驱动的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-09-02 08:34 |只看该作者 |倒序浏览
大侠们有谁写过i2c驱动的?
      最近在给一个时钟芯片(pcf8593)写驱动程序,是用i2c通信的。我能用驱动控制i2c总线把信号写到时钟芯片的引脚处,但是时钟芯片就是没有应答。
      芯片i2c地址和i2c bus speed的参数已经试过无数个了,都不行啊。
      问题还有可能处在哪呢?大侠们指点迷津阿~~~~
           

论坛徽章:
0
2 [报告]
发表于 2005-09-02 08:35 |只看该作者

LINUX下i2c驱动的问题。

。。。。。。

论坛徽章:
0
3 [报告]
发表于 2005-09-02 09:18 |只看该作者

LINUX下i2c驱动的问题。

原帖由 "sealdad" 发表:
大侠们有谁写过i2c驱动的?
      最近在给一个时钟芯片(pcf8593)写驱动程序,是用i2c通信的。我能用驱动控制i2c总线把信号写到时钟芯片的引脚处,但是时钟芯片就是没有应答。
      芯片i2c地址和i2c bus speed?.........

最好把你的源程序帖出来看一下

论坛徽章:
0
4 [报告]
发表于 2005-09-02 10:57 |只看该作者

LINUX下i2c驱动的问题。

程序使用GPIO引脚模拟i2c:
主机等待从机应答的代码如下:
  1. int
  2. i2c_getack(void)
  3. {
  4.         int ack = 1;
  5.         /*
  6.          * enable output
  7.          */
  8.         i2c_dir_out();
  9.         /*
  10.          * Release data bus by setting
  11.          * data high
  12.          */
  13.         i2c_data(I2C_DATA_HIGH);
  14.         /*
  15.          * enable input
  16.          */
  17.         i2c_dir_in();
  18.         i2c_delay(CLOCK_HIGH_TIME/4);
  19.         /*
  20.          * generate ACK clock pulse
  21.          */
  22.         i2c_clk(I2C_CLOCK_HIGH);
  23.         /*
  24.          * Use PORT PB instead of I2C
  25.          * for input. (I2C not working)
  26.          */
  27.         i2c_clk(1);
  28.         i2c_data(1);
  29.         /*
  30.          * switch off I2C
  31.          */
  32.         i2c_data(1);
  33.         i2c_disable();
  34.         i2c_dir_in();
  35.         /*
  36.          * now wait for ack
  37.          */
  38.         i2c_delay(CLOCK_HIGH_TIME/2);
  39.         /*
  40.          * check for ack
  41.          */
  42.         if(i2c_getbit())
  43.                 ack = 0;
  44.         i2c_delay(CLOCK_HIGH_TIME/2);
  45.         if(!ack){
  46.                 if(!i2c_getbit()) /* receiver pulld SDA low */
  47.                         ack = 1;
  48.                 i2c_delay(CLOCK_HIGH_TIME/2);
  49.         }

  50.                i2c_data(I2C_DATA_LOW);
  51.    
  52.         /*
  53.          * end clock pulse
  54.          */
  55.         i2c_enable();
  56.         i2c_dir_out();
  57.         i2c_clk(I2C_CLOCK_LOW);
  58.         i2c_delay(CLOCK_HIGH_TIME/4);
  59.         /*
  60.          * enable output
  61.          */
  62.         i2c_dir_out();
  63.         /*
  64.          * remove ACK clock pulse
  65.          */
  66.         i2c_data(I2C_DATA_HIGH);
  67.         i2c_delay(CLOCK_LOW_TIME/2);
  68.         return ack;
  69. }
  70. 是不是i2c的时序有些问题呀?[/b][/i]
复制代码

论坛徽章:
0
5 [报告]
发表于 2005-09-02 14:15 |只看该作者

LINUX下i2c驱动的问题。

看楼主的代码真累,其实i2c只有确认信号,没有什么应答信号,比如当主机发送完地址信号以后把数据线置为高,然后把时钟线设为高,并且等待,如果此时从机把数据线拉低(变为0),那么就表示从机已经收到,并且已经确认
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP