i2c总线编码

发送启动信号S

在同步时钟线SCL 为高电平时,数据线出现的由高到低的下降沿。 启动信号子程序STA

 1 /*******************************************************************************
2 * 函数名 : I2cStart()
3 * 函数功能 : 起始信号:在SCL时钟信号在高电平期间SDA信号产生一个下降沿
4 * 输入 : 无
5 * 输出 : 无
6 * 备注 : 起始之后SDA和SCL都为0
7 *******************************************************************************/
8
9 void I2cStart()
10 {
11 SDA=1;
12 Delay10us();
13 SCL=1;
14 Delay10us();//建立时间是SDA保持时间>4.7us
15 SDA=0;
16 Delay10us();//保持时间是>4us
17 SCL=0;
18 Delay10us();
19 }

发送停止信号P

在SCL 为高电平期间SDA 发生正跳变。

停止信号子程序STOP

 1 /*******************************************************************************
2 * 函数名 : I2cStop()
3 * 函数功能 : 终止信号:在SCL时钟信号高电平期间SDA信号产生一个上升沿
4 * 输入 : 无
5 * 输出 : 无
6 * 备注 : 结束之后保持SDA和SCL都为1;表示总线空闲
7 *******************************************************************************/
8
9 void I2cStop()
10 {
11 SDA=0;
12 Delay10us();
13 SCL=1;
14 Delay10us();//建立时间大于4.7us
15 SDA=1;
16 Delay10us();
17 }

等待应答信号

应答信号:应答信号由接受设备产生,在scl信号为高电平期间,接受设备将SDA拉低为低电平一段时间,表示数据传输正确。

非应答信号:应答信号由接受设备产生,在SCL信号为高电平期间,接受设备不将将SDA拉低为低电平一段时间,没有应答。

 1 /*******************************************************************************
2 * 函数名 : yingda()
3 * 函数功能 : 对数据是否被从机接受给出应答/非应答信号(1/0)
4 * 输入 : 无
5 * 输出 : 0或1。发送成功返回1,发送失败返回0
6 * 备注 : 发送完一个字节SCL=0,SDA=1
7 *******************************************************************************/
8 void yingda()
9 {
10 unsigned char b;
11 while(SDA)//等待应答,也就是等待从设备把SDA拉低
12 {
13 b++;
14 if(b>200) //如果超过2000us没有应答发送失败,或者为非应答,表示接收结束
15 {
16 SCL=0;
17 Delay10us();
18 return 0;
19 }
20 }
21 SCL=0;
22 Delay10us();
23 return 1;
24 }

通过I2C发送一个字节

数据传送格式

unsigned char I2cSendByte(unsigned char dat)
{
unsigned char a=0;//最大255,一个机器周期为1us,最大延时255us。
for(a=0;a<8;a++)//要发送8位,从最高位开始
{
SDA=dat>>7; //起始信号之后SCL=0,所以可以直接改变SDA信号
dat=dat<<1;
Delay10us();
SCL=1;
Delay10us();//建立时间>4.7us
SCL=0;
Delay10us();//时间大于4us
}
SDA=1;
Delay10us();
SCL=1;
yingda(); //应答子函数
}

使用I2c读取一个字节

 1 /*******************************************************************************
2 * 函数名 : I2cReadByte()
3 * 函数功能 : 使用I2c读取一个字节
4 * 输入 : 无
5 * 输出 : dat
6 * 备注 : 接收完一个字节SCL=0,SDA=1.
7 *******************************************************************************/
8
9 unsigned char I2cReadByte()
10 {
11 unsigned char a=0,dat=0;
12 SDA=1; //起始和发送一个字节之后SCL都是0
13 Delay10us();
14 for(a=0;a<8;a++)//接收8个字节
15 {
16 SCL=1;
17 Delay10us();
18 dat<<=1;
19 dat|=SDA;
20 Delay10us();
21 SCL=0;
22 Delay10us();
23 }
24 return dat;
25 }

以At24c02举例说明i2c总线读写数据过程

a、主机向从机发送数据,数据传送方向在整个传送过程中不变:

注:有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。

A表示应答, A非表示非应答(高电平)。

S表示起始信号,P表示终止信号。

 1 /*******************************************************************************
2 * 函数名 : void At24c02Write(unsigned char addr,unsigned char dat)
3 * 函数功能 : 往24c02的一个地址写入一个数据
4 * 输入 : 无
5 * 输出 : 无
6 *******************************************************************************/
7
8 void At24c02Write(unsigned char addr,unsigned char dat)
9 {
10 I2cStart();
11 I2cSendByte(0xa0); //发送写器件地址 用“0”表示主机发送数据(T),“1”表示主机接收数据(R)
12     I2cSendByte(addr);//发送要写入内存地址 
13 I2cSendByte(dat); //发送数据
14 I2cStop();
15 }

b、主机从从机读数据

 1 /*******************************************************************************
2 * 函数名 : unsigned char At24c02Read(unsigned char addr)
3 * 函数功能 : 读取24c02的一个地址的一个数据
4 * 输入 : 无
5 * 输出 : 无
6 *******************************************************************************/
7
8 unsigned char At24c02Read(unsigned char addr)
9 {
10 unsigned char num;
11 I2cStart();
12 I2cSendByte(0xa0); //发送写器件地址
13 I2cSendByte(addr); //发送要读取的地址
14 I2cStart();
15 I2cSendByte(0xa1); //发送读器件地址
16 num=I2cReadByte(); //读取数据
17 I2cStop();
18 return num;
19 }

