(一)I2C学习

一、介绍
     I2C总线是由Philips公司发明的一种两线式串行总线,用于连接微控制器及其外围设备。I2C最主要的优点是简单、有效。由于不需要额外独立的接口,所以i2c总线占用的空间非常少,减少了电路板的空间和芯片引脚的数量。i2c总线最初是为音频和视频设备开放,现在已应用于各种设备。

二、I2C概述
     I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接受数据,每个设备都有唯一的地址识别。I2C运用主/从双向通信,器件发送数据到总线上则定义为发送器,器件接受数据则是接受器。主器件和从器件都可以工作于接收和发送状态。总线必须由主器件(通常为微处理器)控制,主器件产生SCL控制总线的传输方向,并产生起始和停止条件。SDA上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA上状态的改变被用来表示起始和停止。
     I2C数据格式如下:
    无数据:SCL=1,SDA=1;
    开始位(Start):当SCL=1时,SDA由1向0跳变;
    停止位(Stop):当SCL=1时,SDA由0向1跳变;
    数据位:当SCL由0向1跳变时,由发送方控制SDA,此时SDA为有效数据,不可随意改变SDA;
    当SCL保持为0时,SDA上的数据可随意改变;
    地址位:定义同数据位,但只由发送器发给接收器;
    应答位(ACK):当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=0;
    否应答位(NACK):当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=1。
    当数据为单字节传送时,格式为:
       开始位,8位地址位(含1位读写位),应答,8位数据,应答,停止位。
    当数据为一串字节传送时,格式为:
           开始位,8位地址位(含1位读写位),应答,8位数据,应答,8位数据,应答,……,8位数据,应答,停止位。
     需要注意的是:
    (1)SCL一直由主器件(Master)控制,SDA依照数据传送的方向,读数据时由从器件(Slave)控制SDA,写数据时由Master控制SDA。当8位数据传送完毕之后,应答位或者否应答位的SDA控制权与数据位传送时相反。
    (2)开始位“Start”和停止位“Stop”,只能由Master来发出。
    (3)地址的8位传送完毕后,成功配置地址的Slave设备必须发送“ACK”。否则否则一定时间之后Master视为超时,将放弃数据传送,发送“Stop”。
    (4)当写数据的时候,Master每发送完8个数据位,Slave设备如果还有空间接受下一个字节应该回答“ACK”,Slave设备如果没有空间接受更多的字节应该回答“NACK”,Master当收到“NACK”或者一定时间之后没收到任何数据
       将视为超时,此时Master放弃数据传送,发送“Stop”。
    (5)当读数据的时候,Slave设备每发送完8个数据位,如果Master希望继续读下一个字节,Master应该回答“ACK”以提示Slave准备下一个数据,如果Master不希望读取更多字节,Master应该回答“NACK”以提示Slave设备准
       备接收Stop信号。
    (6)当Master速度过快Slave端来不及处理时,Slave设备可以拉低SCL不放(SCL=0将发生“线与”)以阻止Master发送更多的数据。此时Master将视情况减慢或结束数据传送。

三、I2C驱动框架
Linux的I2C体系结构分为3个组成部分:
1.I2C核心
I2C 核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(即“algorithm”)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。
2.I2C总线驱动
I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至直接集成在CPU内部。
I2C总线驱动主要包含了I2C适配器数据结构i2c_adapter、I2C适配器的algorithm数据结构i2c_algorithm和控制I2C适配器产生通信信号的函数。
经由I2C总线驱动的代码,我们可以控制I2C适配器以主控方式产生开始位、停止位、读写周期,以及以从设备方式被读写、产生ACK等。
3.I2C设备驱动
I2C设备驱动是对I2C硬件体系结构中设备端的实现,设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据。
I2C设备驱动主要包含了数据结构i2c_driver和i2c_client,我们需要根据具体设备实现其中的成员函数。

(一)I2C学习

时间: 2024-08-08 13:54:28

(一)I2C学习的相关文章

linux驱动之i2c学习

最近在研究linux的i2c驱动,从最底层i2c控制器初始化到应用层与i2c设备交互基本打通了. 一.linux的i2c架构可以用下图表示: IIC适配器对应一条i2c总线,linux里面用i2c_adapter结构表示.总线下的i2c设备用i2c_client结构表示.algorithm是i2c的通信协议,IIC核心层负责注册/注销i2c_adapter.注册/注销i2c_client.注册i2c总线等操作.i2c-dev对应的是i2c-dev.c,它负责将总线实例化为一个i2c_client

