1 i2c基本协议和时序

i2c基础的知识这里就不提了,直接从时序开始,直接来看看i2c的波形

2 i2c子系统软件框架

先来看看i2c总线的分层思想:

在分层图中我们可以看到,driver和device在核心层中分别成为了2条链表,核心层会按一定的规则匹配两条链表中的元素。

查看内核源码 i2c-core.c ,找到了匹配的函数如下:

static int i2c_device_match(struct device *dev, struct device_driver *drv)
{struct i2c_client  *client = i2c_verify_client(dev);struct i2c_driver *driver;if (!client)return 0;/* Attempt an OF style match */if (of_driver_match_device(dev, drv))return 1;/* Then ACPI style match */if (acpi_driver_match_device(dev, drv))return 1;driver = to_i2c_driver(drv);/* match on an id table if there is one */if (driver->id_table)return i2c_match_id(driver->id_table, client) != NULL;return 0;
}

在这个函数中我们很清楚的看到I2c有三种匹配规则。第一种是按设备树匹配,第二种是按ACPT匹配,第三种则是按id_table匹配(实际上id_table匹配就是匹配dev和drv的名字)。

3  I2c子系统中涉及到的设备树文件

这次我们按设备树来匹配,首先进入内核的设备树源码,添加我们的硬件

linux@ubuntu:~/Myfile/linux-3.14-fs4412$ vi arch/arm/boot/dts/exynos4412-fs4412.dts

图中的i2c@138B0000部分就是我们这次要手动添加的。可以通过:/i2c来搜索别的i2c设备写在哪个位置,在它的附近添加我们的代码。图中代码在 pinctrl-0 = <&i2c5_bus>; 这句中写错了,应该是挂载在5号i2c总线上。

这次我们添加的代码如下:

i2c@138B0000{#address-cells = <1>;#size-cells = <0>;samsung,i2c-sda-delay = <100>;samsung,i2c-max-bus-freq = <20000>;pinctrl-0 = <&i2c5_bus>;pinctrl-names = "default";status = "okay";//板子电路原理图上,6050的挂载总线是低电平,因此是0x68,若是高电平就是0x69mpu6050@68 {compatible = "InvenSense,mpu6050";reg = <0x68>;};};

添加完后输入   make dtbs   命令生成新的设备树文件,然后烧写到我们板子上。

这样,i2c类驱动的前期准备工作就做好了。

一步一步教你构建一个MPU6050(I2C类)驱动(一)相关推荐

  1. 阅读小技能:【有效地构建自己的知识体系】三步阅读法来快速构建一个知识体系的方法:1、阅读“正统”文献2、读权威的综述文章 3、学术专著阅读(培养阅读品位)

    文章目录 前言 I 快速构建一个知识体系 1.1 第一步:阅读`正统`文献(作品) 1.1.1 `基准线思维` 1.1.2 看哪些正统的学习材料? 1.2 第二步:就是读权威的综述文章 1.2.1 对 ...

  2. 手把手教你构建一个web前端项目,全网最详细教程!

    为什么80%的码农都做不了架构师?>>>    1. 选择现成的项目模板还是自己搭建项目骨架 搭建一个前端项目的方式有两种:选择现成的项目模板.自己搭建项目骨架. 选择一个现成项目模 ...

  3. 每日一书丨手把手教你构建一个通用的智能风控平台

    随着互联网的发展,各种与互联网业务相关的风险不断滋生,例如娱乐.游戏.社交.电商.金融等行业的营销风险.支付风险.运营风险.欺诈风险.信用风险等,不仅种类多而且迭代快,这就需要有更高效.更智能的风险控 ...

  4. 第五十八期:从0到1 手把手教你建一个区块链

    近期的区块链重回热点,如果你想深入了解区块链,那就来看一下本文,手把手教你构建一个自己的区块链. 作者:Captain编译 近期的区块链重回热点,如果你想深入了解区块链,那就来看一下本文,手把手教你构 ...

  5. 实践操作:六步教你如何用开源框架Tensorflow对象检测API构建一个玩具检测器

    TensorFlow对象检测API是一个建立在TensorFlow之上的开源框架,可以轻松构建,训练和部署对象检测模型. 到目前为止,API的性能给我留下了深刻的印象.在这篇文章中,我将API的对象设 ...

  6. tfr 计算机硬件,实践操作:六步教你如何用开源框架Tensorflow对象检测API构建一个玩具检测器...

    TensorFlow对象检测API是一个建立在TensorFlow之上的开源框架,可以轻松构建,训练和部署对象检测模型. 到目前为止,API的性能给我留下了深刻的印象.在这篇文章中,我将API的对象设 ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容...

    上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...

  8. 通过Dapr实现一个简单的基于.net的微服务电商系统(十)——一步一步教你如何撸Dapr之绑定...

    如果说Actor是dapr有状态服务的内部体现的话,那绑定应该是dapr对serverless这部分的体现了.我们可以通过绑定极大的扩展应用的能力,甚至未来会成为serverless的基础.最开始接触 ...

  9. 通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权-百度版...

    目录: 一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实现一个简单的基于.net的微服务电商系统(二)--通讯框架讲解 三.通过Dapr实现一个简单的基于.net的微服务 ...

最新文章

  1. ClickHouse 学习
  2. 远程ssh shell 脚本 tcgetattr: Inappropriate ioctl for device错误
  3. php 转化数字,php实现中文转数字
  4. 【若依(ruoyi)】验证码
  5. 14.cookie与自动登陆
  6. java多线程原子操作_Java 多线程 - 原子操作CAS
  7. mysql问题处理积累
  8. SEO 搜索引擎优化
  9. 鼐鼐家为用户打造3D互动体验式营销解决方案
  10. map怎么转化dto_阿里面试:为什么Map桶中个数超过8才转为红黑树
  11. python 内置函数:iter()
  12. BZOJ 1012 - 树状数组+维护最大值 / 单调栈+二分 / 暴力(伪单调队列) / 线段树...
  13. Spring生态系统(Spring可能大家都在用,很少去关注整体架构)
  14. 虚拟主机支持ssl支持php7,虚拟主机支持https改造吗
  15. win10 SVN 图标不显示的解决办法
  16. linux进入终端tty3,Linux中终端界面与图形界面之间的切换关系
  17. 计算机 bat文件夹加密,无需第三方软件,自制批处理加密隐藏文件夹
  18. 莫比乌斯反演 平衡规划 双端栈 双端队列 等价类等
  19. 拼图复原_1张废旧纸板,3分钟带娃变成趣味拼图!
  20. 【记录一下】解决Dataset not found

热门文章

  1. Eclipse的安装与配置
  2. 小米从颠覆者到追随者的巨变背后
  3. 鹏业云计价i20(西藏)计价软件升级拉萨市招投标清单接口
  4. 计算机电脑制作社团,电脑制作小社团活动计划
  5. 论文可以按论文范文格式照抄吗?
  6. 使用Dymola的Python接口
  7. 功率谱有什么用_所有电器功率单位都用瓦,为什么空调要用匹,一匹等于多少瓦...
  8. 10分钟教你手写8个常用的自定义hooks
  9. 实验室仪器如何防止静电伤害?
  10. 【调剂】航天恒星科技有限公司(原航天五院503所)2023年硕士研究生招生调剂通知...