Linux 中的 I2C 协议

i2c总线协议:

撰写不易,转载需注明出处:http://blog.csdn.net/jscese/article/details/44001185 本文来自 【jscese】的博客!

I2C 总线的概念:

I2C (Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线最主要的优点就是简单性和有效性。

I2C总线是由数据线SDA和时钟SCL构成的串行总线,各种被控制器件均并联在这条总线上,每个器件都有一个唯一的地址识别,可以作为总线上的一个发送器件或接收器件(具体由器件的功能决定) 。I2C总线上传输控制情况见下图:


I2C总线的几种信号状态:

  1. 空闲状态:SDA和SCL都为高电平。
  2. 开始条件(S):SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
  3. 结束条件(P):SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。

开始结束时序图如下:


I2C总线传输特征:

  • 数据有效:在SCL的高电平期间, SDA保持稳定,数据有效。SDA的改变只能发生在SCL的底电平期间。
  • 数据传输:发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制 每个字节后必须跟一个响应位,首先传输的是数据的最高位。
  • ACK信号: 数据传输的过程中,接收器件每接收一个字节数据要产生一个ACK信号,在第九个SCL时钟脉冲的高电平期间,持续拉低SDA,向发送器件发出特定的低电平脉冲,表示已经收到数据。
  • 地址字节:在起始条件(S)后,第一个字节中的前7位代表从机地址,第8位代表读写,0 表示发送(写),1 表示接收(读)。

    一次数据传输的完整波形如下:


时间: 2024-10-13 10:25:46

Linux 中的 I2C 协议的相关文章

Linux内核调用I2C驱动_以MPU6050为例

Linux内核调用I2C驱动_以MPU6050为例 0. 导语 最近一段时间都在恶补数据结构和C++,加上导师的事情比较多,Linux内核驱动的学习进程总是被阻碍.不过,十一假期终于没有人打扰,有这个奢侈的大块时间,可以一个人安安静静的在教研室看看Linux内核驱动的东西.按照Linux嵌入式学习的进程,SPI驱动搞完了之后就进入到I2C驱动的学习当中,十一还算是比较顺利,I2C的Linux驱动完成了. 为了测试I2C是否好用,选择一个常用的I2C传感器,手头有个MPU6050,刚好作为I2C的

I2C协议->裸机程序->adapter驱动程序分析

开发板:mini2440 内核  :linux2.6.32.2 参考  :韦东山毕业班I2C视频教程 1.i2c协议简要分析 i2c中线是一种由 PHILIPS 公司开发的串行总线,用于连接微控制器及其外围设备,它具有以下特点. 1.只有两条总线线路:一条串行数据线SDA,一条串行时钟线SCL. 2.每个连接到总线的器件都可以使用软件根据它的唯一的地址来确定. 3.传输数据的设备之间是简单的主从关系. 4.主机可以用作主机发送器或者主机接收器. 5.它是一个真正的多主机总线,两个或多个主机同时发

Linux 中的文件共享服务

Linux 中的文件共享服务 ============================================================================== 概述:    本章将主要介绍文件共享服务中的ftp服务,内容包括:ftp的程序环境,配置文件的相关介绍,以及如何配置基于虚拟用户的vsftpd服务 文件服务 1)介绍 ★ftp: 应用层,C/S架构,文件共享:file transfer protocol: ★nfs,cifs:文件系统接口,网络文件系统: ☉n

应用Oracle(Linux中的安装)

Linux中安装Oracle,不同于windows. Linux在安装时,要作些必要的分区配置,以便进行Oracle的安装: 同时需要创建专门的数据库用户和组,并配置环境变量. root登录 使用 root 来配置 Oracle 环境 其中**检查环境**部分,需要在安装 Oracle 检查和配置环境 检查环境 1.swap空间 # swap 空间大小,应满足以下条件 # 内存 1~2 G,swap 空间大小应为2倍内存 # 内存 2~16 G, swap 空间大小等同于内存 # 内存 > 16

Linux中如何使用 man page

众所周知,在Linux中有很多的命令,每个命令下面又包含许多的选项参数,我们不可能全部背下来,那么我们如何获取详细的命令信息呢?在Linux中提供了很丰富的帮助文件,我们只需要使用"man command(命令)"便能查到我们想要的信息. 一.whatis与whereis 在正式介绍man的使用之前,先给大家说说两个命令"whatis""whereis". whatis->释义 whatis命令是用于查询一个命令的功能,并将查询结果打印到终

【翻译】TCP backlog在Linux中的工作原理

原文How TCP backlog works in Linux水平有限,难免有错,欢迎指出!以下为翻译: 当应用程序通过系统调用listen将一个套接字(socket)置为LISTEN状态时,需要为该套接字指定一个backlog参数,该参数通常被描述为用来限制进来的连接队列长度(queue of incoming connections). 由于TCP协议的三次握手机制,一个进来的套接字连接在进入ESTABLISHED状态并且可以被accept调用返回给应用程序之前,会经历中间状态SYN RE

Linux中环境变量文件及配置

一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量.所以管理环境变量的文件也分为系统级和用户级的,下面贴一个网上找到的讲的比较明白的文件介绍(略作修改)[1]: 1.系统级:(1)/etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件

分析linux中套接字的实现-------创建

套接字是一种使用系统的文件描述符和系统进程进行通信的一种方法. 1.下面是描述套接字地址的结构体: struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ 如果使用了tcp/ip协议,AF_INET char sa_data[14]; /* 14 bytes of protocol address */ }; 2.socket的系统调用: 我们创建套接字都是用socket来创建. socket的系统调用: //每

Linux 中的零拷贝技术,第 2 部分

技术实现 本系列由两篇文章组成,介绍了当前用于 Linux 操作系统上的几种零拷贝技术,简单描述了各种零拷贝技术的实现,以及它们的特点和适用场景.第一部分主要介绍了一些零拷贝技术的相关背景知识,简要概述了 Linux 为什么需要零拷贝技术以及 Linux 中都有哪几种零拷贝技术.本文是本系列文章的第二部分,针对第一部分内容中提到的几种零拷贝技术分别进行更详细的介绍,并对这些零拷贝技术的优缺点进行分析. 0 评论: 黄 晓晨, 软件工程师, IBM 冯 瑞, 软件工程师, IBM 2011 年 1