原文网址: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位,再加上读写位。

转载于:https://www.cnblogs.com/wi100sh/p/4546336.html

【转】 i2c驱动调试经验相关推荐

  1. 外设驱动调试经验汇总--每天加一点

    目录 1.背景 2.以太网调试 (1)裕太YT8512 (2)YT8521 3.EC20芯片 4.仁珏lora模块 5.研恳的蓝牙模块 背景介绍: 基本原理: 调试思路: 6.大普 RTC-ins56 ...

  2. linux I2C驱动调试日志

    /********************************************************************* * Author : lile * Modified : ...

  3. LCD/HDMI OUT调试经验(1)------驱动软件架构

    因为调试的平台是高通,所以只介绍关于高通平台的软件架构,以下总结基于我的调试经验,与专业总结会有差距. 一.高通平台驱动文件架构 上图为目前我所接触到最多的文件架构,高通平台的代码有很多,作为初级bs ...

  4. KEIL 调试经验总结

    来源:公众号[鱼鹰谈单片机] 作者:鱼鹰Osprey ID   :emOsprey 通过前面的多篇文章(已整理成专辑)我们已经了解了很多的 KEIL 调试方法,但是到底该怎么使用这些方法呢?这篇文章将 ...

  5. Camera驱动调试常见问题

    在嵌入式系统,如手机等平台上使用的Camera sensor通常是由类似I2C这样的总线进行寄存器控制,由CPU端的Controller提供所需的驱动时序,通常支持YUV和RGB等数据格式.有的Sen ...

  6. 初级驱动调试笔记-总结

    文章目录 一.拿到开发板的第一步 二.调试第一步 三.Makefile说明 3.1 内核版本说明 3.2 Makefile文件 3.3 Makefile 与Kconfig的关系 3.4 defconf ...

  7. linux i2c调试命令,嵌入式Linux下I2C接口调试

    By Toradex秦海 1).简介 I2C是嵌入式设备最为常用的接口之一,常用于如下面这些应用场景,因此本文就基于嵌入式Linux演示在User Space进行I2C设备调试. - Digital ...

  8. 请wince驱动调试助手的作者sunrain_hjb以及wince开发者进来看看

    作者:gooogleman(www.gooogleman.com站长) 时间:2011-05-09 09:43:54 嘿嘿,也有一阵子没有来这里了,即使来了也瞄一眼就走了,时间改变了太多事情了.    ...

  9. 分享在实际项目中积累的硬件调试经验 - 调试方法,以及常见调试案例

    文章目录 一.硬件调试的四个目标 二.硬件调试心得 三.一块新的板子的调试思路 四.硬件调试,一些网络资料 五.单片机硬件调试中常见的案例(杂记) 往期系列文章: 1.裸机项目开发经验分享 - 完整开 ...

最新文章

  1. var java_var 是 Java 开发的好朋友啊!
  2. 「MTA」的「錯誤訊息代碼」
  3. RHEL6基础四十九之RHEL文件(夹)权限进阶篇
  4. Swift之深入解析如何在Swift中实现状态机
  5. 哪里可以培训计算机运维,临武县运维工程师培训班_郴州科泰计算机学校
  6. python 之 __new__ 方法理解
  7. HTML+CSS+JavaScript仿京东购物商城网站 web前端制作服装购物商城 html电商购物网站...
  8. ESP8266固件SDK开发初体验-让ESP8266打印helloworld(基于安信可ESP-07)
  9. How far away ? HDU - 2586 trajan算法lca
  10. 【张朝阳的物理课笔记】9. 瑞丽金斯公式的推导(下),普朗克修正,黑体辐射公式
  11. “已取消到该网页的导航” chm文件无法显示错误 解决方法
  12. 软件测试需要学什么?全网最全软件测试必备7大技能详解,摇身一变资深测试
  13. leetcode——第860题——柠檬水找零
  14. k8s之滚动更新、金丝雀发布、蓝绿发布
  15. 联想T440怎么把原装Win8或Win10换成Win7系统
  16. R语言用quantstrat包获取股票、债券、基金、黄金、原油、指数、外汇和全球经济数据
  17. Mac电池显示需要维修
  18. 一文带您了解信号线和电源线的区别
  19. c语言程序设计课后答案西电,C语言程序设计习题大全(含答案)C语言-.doc
  20. 滑动拼图验证码 免费 java_js+canvas实现滑动拼图验证码功能

热门文章

  1. ADO Entities Framework不对多表查询进行优化?
  2. 自学成为动画师?你真的准备好了吗?
  3. 3D建模吃香到底是真是假?
  4. oracle的集函数,Oracle统计分析函数集之一(转载)
  5. 学术 | 基于深度学习的图像边缘和轮廓提取方法介绍
  6. 独家总结| 一文读懂卡尔曼滤波
  7. php1045无法登录mysql_phpstudy安装完成后打开phpmyadmin提示#1045 无法登录 MySQL 服务器...
  8. 计算机专业必备电子书单
  9. 决策树随笔-深度AI科普团队
  10. android 自定义横向堆积柱形图,MPAndroidChart项目实战(八)——自定义分段堆积柱状图...