I2C协议简介
主从芯片如何传输数据
AT24C02是一个存储芯片,需要把数据从ARM板发给AT24C02,也需要从AT24C02读取数据。
I2C是一个主从结构,Master发起传输,slave接收或回应
一主多从:如何选在哪个从芯片呢?每个从芯片都有设备地址,设备地址各不相同,这些地址都是在芯片里写死的。
设备地址是7位,先传输地址的最高位MSB。
SCL为低电平时,SDA可变化
SCL为高电平时,SDA不可变。
问:如何在SDA上实现双向传输?
主从设备里面必然有两个引脚,发送引脚和接收引脚。
1)主设备发送时,从设备不应该发送。
可以通过SCL区分控制。
2)主设备发送时,从设备的发送引脚不影响SDA上传输的数据。同样从设备发送时,主设备的发送引脚不要影响SDA上传输的数据。怎样做到呢?
如上图所示,使用开极电路。
使用一真值表来表示A、B以及SDA引脚电平状态。
1)当A为低电平时,主设备里的三极管不导通。B为低电平时,从设备里的三极管也是不导通的。那么此时SDA引脚的电平状态是什么?
如果没有接那个上拉电阻,那么SDA引脚是出于悬空状态的,悬空引脚的电平状态是无法确定的,这也是为什么加上上拉电阻的原因。加上上拉电阻后,此时SDA引脚电平的状态是由上拉电阻决定的,为1。
2)当A为低电平时,主设备三极管不导通。B为高电平时,从设备的三极管导通,因此SDA引脚的电平为低电平。
后面两种情况的分析,和上面两种情况的原理是一样的,在此不再赘述。
从上面分析可以看出,
1)芯片不影响数据线上即SDA上的数据,只要使这个芯片不驱动三极管即可。
2)要使SDA引脚上电平为高电平,不要驱动主从设备任意的三极管
3)要使SDA引脚上电平为低电平,驱动主从设备上的任意一个三极管即可。
举个例子:
主设备发送8bit数据给从设备
问题:SCL是不是一直由主控芯片来决定?
答案:不是的。第9个时钟以后,如果某一方(比如说,我现在还忙不过来,再等一会儿),它可以一直把SCL拉低。当SCL为低电平时,主从芯片都不应该使用I2C总线。
SCL为低电平时,表示大家都在忙,当变为高电平时,再来操作。
注意:对于I2C协议,它只能规定如何传输数据,这个数据是什么含义,它完全不能控制。数据的含义由设备决定。
最新文章
- npm中package.json详解
- URAL 1303. Minimal Coverage(DP)
- 从SQLSERVER/MYSQL数据库中随机取一条或者N条记录
- 对TCP说三道四
- iOS NSURLConnection 和 dispatch_async 错误的使用方法,导致回调方法无法调用
- ABAP RFC远程调用
- 目标检测的图像特征提取之(二)LBP特征
- js方法重载
- javascript——归并方法
- Windows XP CD 函数不正确
- nodejs实现本地上传图片并预览功能(express4.0+)
- coursera普林斯顿算法课part1里Programming Assignment 2最后的extra challenge
- 【转】ret,retf,iret的区别
- Entity Framework Core系列之DbContext(修改)
- 探索JavaScript中Null和Undefined的深渊
- Head First Python-python面向对象
- 微信小程序中的组件使用1
- 获取mssqlserver数据库表的字段名称,字段说明,数据类型,主键等表的信息
- python 使用jinjia2 生成文件的空格处理
- Reflux系列01:异步操作经验小结
热门文章
- Vue实际中的应用开发【分页效果与购物车】
- SpringBoot集成Spring Security(7)——认证流程
- 2018-2019-2 20162329 《网络对抗技术》Exp7: 网络欺诈防范
- 错误:PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。";+文件路径";的解决方案
- Editor模式下实例化Prefab
- Idea java 中导包路径分析
- 大数据基础总结---HDFS分布式文件系统
- 蒙特卡罗方法、蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)初探
- SQL Date 时间类型处理
- Libs - 软件下载网站