一、        I2C

1.    I2C概要

I2C总线由SDA和SCL构成的2线式双向通信,通过组合这2个信号,进行通信的开始/停止/数据传送/应答等接收信号。

非通信时:SDA、SCL都保持高电平。

通信的开始和结束通过SCL处于高电平,切上升或者下降SDA来控制。

数据的传送及发送信号时的SDA线上的数据变更在SCL线低电平区间进行,接收信号侧在SCL线处于高电平区间进行读取数据,任何情况下,都在SCL线的每一计时器脉冲以1bit逐步进行。

I2C总线的器件没有通常的逻辑器件所具有的芯片选择引脚,代之以对的是器件分配从地址,当接收器的从地质与选择从地址一致时,开始通信。

2.    I2C通信的开始和停止

3、I2C数据的传送

4、I2C数据的应答

5、从地址

6、写时序

7、读时序(RX8025官网资料中的读时序是错误的,经过测试,下图中的时序是正确的)

二、I2C及RX8025AC驱动

#include "myiic.h"
#include "delay.h"void Delayus(u16 us){u16 i;for(i=0;i<us;i++)__nop();}void IIC_Init(void)
{                        GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(    RCC_APB2Periph_GPIOB, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //ÍÆÍìÊä³öGPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);
//  GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);  //PB6,PB7 Êä³ö¸ß
}void IIC_Start(void)
{SDA_OUT();     SCL_1SDA_1Delayus(10);SDA_0Delayus(10);SCL_0    Delayus(10);}     void IIC_Stop(void)
{u8 i;SDA_OUT();//sdaÏßÊä³öSDA_0Delayus(10);SCL_1Delayus(10);SDA_1for(i=0;i<5;i++){Delayus(10);}
}u8 IIC_Wait_Ack(void)
{u8 ucErrTime=0;SDA_IN();      //SDAÉèÖÃΪÊäÈë  Delayus(10);   Delayus(10);while(READ_SDA){ucErrTime++;if(ucErrTime>250){IIC_Stop();return 1;}}SCL_0//ʱÖÓÊä³ö0      return 0;
} void IIC_Ack(void)
{SDA_OUT();SDA_0;Delayus(10);SCL_1Delayus(10);SCL_0Delayus(10);
}void IIC_NAck(void)
{SDA_OUT();SDA_1;Delayus(10);SCL_1Delayus(10);SCL_0Delayus(10);
}                                        void IIC_Send_Byte(u8 txd)
{ u8 i;SDA_OUT();for(i=0;i<8;i++){if(txd & 0x80) SDA_1else SDA_0txd <<= 1;Delayus(10);SCL_1Delayus(10);SCL_0   }Delayus(10);SCL_1Delayus(10);SCL_0
}       u8 IIC_Read_Byte(unsigned char ack)
{u8 i,receive=0;SDA_IN();//SDAÉèÖÃΪÊäÈëfor(i=0;i<8;i++){SCL_1Delayus(10);receive <<=1;if(READ_SDA) receive |= 0x01;SCL_0Delayus(10);}SDA_OUT();return receive;}void R8025AC_Read(u8 sadd, u8 *buf, u8 len)
{u8 i;IIC_Start();IIC_Send_Byte(0x64);IIC_Send_Byte(sadd<<4|0x01);IIC_Start();IIC_Send_Byte(0x65);for(i=0;i<len-1;i++){buf[i] = IIC_Read_Byte(1);IIC_Ack();}buf[i] = IIC_Read_Byte(0);IIC_NAck();IIC_Stop();
}void R8025AC_Write(u8 sadd,u8 *buf,u8 len)
{u8 i;IIC_Start();IIC_Send_Byte(0X64);IIC_Send_Byte(sadd<<4);for(i=0;i<len;i++){IIC_Send_Byte(buf[i]);}IIC_Stop();
}

I2C分析及RX8025驱动编写相关推荐

  1. tmd26353接近传感器之i2c驱动编写

    一.tmd26353驱动编写思路: 基于i2c设备驱动框架,首先参考原理图配置dts设备树,挂载在哪个i2c总线下面,阅读规格书去确定此器件的器件地址是0x39(也可以使用i2ctools查看器件挂载 ...

  2. Linux I2C设备驱动编写(二)

    I2C对外API I2C client的注册 i2c_register_board_info具体实现 i2c_new_device I2C driver 关于I2C设备驱动的小总结 I2C adapt ...

  3. Linux I2C总线(二)I2C设备驱动编写方法

    Linux I2C总线 Linux I2C总线(一)I2C驱动框架 Linux I2C总线(二)I2C设备驱动编写方法 Linux I2C总线(二)I2C设备驱动编写方法 文章目录 Linux I2C ...

  4. I2C之RX-8025驱动

    AM3354板卡上RX-8025接到了I2C0总线下,添加RX-8025驱动步骤,采用的TI提供的4.1.1的android版本,未采用设备树方式: 1.在board-am335xevm.c中增加RX ...

  5. linux驱动之i2c子系统mpu6050设备驱动

    以下是mpu6050简单的驱动实现,mpu6050是I2C接口的6轴传感器,可以作为字符设备注册到内核,本代码运行环境是3.4.2内核,4.3.2版本的编译链,12.04版本的Ubuntu,硬件环境是 ...

  6. 【Linux驱动】I2C子系统与触摸屏驱动

    由于学习触摸屏驱动涉及到中断以及I2C相关的知识,因此先介绍一下I2C的驱动框架. 触摸屏与I2C总线的关系 关于I2C的基础概念和原理参考我的这篇博客:[裸机]嵌入式相关问题汇总(二.I2C通信概念 ...

  7. v4l2驱动编写篇【转】

    转自:http://blog.csdn.net/michaelcao1980/article/details/53008418 大部分所需的信息都在这里.作为一个驱动作者,当挖掘头文件的时候,你可能也 ...

  8. linux编写gpio驱动程序,linux driver ------ GPIO的驱动编写和调用

    判断哪些文件被编译进内核: 1.通过 make menuconfig 查看 2.比如查看gpio类型的文件,输入 ls drivers/gpio/*.o,有生成.o文件表示被编译进内核 在编写驱动程序 ...

  9. 【基于Linux系统设备树的SPI驱动编写方法】

    文章目录 前言 一.SPI驱动编写 1.修改设备树  a.设备树文件是什么?  b.设备树怎么改? 2.编写驱动 二.完善和测试 1.编译和应用程序  a.编译 && 拷贝到开发板命令 ...

  10. linux摄像头教程,linux 摄像头驱动编写方法教程

    从某个角度来说,摄像头是各个厂家主打的应用功能.那么,linux是如何支持摄像头的,我们可以来看一下?本篇文章主要介绍了详解linux 摄像头驱动编写,小编觉得挺不错的,现在分享给大家,也给大家做个参 ...

最新文章

  1. c++ primer 笔记[20190406]
  2. SQL对象名无效怎么办法 华骨龙
  3. Android学习网站
  4. 程序员的奋斗史(二)——今天你跑步了吗
  5. quartz 两次执行问题
  6. foreach循环怎么获取全部返回值_PHP跳出循环的方法语句有哪些
  7. 小学生也能看懂的ArrayList底层原理
  8. 阶段3 2.Spring_05.基于XML的IOC的案例1_1 基于XML的IOC的案例-案例准备
  9. Java加密方式(AES,DES,RSA,DSA,MD5)
  10. IEC 60730-1-2020.最新原版,可复制文字 : 家用自己设备自动电气控制 - 第 1 部分:一般要求
  11. Xshell v6 Build 0193 绿色特别版及全套产品
  12. 【video】视频压缩编码和音频压缩编码的基本原理
  13. 线性可分支持向量机与软间隔最大化
  14. ndows 资源管理器,windows资源管理器已停止工作怎么解决
  15. Android视频播放器ExoPlayer
  16. Excel数据快速收集工具
  17. 详解java的垃圾清理机制
  18. Java-对象头详解
  19. 常用的嵌入式硬件通信接口协议(UART、IIC、SPI、RS-232、RS-485、RS-422、CAN、USB、IRDA)(二)
  20. 2016猴年春联集锦

热门文章

  1. cocos2dx3.0关于实现椭圆运动
  2. 射频中的回波损耗,反射系数,电压驻波比以及S参数的含义
  3. Mac版Lync无法登陆问题(登录设置)
  4. 单片机4*4矩阵键盘的原理
  5. 西门子plc vb和c语言区别,西门子plc不同编程语言的区别
  6. 扫描文件怎么设置到服务器,如何为扫描仪添加局域网功能
  7. VS2010 中文版本
  8. database2sharp mysql_Database2Sharp免费版
  9. ITF Demo代码(用VBScript构建的接口测试框架)
  10. FPGA实现短时傅里叶变换