原文网址:http://blog.csdn.net/cmm20071020/article/details/7179958

把一个i2c驱动从2.6.21升级到2.6.39

上网查到一篇帖子,讲了驱动分为i2c总线,i2c设备,总线驱动做实际的总线读写操作,设备驱动实现针对不同设备操作。先找一篇帖子看看整体架构,再看代码,理解效果不错,这招是跟老猫学的。

又查到一篇帖子,讲了从老版本i2c驱动,升级到新版本,需要做哪些变更,是翻译的内核文档。

照做,但是i2c设备驱动的probe函数调不起来,这个根据我的经验要加个device,但是i2c的device不知道怎么加。翻了翻i2c总线的代码,后来还是同事发现没有调用i2c_register_board_info。之前的老版本驱动就有这个i2c_register_board_info调用,在arch/arm里面一个跟board相关的文件里,我光注意driver目录下的内容,给漏掉了。

普通的设备,调用platform_add_devices添加设备 vs i2c总线上的设备,调用i2c_register_board_info添加设备,添加到了一个i2c单独的设备list结构里

添加驱动的函数与platform_add_devices也不一样,添加驱动后,就遍历设备列表,看哪个匹配

调试i2c驱动

芯片pt2314,设备手册上说明i2c地址是88,代码里地址写的是44。insmod驱动模块,写总线返回-6。用的是s3c2416平台。

i2c通信原理:

SCL时钟线,SDA数据线。空闲时,两条线都为高。

SCL高电平时,SDA变低,表示开始条件,相对的还有停止条件。

开始条件后,先发地址,再发数据,地址和数据都是一个字节一个字节的。

每个字节数据都要有应答,地址有ACK,数据也有ACK。

先发MSB,例如发送地址的话,先发送读写位,再发送7位地址,7位地址是一字节数据的低7位,最高位是读写位。例如pt2314的地址88(10001000),前面的1000100是地址,最后一位0是读写位。

仲裁过程是在开始条件和发送地址时监视SDA有没有冲突。SDA输出高电平时,读回来是低电平,说明总线上有冲突。

示波器测量

需要同时测试SCL,SDA。把示波器两个channel打开,分别调整电压和时间,上下位置分开便于观察。设置为下降沿触发,因为SCL,SDA平时为高,所以表笔点上引脚时会有一个上升沿,没必要触发。有人搭把手,帮忙按示波器的run,设成啥触发都行。表笔接地,接SCL,SDA,然后insmod驱动模块,发起i2c总线的操作。抓到信号,线上信号是88,但是没有得到ACK,因此i2c的adpter驱动返回-6错误。

i2c-tools

后来用i2c-tools中的i2cdetect,发现一开始没有设备,insmod驱动模块报错之后,再i2cdetect,就发现设备了,原来是pt2314供电之后,需要一个延时,才能正常工作。

关于i2c地址

本次调试中,芯片手册上的地址与i2c bus上测量的一致,为88,高7位1000100是地址,最低位0是读写位;而linux驱动代码中的地址44,是不包含读写位的i2c地址,且7位地址存储在一字节数据中的低7位,所以看起来跟芯片手册上不一致,在adpter驱动中使用这个地址时,会左移1位,再加上读写位。

