一、I2C介绍

I2C总线是一种半双工、双向二线制同步串行总线。

全双工:两条线可以同时收发; 半双工:两条线不可以同时收发。同步通信:同步通信就是主机在进行通信前要先建立同步,即要使用相同的时钟频率,发送方的发送频率和接受方的接受频率要同步。除了时间频率的不同外,异步通信和同步通信之间的区别还是发送数据的表示形式,异步通信一般发送单位是字符,同步通信发送单位是比特流(数据帧),但是这不是绝对的,异步通信有时也使用帧来通信。

I2C 总线传输数据时只需两根信号线:双向数据线 SDA、双向时钟线 SCL

二、连接方式:

注:通过上拉电阻拉高,两根线默认状态下都是高电平。

三、时序:

起始条件:时钟线(SCL)电平保持高电平不变,数据线(SDA)从高电平向低电平跳变;

停止条件:时钟线(SCL)电平保持高电平不变,数据线(SDA)从低电平向高电平跳变;

周期:两条红线之间的部分为一个周期,在SCL为高电平的时段,读取SDA的数据;

ACK(应答位):SDA低电平为应答信号。因为SDA默认是高电平信号,应答为将高电平拉低。

四、协议

1、单字节读:(读是1,写是0)

主机发送一个起始信号,然后发送一个七位的设备地址和一个写的方向位。因为一个设备有很多寄存器,要告诉设备读哪个寄存器。等从机设备应答(ACK)后,主机在发送一个八位的寄存器地址,从机在进行应答。之后,主机发送起始信号和七位的设备地址+读的方向位,从机给一个应答和八位的数据。最后,主机回一个非应答和停止信号。

2、多字节读

多字节读与单字节读的区别在于:读完一个字节之后主机给一个应答信号,直到主机发一个非应答和停止信号之后结束。

3、单字节写

前面部分和“读单字节”类似,主机先发送一个起始信号,然后发送一个七位的设备地址和一个写的方向位。从机给一个应答之后,主机发送一个寄存器地址(八位),从机进行应答。之后(有区别的部分),主机写入八位数据,从机进行应答,然后主机发送停止信号后结束。

4、多字节写:

多字节写与单字节写的区别在于:多字节写一个字节之后,从机进行应答,直到主机发送停止信号之后结束。

注:一般情况下地址都会递增,比如第一次写入的地址是01,那么下次就是02,接下来就03……

五、RTT访问I2C总线设备

1、查找 I2C 总线设备

2、数据传输

#define RT_I2C_WR 0x0000
#define RT_I2C_RD (1u << 0)struct rt_i2c_msg
{rt_uint16_t addr;//从机地址rt_uint16_t flags;//读1,写0rt_uint16_t len;//传递数据的长度rt_uint8_t  *buf;//传递数据的首地址
};
rt_size_t rt_i2c_transfer(struct rt_i2c_bus_device *bus,struct rt_i2c_msg         msgs[],rt_uint32_t               num)//num是指msgs[]数组的个数。

RT_thread I2C设备(手把手教学)相关推荐

  1. rtthread studio与正点原子apollo(9)--I2C设备之IO扩展

    rtthread studio与正点原子apollo[9]--I2C设备之IO扩展 前言 一.I2C总线接口简介 二.PC8574简介 三.访问I2C设备 四.I2C设备使用实践 五.IIC设备实例 ...

  2. linux下i2c设备驱动程序,Linux I2C 设备驱动

    I2C 设备驱动要使用 i2c_driver 和 i2c_client 数据结构并填充其中的成员函数.i2c_client 一般被包含在设备的私有信息结构体yyy_data 中,而 i2c_drive ...

  3. linux 脚本给设备节点权限,[Linux] I2C设备读写及文件节点创建

    Linux Kernel Version:3.0.35 Platform:Freescale DSA2L 通过I2C读取VGA屏的EDID信息(主要是分辨率),解析后喂给CH7036芯片(LVDS转V ...

  4. Linux I2C子系统分析-I2C设备驱动

    接下来以一个实际的例子来看I2C设备驱动,就以drivers/i2c/i2c-dev.c为例. 先看它的初始化和注销函数 [cpp] view plaincopy static int __init  ...

  5. linux i2c 设备节点读写

    最近需要操作24C02,封装了一下函数方便以后操作. 参考链接: https://my.oschina.net/handawei/blog/68526 http://blog.csdn.net/one ...

  6. 嵌入式Linux中I2C设备驱动程序的研究与实现

    I2C是"Inter Integrated Circuit Bus"的缩写,中文译成"内部集成电路总线", 它是Philips 公司于20 世纪80 年代研发成 ...

  7. 启明云端分享|Linux系统下如何调试I2C设备

    提示:Linux系统中,一些传感器通常挂载在I2C总线上,比如RTC和CSI等.我们在调试这些设备的时候,就需要了解Linux系统中操作I2C总线的方法.本文将详细介绍在Linux系统中如何调试I2C ...

  8. 用户空间访问I2C设备驱动

    2012-01-11 15:33:43 标签:Linux I2C 字符设备 设备驱动 用户空间 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...

  9. 手把手教你写Linux I2C设备驱动

    手把手教你写Linux I2C设备驱动 标签:Linux 设备 驱动 详解 i2c 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http:/ ...

最新文章

  1. jquery.dragsort.js 实现拖拽过程遇到的问题
  2. python编程入门到实践 百度云-python网络爬虫从入门到实践pdf
  3. linux 进程间通信 dbus-glib【实例】详解三 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象、object) 等 )(附代码)
  4. mysql中的count函数和sum函数如果条件不符合返回什么
  5. 移动Exchange2007 CCR邮箱存储路径
  6. 笨办法学python3_月底送书!入门Python都在学的“笨办法”,出进阶篇了!
  7. Caffarelli 关于自由边界正则性的论文C1
  8. android权限检查
  9. python json()是什么函数_python 处理 json 四个函数dumps、loads、dump、load的区别
  10. 商品管理系统数据库设计--SQL Server
  11. Windows 10 office开机自启白页关闭,只需三步轻松关闭(亲测可用)
  12. linux 锐捷 自动,Ubuntu下锐捷自动认证设置
  13. LTE相关协议2——下行峰值速率计算
  14. 三层交换 VLAN 互访配置
  15. ASR_intern_summary
  16. 秘宝 | 将体育赛事结合区块链 数字藏品新风向
  17. Gradle sync failed: No variants found for ‘:app‘. Check build files to ensure at least one varian
  18. 吴恩达机器学习 EX7 第二部分 主成分分析(PCA)
  19. 浮点数存储方式理解,浮点数和整数之间的转换
  20. Java基础语法(二)

热门文章

  1. Win32 Api函数
  2. [名词解释:竞业禁止]
  3. 关于加密技术分类的说明(密码学基础)
  4. 提高网站Alexa排名的正确方法
  5. Maven compile 编译后Error:(8,31) java: 程序包com.sun.istack.internal不存在 Error:(318,57) java: 找不到符号的解决办法
  6. 【程序员必备】免费常用API收藏
  7. 全文检索工具Lucene入门教程
  8. 三轴桁架机械手控制系统 用于数控车床自动上下料
  9. ​​巨头抱团、新锐崛起,短视频时代「本地生活服务」起硝烟
  10. POJ1151 Atlantis(线段树,扫描线,离散化,矩形面积并)