从IIC实测波形入手去理解IIC的通信原理
的朋友都知道IIC通信这个工具,但好多人只是会用,内部的原理不求甚解,或是想要了解其原理,但却对抽象的时序描述一头雾水。本文将从实测的IIC波形入手,带你看到真实的IIC样子,进而去理解IIC的通信原理。
首先复习一下IIC基础知识,这部分看不懂的请先带着疑问,然后我们通过分析IIC的真实波形,这些疑问可能就豁然开朗了~
IIC(Inter Integrated Circuit,集成电总线)是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟SCL 构成的串行总线,可发送和接收数据。在CPU(单片机)与IIC模块之间、IIC模块与IIC模块之间进行双向传送。
IIC是真正的多主机总线,(对比SPI在每次通信前都需要把主机定死,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被
起始和终止信号都是由主机发出的,连接到IIC总线上的器件,若具有IIC总线的硬件接口,则很容易检测到起始和终止信号
在起始信号后必须发送一个7位从机地址+1位方向位,用“0”表示主机发送数据,“1”表示主机接收数据。
每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据
注:实际使用中,一般是单片机作为主机,其它器件作为从机,单片机先向器件发送信息表示要读取数据,之后转变传输方向,器件发送数据到单片机。
使用IIC通信的IIC器件有很多,比如陀螺仪加速度计MPU6050,EEPROM存储芯片AT24C02等,通过IIC总线,可以与单片机之间进行数据传输。
也是用于读取IIC器件某个寄存器的数值,当某些数据一位字节不够表示,或有一组连续的数据需要读时,可以使用该模式。
IIC通信可以使用单片机自带的硬件IIC,它提供了固定的引脚接口和函数库。也可以自己通过软件编写来实现IIC时序,这时就可以任选引脚,也方便其它硬件平台的移植。
下面通过软件IIC的编写,从软件角度理解IIC通信逻辑。以下函数都是单片机在执行,即主机发出的动作,所以一定要从单片机的角度思考哦~
另外,不要看到程序就匆匆掠过,为帮助理解,我对代码进行了一定的注解,仔细分析每条代码,想想与IIC的逻辑如何对应起来,IIC逻辑还没懂的,读完本篇,分析过真实的IIC波形后,再来看看代码,会有不一样的体会。
该函数用在连续读取多个字节时,每读完一个字节(8位),产生回应,表示还要进行读,这时器件就可以继续发数据了。
当单片机不需要继续读,如连续读的最后一个字节,或只读一个字节,单片机发送非应答信号,这时器件以为单片机没有收到数据,接下来就不会再发数据了。
读取一个字节,也是分8次循环,产生8个时钟信号,并读取SDA的高低电平信号,最后,根据要不要继续读下一个字节,发送第9位的Ack或nACK。
下面这张图(请横屏观看)展示IIC读某个器件的寄存器的一个字节的真实波形(注:实际是读了2个不同寄存器的值,每个寄存器读了1个字节,所以,可以先只看前半部分哦~),我已对波形进行了详细的注解,并留意一下颜色区分。
这幅图中,单片机先产生起始信号,然后发送7位器件地址+1位写标志(绿色的0),并等待从机回应(从机拉低SDA表示收到数据),接着发送8位寄存器地址,并等待从机回应。然后,单片机先再次产生起始信号,发送7位器件地址+1位读标志(绿色的1),并等待从机回应。从机收到读的信号后,从机开始发送8位数据,主机接收到数据后,主机发送nAck不应答信号(图中的Ack(1),主机将SDA拉高,从机则认为主机刚才没有收到它发送的数据,从机将不再继续发送),接着主机发送结束信号,读取完成。
另外,SCL信号都是由单片机产生,SDA信号由单片机和IIC器件(从机)共同产生,当需要对IIC器件的寄存器写时,单片机产生SDA数据,当需要读取IIC器件的寄存器数据时,改变传输方向,IIC器件产生SDA数据。
是单字节读的波形,再来看看多字节的波形,前面的写器件地址、写寄存器地址1与单字节读一样,这张图只显示了后面不一样的部分,主要区别在于单片机接收到数据1后,产生低电平的应答,从而可以继续读取数据2。
注:以上的IIC真实波形,是使用是硬件IIC,自己编写的软件IIC测得的波形,可能在两个信号的前后延时时间上稍有差别,但整体的时序逻辑肯定是一样的。
对于寄存器的配置,也就是IIC的写寄存器操作,我就不放图了,参考的“常用的数据收发方式(时序)”以及的IIC读寄存器的真实波形,IIC的写寄存器的真实波形,应该可以脑补出哦,哈哈~
找了很多资料,包括厂家的资料及例程,都提到最后写入一个0x0,但是我发现写不写这个0,计算结果是不同的。 我尝试使用CRC中...
在运动障碍性疾病(Movement Disorders)中,帕金森病(Parkinson Disea....
如果需要显示的字少,点阵数据就少,将数据烧录到程序存储器即可。实现中文输入法,显示的字比较多,数据量....
SC1128芯片是面向电力线载波通信市场而开发研制的专用扩频调制/解调器电。由于采用了直接序列扩频....
超声波洁牙机在医疗领域已广泛应用。现国内外所用超声波洁牙机多采用模拟振荡电。存在如下缺陷:第一,振....
单片机作为智能控制芯片,在电子信息、自动控制的各个领域发挥着极其重要的作用。医疗仪器的设计和研制也越....
随着生活水平的不断提高以及城市老龄化比例的提高,医疗检测设备的家庭化逐渐成为了趋势。其中家用电子血压....
根据心电信号特征、生物信号处理系统和现代心电监护技术发展要求,本系统选用高速SOC系列单片机C805....
目前检测心率的仪器虽然很多,但是能实现精确测量、数据上传PC机并且具有声光报警等多种功能的便携式全数....
随着社会的不断进步,人们的健康意识不断增强,家庭刘硕和关昕保健仪器得到越来越广泛得应用。电刺激器是产生一序列电....
监护基站设备在正常工作状态下使用电池进行供电,因此在设计过程中尤其注意了低功耗的管理与控制。在不工作....
生物电技术是利用生物组织与器官的电特性及其变化规律提取与人体生理、病理状况相关的生物医学信息的检....
腰椎牵引器采用AT89C51单片机作为系统控制单元,利用其控制能力实现对牵引力进行实时检测并通过LE....
电子发烧友网为你提供STM32之EXTI——外部中断资料下载的电子资料下载,更有其他相关的电图、源....
电子发烧友网为你提供智能家居系统方案资料下载的电子资料下载,更有其他相关的电图、源代码、课件教....
电子发烧友网为你提供内含MCU功能的SoPC资料下载的电子资料下载,更有其他相关的电图、源代码、课....
电子发烧友网为你提供MDK412建立stm32f103工程编译里出现错误资料下载的电子资料下载,更有....
电子发烧友网为你提供六个方面了解嵌入式的硬件构架资料下载的电子资料下载,更有其他相关的电图、源代码....
电子发烧友网为你提供单片机与计算机,原来是这样资料下载的电子资料下载,更有其他相关的电图、源代码、....
电子发烧友网为你提供NUCLEO32-L432开发板评测,与以往的NUCLEO32开发板的区别资料下....
电子发烧友网为你提供单片机外部中断及红外遥控器解码资料下载的电子资料下载,更有其他相关的电图、源代....
电子发烧友网为你提供实现管脚电平数字逻辑功能和降低CPU负载资料下载的电子资料下载,更有其他相关的电....
电子发烧友网为你提供基于MSP430的太阳能智能邮箱设计(基本构成和BOM清单)资料下载的电子资料下....
电子发烧友网为你提供基于MSP430的太阳能智能邮箱设计(远程采集组件)资料下载的电子资料下载,更有....
电子发烧友网为你提供51单片机的引脚功能 AT89S52的引脚功能介绍资料下载的电子资料下载,更有其....
电子发烧友网为你提供MSP430总结:为什么要加密,如何加密?资料下载的电子资料下载,更有其他相关的....
电子发烧友网为你提供单片机的工作状态及其状态迁移资料下载的电子资料下载,更有其他相关的电图、源代码....
单片机的优缺点分别是什么? CPLD器件的优缺点有哪些? 为什么会说CPLD器件和单片机结合能优势互补? CPLD器件和...
ADS744的接口电和转换时间 ADS7822的接口电和转换时间 以ADS7822和ADS774为例,通过二者与AT89C51单片机的...
A/D 转换数据存储程序如何去设计? 怎样运用C语言去编写程序?请教一下有哪些方法可以将A/D 转换后的数据先进行处理后再存...
在雷达、等军事领域中,由于信号带宽宽(有时可能高于10MHz),要求的采样率高于30MSPS,分辨率大于10位。目前高速高分辨...
原理图是这样的,下载程序用串口下载一直连接不上芯片,boot怎么换都不行,求问题出哪里了! ...
本系统采用腔内压力记录法中的毛细管液压灌注法进行食管动力检测。四通道测压导管内注满蒸馏水后插入食管中....
系统工作时,首先对单片机编程,经过光电耦合器件控制正弦信号发生器发出多个频率(10kHz、50kHz....
本设计的控制主板具有很强的扩展性,通过增添模块和修改程序,可用于各种机器人开发和智能电制作,应用广....
寻迹机器人系统的控制核心,一般情况下以MSP430单片机片内的基本硬件资源为主,有必要时再扩展部分外....
智能清洁机器人测控系统主要包括控制器核心系统、传感器系统和驱动系统等。其原理如图1所示。基于清洁机器....
移动式机器人在各行各业具有广泛的应用,而轮式移动机器人由于具有结构简单、可控性强、成本低等优点,成为....
ARM与单片机有啥区别? 1、软件方面 这应该是最大的区别了。引入了操作系统。为什么引入操作系统?有....
初学者必知:ARM与单片机到底有啥区别? 1、软件方面 这应该是最大的区别了。引入了操作系统。为什么....
ARM与单片机有啥区别? 初学者必知:ARM与单片机到底有啥区别? 1、软件方面 这应该是最大的区别....
学完单片机,可以用它来干什么? 单片机,又称微处理器,它将一个系统所需要的RAM、Rom、CPU等相....
新手如何学习单片机,用那些软件模拟比较好? 首先来说,每一款单片机的编程软件都有软件仿真功能。我们可....
为了避免误把油门当刹车的操作,减少恶通事故发生,设计了基于车载CAN总线的智能刹车系统。该系统以....
PC机与单片机串行通信的实时数据处理该如何去实现? 下位机部分由哪些构成?主要负责什么工作?上位机部分(PC)又是由哪些...