【转】 i2c驱动调试经验的更多相关文章

  1. (转)CMOS Sensor的调试经验分享

    CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一些调试经验. 首先,要认识CMOS摄像头的结构.我们通常拿到的是集成封装好的模组,一般由三个部分组成:镜头.感应器和图像信号处 ...

  2. Smart210学习记录-----Linux i2c驱动

    一:Linux i2c子系统简介: 1.Linux 的 I2C 体系结构分为 3 个组成部分: (1) I2C 核心. I2C 核心提供了 I2C 总线驱动和设备驱动的注册.注销方法,I2C 通信方法 ...

  3. CMOS Sensor的调试经验分享

    转自:http://bbs.52rd.com/forum.php?mod=viewthread&tid=276351 CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一 ...

  4. 【转】android 电容屏(三):驱动调试之驱动程序分析篇

    关键词:android  电容屏 tp 工作队列 中断 坐点计算  电容屏主要参数平台信息:内核:linux2.6/linux3.0系统:android/android4.0  平台:S5PV310( ...

  5. CMOS Sensor的调试经验分享【转】

    转自:https://blog.csdn.net/yapingmcu/article/details/37817727 转自:http://bbs.52rd.com/forum.php?mod=vie ...

  6. 《linux设备驱动开发详解》笔记——15 linux i2c驱动

    结合实际代码和书中描述,可能跟书上有一定出入.本文后续芯片相关代码参考ZYNQ. 15.1 总体结构 如下图,i2c驱动分为如下几个重要模块 核心层core,完成i2c总线.设备.驱动模型,对用户提供 ...

  7. linux驱动基础系列--Linux I2c驱动分析

    前言 主要是想对Linux I2c驱动框架有一个整体的把控,因此会忽略协议上的某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型.sysfs等也不进行详细说明原理,涉及到i2c协议部分也只 ...

  8. 17调试经验之串口读写flash协议

    一是设计功能 我的理解协议就是一个命令包,通过给出不同的控制命令,来调动不同的功能模块,实现不同的功能,如读数据,写数据,擦除等. 二设计过程 先看了尤老师的视频,主要讲了大致设计原理和总体框架,当然 ...

  9. 【直播回顾】OpenHarmony知识赋能第四期第三课——I2C驱动开发

    3月24日晚上19点,​知识赋能第四期直播的第三节课<OpenHarmony标准系统HDF框架之I2C驱动开发>​,在OpenHarmony开发者成长计划社群内成功举办. 本期课程,由​拓 ...

随机推荐

  1. python手记(39)

    #!/usr/bin/env python #-*- coding: utf-8 -*- #code:myhaspl@qq.com import cv2 import numpy as np fn=& ...

  2. ashx实现文件下载以及文件MD5码测试

    cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System ...

  3. Arcgis API for Android之GPS定位

    欢迎大家增加Arcgis API for Android的QQ交流群:337469080 先说说写这篇文章的原因吧,在群内讨论的过程中,有人提到了定位的问题,刚好,自己曾经在做相关工作的时候做过相关的 ...

  4. SuperSocket学习笔记(二)

    上一篇博客SuperSocket学习笔记(一)说明了怎么快速搭建一个服务器端,这篇文章我想深挖一下SuperSocket 1. 每一个客户端连接到服务器端时,服务器端会将客户端的信息保存到一个Sess ...

  5. IOS中对于一些控件的抖动效果

    这两天在网上看到一个帖子讨论关于有些app 输入账密时候 错误的话会有抖动效果出现,然后自己琢磨了下如何实现,下面上代码!!! 首先 写一个UIView的分类 #import <UIKit/UI ...

  6. IIS报500.0错误

    IIS安全里面配置:Everyone.IUSR.IIS_IUSRS 参考地址:http://blog.chinaunix.net/uid-21375345-id-3213631.html

  7. DTO学习系列之AutoMapper(五)----当EntityFramework爱上AutoMapper

    有时候相识即是一种缘分,相爱也不需要太多的理由,一个眼神足矣,当EntityFramework遇上AutoMapper,就是如此,恋爱虽易,相处不易. 在DDD(领域驱动设计)中,使用AutoMapp ...

  8. hdu find the safest road

    算法:多源最短路(floyd) 题意:每条通路有一个安全系数,求始点到终点的最大的安全系数并输出,如果没有输出What a pity! c++超时啊 Problem Description XX星球有 ...

  9. mysql grant all privileges on

    遇到了 SQLException: access denied for @'localhost' (using password: no) 解决办法 grant all privileges on * ...

  10. Js与flash交互:在html页面中用js与MyReport插件交互

    Html页面与flash的加载 如下图,flash是html页面的一个插件节点. js与flash进行交互,首先要处理好html页面和swf的加载问题. Swf调用外部js方法,要确保js方法已存在, ...