模拟I2C协议学习点滴之原理框架

I2C是一种串行总线协议。 目前几种常用的串行总线有UART、SPI和I2C协议。UART协议的总线只有两条,发送(Transmit:TX)和接收(Receive:RX),没有时钟信号,这就要求两位数据的间隔要相同,它传送数据有严格的规定,每个数据以相同的位串形式传送,每个位串由起始位、数据位、奇偶位校验和停止位组成。SPI有三线和四线模式,四条总线分别为SCLK(时钟)、MISO(主器件数据输入,从器件数据输出)、MOSI(主器件数据输出,从器件数据输入)、SS(从器件使能信号),SPI总线由主机提供时钟,为同步通信,有两条总线进行数据传输,可以同时进行收发数据,为双工模式。三线不包含SS信号,其相应的数据传输,根据时钟极性和时钟相位的不同有四种情况,其传送数据的格式则与I2C基本类似。I2C总线只有两条,SDA(数据传输)、SCL(时钟),需要双向IO口支持,而且需要上拉电阻的协助,因此狂干扰能力弱,通常用于同一板子上芯片间的通信。

硬件结构:每一个I2C总线器件内部的SDA,SCL引脚结构一样,引脚的输出驱动与输入脉冲连在一起,输出为漏极开路的场效应管,输入为一只高输入阻抗的同相器。SCL和SDK借助上拉电阻行成“线与”关系,引脚在输出信号的同时还将引脚上的电平,检测是否与刚才输出一致。为“时钟同步”和“总线仲裁”提供硬件基础。时间同步的实现:可以在应答信号后使SCL延长低电平时间的方法来通知主机。SCL线上的低电平时间是由时钟低电平最长的器件决定;高电平时间是由时钟高电平最短的器件决定。从而实现时钟同步。

数据传输:主机发送数据传输流程:主机检测到总线处于空闲状态,发送启动信号S(数据线电平由低电平变为高电平);主机发送一个命令字节,该命令字节由7位的外围器件地址和1位读/写控制位(R/W=0);相应的从机收到命令字节后,向主机发送应答信号ACK=0(数据线上为低电平);主机收到从机的应答信号后开始发送下一个数据字节;当主机发送最后一个数据字节并收到从机的ACK时,通过向从机发送一个停止信号P(数据线电平由低电平变为高电平)结束本次通信并释放总线。从机收到信号P后也退出通信。

主机接收数据流程:主机发送启动信号,接着发送命令字节(R/W=1);对应的从机收到地址字节后,返回一个应答信号并向主机发送数据;主机收到数据后向从机反馈一个应答信号;从机收到应答信号后再向主机发送一个数据;主机完成接收数据后,向从机发送一个非应答信号(ACK=1),从机收到应答信号后,便不再发送数据;主机 发送应答信号后,发送一个停止信号,释放总线结束通信。Tips:主机所接收的数量由主机自身决定,发送非应答信号的作用:前一个数据接收成功;停止从机的再次发送。

以一个实例(开发板为EP2C8-2010)分析了解I2C协议基本功能:该例实现通过I2C总线对EEPROM(电可擦可编程只读存储器,掉点后数据不丢失在专用的设备商可擦除)的读写,重点在于对I2C总线协议时序的掌握,即用I2C总线要求的格式将输入写入之后读出。为实现该功能,完成两个器件间的通信,我们需要一个主机和从机,设计实例中的signal模块和EEPROM_WR模块模拟主机,EEPROM模块模拟从机。当写入数据时,EEPROM_WR模块从signal模块调取数据,通过I2C总线向EEPROM写数据。当读出数据时,EEROM_WR仍然通过SDA和SCL总线读出EEPROM中的数据,再输入给signal模块。开发板存在EEPROM器件,而signal模块可以通过创建IP核(基于ram)来实现,因此只有EEPROM_WR模块是要写入FPGA中的可综合模块,而signal模块和EEPROM模块都是 仿真模块。

每个正在接收数据的从机EEPROM在接到一个字节的数据后,通常需要发出一个应答信号。而每个正在发送数据的从机EEPROM在发出一个字节的数据后,通常需要接收一个应答信号。EEPROM读写控制器必须产生一个与这个应答位相联系的额外的时钟脉冲。在EEPROM读写控制器对EEPROM完成的最后一个字节产生一个高的应答位,这叫做非应答信号,随后给EEPROM一个结束信号。

由于开发板EP2C8-2010开发板采用的EEPROM是AT24C02,所以EEPROM_WR模块的编写应该满足AT24C02的写入和读取。如下图所示是AT24C02字节写入帧格式,第一位是启动信号,第2位到第8位是控制字节(从机地址:第2-5位是1010,6-8位是页地址),第9位是写操作(W/R置零),第10位是从机EEPROM给的应答信号0,第11-18位是存储单元地址,19位是应答信号0,第20-27位是写入的数据,第28位是应答信号,29号主机发送停止信号P。

而与之相对应的字节读取格式也大同小异,先写入控制字节和存储地址,然后是启动信号与控制字节信号,这时控制字节第八位(W/R置1),读取数据,完成读取时,主机将SDA拉高作为非应答信号,最后是停止位。

