初探linux子系统集之i2c子系统(一)
I2c子系统在进公司来的时候就学习过了,可是那是还不是很熟悉linux中的i2c子系统,就没有细看。记得当初很想熟悉linux中的各种总线驱动,想专门写一个关于总线驱动的专集,后来发现好像就没有几个,粗粗的写完了,也就是和菜鸟一起学linux总线驱动的专集。现在子系统又要开始讲到i2c了,那么就偷个小懒,参考一下下。
讲到了i2c子系统,一开始便是要讲解下i2c的协议了,从最下面的协议开始熟悉,因为一般调试的时候就是看波形,有没有clock,有没有data。
I2C总线由两根线组成,即串行数据(SDA)和串行时钟(SCL)。每个器件都有一个唯一的地址识别,而且都可以作为一个发送器或接收器。下面贴些主要的术语。
发送器: 发送数据到总线的器件
接收器: 从总线接收数据的器件
主机: 初始化发送产生时钟信号和终止发送的器件
从机: 被主机寻址的器件
多主机: 同时有多于一个主机尝试控制总线但不破坏报文
仲裁 : 是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使报文不被破坏的过程
同步: 两个或多个器件同步时钟信号的过程
如上图所示,SDA和SCL线上挂接着很多设备。也有两个主机,A和B。
SDA和SCL都是双向线路,就是即可以当输入也可以当输出的,他们都通过上拉电阻连接到正的电源电压上。当总线空闲时,这两条线路都是高电平的。连接到总线的器件输出级必须是漏极开路或者集电极开路才能执行与的功能。
I2C总线上数据的传输速率在标准模式下可以达到100kbit/s,在快速模式下可达到400kbit/s,在高速模式下可达3.4Mbit/s。连接到总线的接口数量只由总线电容是400pF的限制决定。
I2C是按位传输的,一个时钟一位数据。SDA线上的数据必须在时钟的高电平周期保持稳定。数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。
I2C总线中,有起始(S)和停止(P)。
起始位:当SCL是高电平时,SDA线从高电平向低电平转换。
停止位:当SCL是高电平时,SDA线从低电平向高电平转换。
如图所示:
I2C传输的数据中,发送到SDA线上的每个字节为8位。每个字节后必须跟一个响应位,即ACK。其简单的数据传输的时序如下
I2C的地址共有7位,紧接着的第8位是数据方向位,0表示发送(写),1表示请求数据(读)。下图为完整的数据传输图
上图就是I2C协议的整个过程了,首先是起始位,然后寻找设备,发送设备地址,接着发送数据,或者请求数据。最后停止位。
初探linux子系统集之i2c子系统(一)的更多相关文章
- 初探linux子系统集之i2c子系统(二)
大概也是前年了,一直没有把那个i2c的子系统讲解完,这里偷个懒,把以前整理的i2c相关的知识再梳理一下,做个了结,然后再去学习timer子系统. 先看下i2c在内核中的代码分布: obj-$(CONF ...
- 初探linux子系统集之led子系统(二)
巴西世界杯,德国7比1东道主,那个惨不忍睹啊,早上起来看新闻,第一眼看到7:1还以为点球也能踢成这样,后来想想,点球对多嘛6比1啊,接着就是各种新闻铺天盖地的来了.其实失败并没有什么,人生若是能够成功 ...
- 初探linux子系统集之led子系统(二)【转】
本文转载自:http://blog.csdn.net/eastmoon502136/article/details/37606487 巴西世界杯,德国7比1东道主,那个惨不忍睹啊,早上起来看新闻,第一 ...
- Linux驱动编程--基于I2C子系统的I2C驱动
代码中,我添加了很多注释,应该不难理解,有错误大家可以指出来,我再改正 #include <linux/kernel.h> #include <linux/module.h> ...
- Linux内核中SPI/I2c子系统剖析
Linux内核中,SPI和I2C两个子系统的软件架构是一致的,且Linux内核的驱动模型都以bus,driver,device三种抽象对象为基本元素构建起来.下文的分析将主要用这三种抽象对象的创建过程 ...
- 初探linux子系统集之timer子系统(三)
因为现在的linux虽然还是可以使用低精度的timer,但是趋势是高精度hrtimer,所以上一篇试着翻译一下hrtimer的一些介绍,翻译的不是很好,看来英语还得好好学习啊,下面还是好好学习下lin ...
- 初探linux子系统集之timer子系统(一)
一般来说要让整个linux系统跑起来,那么一个必须的就是linux的时钟,也就是时间子系统了,这里正好工作需要,那么就研究下linux下的时间子系统了. linux内核必须完成两种主要的定时测量.一个 ...
- 初探linux子系统集之timer子系统(二)
想着博客中还没有翻译过一篇文章,虽然英文水平有限,但是借助google翻译慢慢地翻译出一篇文章也是不错的选择.那就来学习下hrtimer的文档吧,翻译的略搓,可以直接跳过这篇,这里仅作为学习的过程!^ ...
- 初探linux子系统集之led子系统(一)
就像学编程第一个范例helloworld一样,学嵌入式,单片机.fpga之类的第一个范例就是点亮一盏灯.对于庞大的linux系统,当然可以编写一个字符设备驱动来实现我们需要的led灯,也可以直接利用g ...
随机推荐
- shell 数据流重定向操作符总结
最近看了鸟哥私房菜关于shell数据流重定向的内容,总结一下. 操作符: 1.标准输入(stdin):代码为0,符号:< 或者<< 2.标准输出(stdout):代码为1,符号:&g ...
- Mybatis逻辑分页原理解析RowBounds
Mybatis提供了一个简单的逻辑分页使用类RowBounds(物理分页当然就是我们在sql语句中指定limit和offset值),在DefaultSqlSession提供的某些查询接口中我们可以看到 ...
- MacTalk·人生元编程 - 读书笔记
简介 <MacTalk·人生元编程>是一本随笔文集,主要内容来自作者的微信公众平台"MacTalk By 池建强".本书撰写于2013年,书中时间线却不止于此.作者以一 ...
- TCP的ACK确认系列 — 延迟确认
主要内容:TCP的延迟确认.延迟确认定时器的实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 延迟确认模式 发送方在发送数据包时,如果发送的数据包有 ...
- R12中注册客户化应用为多组织应用
Oralce EBS R12中引入了MOAC的控制,所有多OU的表对象都添加了数据库VPD的控制策略,需要访问这些对象中的数据,首先需要进行多组织环境的初始化,但是如果客户化的应用中也需要具备多OU的 ...
- Scipy教程 - 距离计算库scipy.spatial.distance
http://blog.csdn.net/pipisorry/article/details/48814183 在scipy.spatial中最重要的模块应该就是距离计算模块distance了. fr ...
- 开放源码的安卓天气应用-android学习之旅(73)
我在github上面发布了简易的天气应用,能够简单显示全国各个省市县市的天气 效果图片如下 源代码我放在github上了.我希望大家可以去下载,修改以后在上传维护,我的代码很简单.算是抛砖引玉,希望大 ...
- 访问日志IO性能优化
在高并发量的场景下磁盘IO往往是性能的瓶颈所在,访问日志涉及到频繁的写操作,所以这部分要尽可能地优化,不然将拖累系统的整体性能.针对文件记录及数据库记录两种方式可以有以下措施提高写性能, l 避免频繁 ...
- CentOS安装、使用VNC
VNC (Virtual Network Computer)是虚拟网络计算机的缩写.VNC 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的.VNC 是在基于 UNIX ...
- CRM导入组织报实例名称必须与计算机名称相同的问题
今天采用P2V拷贝了一台CRM数据库到虚机上,因为要加域必须得把计算机名改了,然后再重新导入组织的时候报错了:"实例名称必须与计算机名称相同",google了下没有匹配的问题答案, ...