i2c总线编码的更多相关文章

  1. i2c总线,设备,驱动之间的关系

    ------ 总线上先添加好所有具体驱动,i2c.c遍历i2c_boardinfo链表,依次建立i2c_client, 并对每一个i2c_client与所有这个线上的驱动匹配,匹配上,就调用这个驱动的 ...

  2. I2C总线协议的简要说明

    为了快速的了解I2C总线协议,此处采用另类的方式进行说明. 倘若你和另外一个人只能通过一个开关加灯泡的装置在不同的两个房间进行交流,以下是很简单能说明的一个模型: 你的房间有一个开关,另外一间房间有一 ...

  3. Linux I2C总线设备驱动模型分析(ov7740)

    1. 框架1.1 硬件协议简介1.2 驱动框架1.3 bus-drv-dev模型及写程序a. 设备的4种构建方法a.1 定义一个i2c_board_info, 里面有:名字, 设备地址 然后i2c_r ...

  4. 【转】I2C总线协议

    I2C总线(Inter Integrated-Circuit)是由PHILIPS公司在上世纪80年代发明的一种电路板级串行总线标准,通过两根信号线——时钟线SCL和数据线SDA——即可完成主从机的单工 ...

  5. 51单片机 | 基于I2C总线的秒表模拟应用

    ———————————————————————————————————————————— 参考地址: http://blog.csdn.net/junyeer/article/details/4648 ...

  6. I2C总线完全版——I2C总线的结构、工作时序与模拟编程

    I2C总线的结构.工作时序与模拟编程 I2C总线的结构.工作时序与模拟编程I2C总线(Inter Integrated Circuit)是飞利浦公司于上个世纪80年代开发的一种"电路板级&q ...

  7. I2C总线(异步)

    起始位与停止位的定义: 起始信号:当SCL为高期间,SDA由高到低的跳变:启动信号是一种电平跳变时序信号,而不是一个电平信号. 停止信号:当SCL为高期间,SDA由低到高的跳变:停止信号也是一种电平跳 ...

  8. [I2C]I2C总线协议图解

    转自:http://blog.csdn.net/w89436838/article/details/38660631 1  I2C总线物理拓扑结构      I2C 总线在物理连接上非常简单,分别由S ...

  9. Linux设备驱动模型之I2C总线

    一.I2C子系统总体架构 1.三大组成部分 (1)I2C核心(i2c-core):I2C核心提供了I2C总线驱动(适配器)和设备驱动的注册.注销方法,提供了与具体硬件无关的I2C读写函数. (2)I2 ...

随机推荐

  1. 运维人员常用的Linux命令总结

    转至:https://www.cnblogs.com/CHLL55/p/13698946.html 目录结构 目录 说明 /bin 存放可执行文件 /boot 核心与启动相关文件 /dev 设备有关的 ...

  2. jq给手机号加密

    效果: HTML代码:     <!-- 1手机绑定 -->     <div class="memberuser_box">         <di ...

  3. js websocket断线重连

    js websocket断开重连实例代码,请根据自己需求做出相应改动Vue中使用websocket $(function() { var lockReconnect = false;//避免重复连接 ...

  4. Tableau绘制K线图、布林线、圆环图、雷达图

    Tableau绘制K线图.布林线.圆环图.雷达图 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一. K线图 1.1 导入数据源 1.2 拖拽字段 将[日期]托到列 ...

  5. C# form捕捉方向键事件

    在C# Form中监听键盘输入事件本身是很简单的,但是如果是想监听键盘上的上下左右这四个方向键,实现起来有所不同.下面我就以一个Demo简单陈述一下实现过程. 一.为了让界面能够监听键盘事件,必须实现 ...

  6. tp5 ajax批量删除(自写)

    html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  7. Java有了synchronized,为什么还要提供Lock

    摘要:在Java中提供了synchronized关键字来保证只有一个线程能够访问同步代码块.既然已经提供了synchronized关键字,那为何在Java的SDK包中,还会提供Lock接口呢? 本文分 ...

  8. i++ 反编译码

    1.特点: 操作数栈,主要用于保存计算过程中的结果,同时作为集计算过程中变量临时的存储空间. 操作数栈就是JVM执行引擎的一个工作区,当方法执行开始,一个新栈帧也会随之被创建,这个方法的操作数栈是空的 ...

  9. ArcMap操作随记(12)

    1.[取色器]工具 [自定义]|[自定义模式]|[命令] 2.批量修改符号 [符号系统]→右键,[所有符号的属性] 3.将地图元素转换为图形 转换工具 4.好看的地图边框 [布局视图]→数据框上右键→ ...

  10. 记一次解决关机蓝屏 | MULTIPLE_IRP_COMPLETE_REQUESTS | klflt.sys

    已经解决蓝屏问题,原因是卡巴斯基安全软件驱动导致,需要卸载卡巴斯基安全软件,详细过程如下. 一.关机时蓝屏 Win10系统,在关机动画快结束时突然蓝屏,提示:你的设备遇到问题,需要重启,终止代码:MU ...