I2C学习

详细的解释: 读写状态机图

(6)s3c2440用I2C接口访问EEPROM

在前面阅读理解了I2C的官方协议文档后,就拿s3c2440和EEPROM来验证一下. 本来是想用s3c2440的SDA和SCL管脚复用为GPIO来模拟的,但在没有示波器的情况下搞了一周,怎么都出不来,最后还是放弃了.甚至参考了linux下i2c-algo-bit.c和i2c-gpio.c,依然没调出来.如果有示波器,可能很快就能找到原因,现在完全不知道问题出在哪里.其实想用GPIO模拟I2C的目的很简单,以一种简单而又深刻的方式来理解I2C. 既然这条路暂时没法走,退而求其次,用s3c2440的

Deruio制作 树莓派用户手册V001

目录 1 准备工作...5 1.1 下载Raspbian系统...5 1.2 Linux系统下安装Raspbian系统...6 1.3 Windows系统下安装Raspbian系统...7 1.4 配置树莓派系统...8 1.5 安装samba.9 1.6 使用ssh工具登录树莓派...11 2 树莓派GPIO的学习...15 2.1 GPIO类库...15 2.1.1Python GPIO类库...15 2.1.2wiringPi类库...16 2.1.3BCM2835 C Library库.

Deruio制作 树莓派用户手册V002

版本号 修订时间 修订内容 0.0.2 2014.9.23 修复Linux C UART程序中传输13.17.19时出错的问题 增加Pi Library例程代码 增加软件PWM章节 增加Bitcoin比特币章节 0.0.1 2014.8.24 第一次发布 目录 1 准备工作... 6 1.1 下载Raspbian系统... 6 1.2 Linux系统下安装Raspbian系统... 7 1.3 Windows系统下安装Raspbian系统... 8 1.4 配置树莓派系统... 8 1.5 安装

树莓派学习笔记——I2C设备载入和速率设置

原文:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 sudo modprobe -r i2c_bcm2708  #卸载设备 -r代表remove sudo modprobe i2c_bcm2708     #重新载入设备 方法2——永久载入设备 打开配置文件,进行修改 sudo nano /etc/modules                # 使用nano打开文件 增加以下两行 i2c

EEPROM读写学习笔记与I2C总线(二)

无论任何电子产品都会涉及到数据的产生与数据的保存,这个数据可能并不是用来长久保存,只是在运行程序才会用到,有些数据体量较大对于获取时效性并不太强,各种各样的数据也就有不同的存储载体,这次在EEPROM读写中,顺道把看到的关于存储的一些东西整理一下,有些话来自于网友,所以还是那句话,看到的人要带着自己的思考去看,记住尽信书不如无书,fighting!!! 一.基本概念 最熟悉的两个词语应该是RAM与ROM,RAM(Random Access Memory)的全名为随机存取记忆体,它相当于PC机上的

树莓派学习笔记——I2C Tools 学习笔记

i2ctool树莓派linux 目录(?)[+] 安装 I2C总线扫描 I2C设备查询 寄存器内容导出 寄存器内容写入 寄存器内容读出 总结 参考资料 1.安装 I2C驱动载入和速率修改请查看博文[树莓派学习笔记--I2C设备载入和速率设置]. 2.I2C总线扫描 通过i2cdetect -l指令可以查看树莓派上的I2C总线,从返回的结果来看树莓派含有两个I2C总线,通过阅读相关的资料,树莓派1代使用I2C0,而树莓派2代使用I2C1. [plain] view plaincopyprint?

树莓派学习之I2C通信

最近飞兆杯的比赛选择了循迹小车,其中用到的ldc1314芯片是基于I2c通信的,虽然项目并没有成功,但是还是学习了树莓派的I2c通信相关的一些知识! 一.配置I2C接口,读取i2c设备的地址 1.可以通过raspi-config配置工具配置使能I2C,或者通过编辑/boot/config.txt文件,加入一下一行内容: dtparam=i2c1=ondtparam=i2c_arm=on 2.安装I2C库和工具 $sudo apt-get install i2c-tools 3.当连接上I2C设备