时间: 2024-10-10 23:45:54

模拟I2C协议学习点滴之原理框架的相关文章

模拟I2C协议学习点滴之复习三极管、场效应管;场效应管漏极开门电路

晶体三极管分为NPN和PNP型两种结构形式,除了电源极性的不同工作原理是大致相同的.对于NPN管,它是由2块N型半导体夹着一块P型半导体所组成的,发射区与基区之间形成的PN结称为发射结,而集电区与基区所形成的PN结称为集电结,三条引线分别为发射极(Emitter).基极(Base)和集电极c(Collector).b点电压高于e点电压时,发射结正偏,而当c点电压高于b点电压时,集电结反偏,集电结电源要高于基极电源.由于在制造过程中,发射区的自由电子浓度要多于集电区的电子浓度,因此在正偏电压下,自

GPIO模拟I2C

之前在学习I2C驱动,想了想应该先深刻理解下I2C协议.个人觉得理解I2C协议最好的方法就是实践,而最好的实践方式就是用GPIO来模拟I2C协议进行试验,直观深刻. 先看下I2C时序图: 根据时序图,用两个gpio分别模拟sda和scl即可.在这之前自然需要先对gpio进行输入输出的配置.这里只从写数据角度来描述这一过程.读数据同理即知. 先配置gpio,包括sda.scl.供电gpio等额外功能gpio. gpio_config(GPIO_SDA, GPIO_OUTPUT); gpio_con

《深度学习与计算机视觉算法原理框架应用》PDF+《深度学习之PyTorch实战计算机视觉》PDF

下载:https://pan.baidu.com/s/12-s95JrHek82tLRk3UQO_w <深度学习与计算机视觉 算法原理.框架应用>PDF,带书签,347页.<大数据架构详解:从数据获取到深度学习>PDF,带书签,373页.配套源代码. 下载:https://pan.baidu.com/s/1P0-o29x0ZrXp8WotN7GzcA<深度学习之PyTorch实战计算机视觉> 更多分享:https://pan.baidu.com/s/1g4hv05UZ_

I2C总线协议学习笔记 (转载)

1.I2C协议   2条双向串行线,一条数据线SDA,一条时钟线SCL.   SDA传输数据是大端传输,每次传输8bit,即一字节.   支持多主控(multimastering),任何时间点只能有一个主控.   总线上每个设备都有自己的一个addr,共7个bit,广播地址全0.   系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datasheet. 1.1 I2C位传输   数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit: 

分分钟教你学习一个新的框架--Photos FrameWork

相关链接:ios-深度解析二维码的生成与使用 swfit项目初体验Photo-Browser 一.点击查看大图 1.点击图片或按钮(点击查看大图按钮),modal出来一个控制器,显示大图片 2.怎么处理能让点击图片就能查看大图? 两种方法:1.给图片添加点按手势 2.给图片所在的view上添加 - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 2.1 添加点按手势 优点:适用于任何场景下,不受

(原创) 巩固理解I2C协议(MCU,经验)

    题外话:这几天天气突然转冷了.今天已是11月23日了,查查黄历,昨天(11月22日)刚好是小雪,一夜温度骤降,果然老祖先的经验有灵验!冬天来了,还是多加加衣服,注意保暖! 1.Abstract     前些天借用他人的一块MCS-51开发板来做实验,不想这块板子与我刚开始接触MCS-51的板子一样,实在是太亲切了!现在回过来看这块板子,功能算不上是太强大,麻雀虽小五脏俱全,该有的功能都有.于是又忍不住捣腾这块板子,倒不是写小程序一块,看着电路图,到处连线测试一下功能,从中体会下最初的学习

【转载】GPIO模拟i2c通信

I2C总线的通信过程(见图4-8)主要包含三个主要阶段:起始阶段.数据传输阶段和终止阶段. 1. 起始阶段 在I2C总线不工作的情况下,SDA(数据线)和SCL(时钟线)上的信号均为高电平.如果此时主机需要发起新的通信请求,那么需要首先通过SDA和SCL发出起始标志.当SCL为高电平时,SDA电平从高变低,这一变化表示完成了通信的起始条件. 在起始条件和数据通信之间,通常会有延时要求,具体的指标会在设备厂商的规格说明书中给出. 2. 数据传输阶段 I2C总线的数据通信是以字节(8位)作为基本单位

hadoop 学习笔记:mapreduce框架详解

hadoop 学习笔记:mapreduce框架详解 开始聊mapreduce,mapreduce是hadoop的计算框架,我 学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能是我做技术研究的 思路有关,我开始学习某一套技术总是想着这套技术到底能干什么,只有当我真正理解了这套技术解决了什么问题时候,我后续的学习就能逐步的加快,而学习 hdfs时候我就发现,要理解hadoop框架的意义,hdfs和mapreduce是密不

http协议学习系列

深入理解HTTP协议(转)  http://www.blogjava.net/zjusuyong/articles/304788.html http协议学习系列   1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列