安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

通信协议IIC协议原理和模拟IIC的实现步骤

11月11日 龙凤殿投稿
  1、IIC协议的由来
  IIC协议最早是在1982年由飞利浦公司设计开发的,它是一种两线制(SDLSCL)的串行通行方式,它也是主从机之间通信的方式,在今天也是被广泛的应用在很多的产品设备上。
  使用IIC协议进行数据通信的设备,它既可以作为主机又可以作为从机(支持多主多从),并且它是一种半双工的通信方式。
  另外,IIC协议还是带有总线仲裁功能的一种通信协议!
  2、IIC协议的一些参数
  IIC作为一种通信的协议,它是包含了几个相关的特征参数的,如下所示:
  注:IIC协议是一种半双工、同步的通信方式!
  3、IIC协议的通信速率
  IIC可以支持的通信速率范围较大,可以很好的满足多种设备对于不同的通信速度的要求,常见的IIC支持的速率有以下几个:1)普通模式(100kHz即100kbps)
  2)快速模式(Fm)(400kHz)
  3)快速模式(Fs)(1MHz)
  4)高速模式(Hs)(3。4MHz)
  5)超高速模式(UFm)(5MHz)
  当然,以上标明的速率一般指的是硬件IIC的速率,对于通过软件模拟实现的IIC,它的速率是受到所使用的CPU的处理速度和性能影响的,不可以一概而论!
  4、IIC协议的接口
  IIC协议的接口有两个:一个是用于时钟同步的时钟线SCL,另一个是用于数据收发的数据线SDL。一般我们也称为串行数据线SDA和串行时钟线SCL。
  连接到IIC总线上的设备通过这两根线互相传递信息,SDA和SCL都是双向线,可以互相之间进行信息的交互,但是这样的交互是半双工的,同一时刻只能有一个方向进行数据的操作,不能同时进行。
  IIC设备上的两根通信线一般示意如下:
  重要:一般IIC总线上都会接两个上拉电阻(如上图的R27、R28),阻值一般选择为4。7K,这两个上拉电阻有很大的用处:1)提高总线的驱动能力
  2)让总线在空闲时处于高电平,保证下次能够快速启动传输
  5、IIC协议的时序图
  IIC协议的一次通信过程如下图所示:
  IIC协议的每部分分解介绍如下:
  (1)IIC总线的起始信号
  IIC总线发送启动信号的时序如图:
  使用IIC协议进行通信是,首先要发送起始信号。
  起始信号是需要时钟线SCL稳定的保持在高电位,SDA由高电位变化为低电位。启动信号发送完成之后就可以进行数据的发送了。
  如果在一次通信过程中,有两台以上的设备同时发出了起始信号,都希望获得总线控制权的话,那么第一个发出起始信号的设备将获得总线控制权,作为主设备开始传输数据。这就是IIC的总线仲裁!
  注意:起始信号由主机负责产生。
  (2)停止信号
  IIC总线发送停止信号的时序如图:
  停止信号是在时钟线SCL为高电位的时候,数据线SDA由低电平变化为高电平。停止信号一般是在通信完成之后或者通信失败退出之后发送的。
  注意:停止信号由主机负责产生。
  (3)数据传输的有效性
  数据的传输是在发送完成了启动信号之后便可以进行数据的传输了。
  IIC数据传输的协议如下图:
  IIC协议要求在时钟信号SCL为高电位的期间,数据线SDA上的数据要保持稳定,不能发生变化(上图中1的位置)。只有在时钟信号SCL电位变低的时候,数据线SDA上的电平状态才能发生跳变。
  每一个数据的bit位传输需要一个时钟脉冲,一次传输最多是8bit。
  一个完整的传输过程的通信时序如图:
  通信开始时,最开始发送的都是地址帧。比如,一个7Bit的地址,首先发出的是最高位,即读写位(1读,0写),用于指示当前的通信是读操作还是写操作。
  (4)应答(ACKNACK)
  IIC协议帧的第9位是应答位(ACKNACK)。所有帧(数据或地址)都是一样的。一旦发送帧的前8位,接收设备就可以控制数据线SDA进行应答。
  如果接收设备在第9个时钟脉冲没有将SDA线拉低进行应答,则可能是接收设备没有接收到数据,或者出现错误。在这种情况下,主机需要决定该做什么样的处理(一般考虑重发或者退出)。
  注意:SCL时钟信号由主机负责产生。数据的发送是高位先发的!
  6、IIC总线的仲裁
  IIC总线仲裁指的是什么呢?
  IIC总线支持多个主机同时在总线上发送数据,但是同一时刻只能有一个主机传送数据。因此必须要通过某些手段来决定哪个主机获得总线的控制权,其它的没有获得主机控制权的设备就只能进行等待,直到获得总线控制权才能进行数据的传输。
  IIC总线仲裁的方式有两种:时钟同步、仲裁。它们分别如下:
  (1)时钟同步
  时钟同步是通过时钟线SCL来实现的。在时钟信号SCL由高到低的切换过程中,IIC器件会开始数自身的低电平周期。当主器件的时钟信号变为低电平的时候,它会使SCL线保持这个电平状态直到达到高电平。假如这个时候有另外一个器件的时钟依然是处于低电平的周期,这个时钟的低到高的变化不会改变SCL线的状态。
  因此,SCL线被有着最长的低电平周期的器件占有总线的控制权,而这个时候低电平周期短的器件会进入高电平的等待状态,直到当前的主器件释放总线控制权,自身能够获得总线控制权才会改变这些状态。
  时钟同步的时序示意图如下:
  (2)仲裁
  仲裁和同步一样,都是为了解决多主机情况下的总线控制冲突。仲裁的过程与从机无关。
  只有在总线空闲的时候主机才可以启动传输。两个主机可能在比较短的时间内在总线上同时产生一个有效的起始信号,这种情况下需要仲裁来决定由哪个主机占有总线控制权来完成数据传输。
  仲裁是逐位进行,在每一位数据的仲裁期间,当时钟线SCL为高电平时,每个主机都检查数据总线SDA上的电平是否和自己要发送的相同。
  这个过程需要持续很多位。理论上讲,如果两个主机所传输的内容完全相同,那么他们能够成功传输而不出现错误。但是,如果一个主机发送高电平但检测到SDA总线上的电平为低时,则认为自己仲裁失败并关闭自己的SDA数据线上的数据传输,而另一个主机则继续完成自己的传输。
  IIC总线仲裁的时序示意图如下:
  7、IIC通信的流程
  每个IIC设备都通过唯一的器件地址进行识别,根据设备功能,他们既可以是发送器也可作为接收器。通信的流程如下:1)IIC从机检测到IIC总线上的起始信号之后,就开始从总线上接收地址,之后会把从总线接收到的地址和自身的器件地址(通过软件编程)进行比较,一旦两个地址相同,IIC从机将发送一个确认应答(ACK),并响应总线的后续命令;
  2)发送或接收所数据;
  3)发送或接收完成之后,在收到应答信号ACK之后结束数据的传输。
  此外,如果软件开启了广播呼叫,则IIC从机始终对一个广播地址(0x00)发送确认应答。I2C模块始终支持7位和10位的地址。
  (1)有关地址帧的发送
  1)7位地址的IIC通讯流程
  7Bit地址的通信中,开始信号之后的第一帧是地址帧读写位,刚好是8Bit的数据,直接发送,等待从设备应答之后便可以进行数据的通信。
  2)10位地址的IIC通讯流程(主机发送)
  对于10bit地的址设备,需要使用两个帧来传输10Bit的slave地址。
  第一个帧的前5个bit固定为b11110xx,后接slave地址的高2位,第8位仍然是读写(RW)位,接着是一个ACK位,由于总线上可能有多个10Bit从设备地址的高2bit相同,因此这个ACK可能由多有slave设备返回。
  第二个帧紧接着第一帧发送,包含slave地址的低8位(7:0),接着该地址的slave回复一个ACK(或NACK)。
  注意:10bit地址的设备和7bit地址的设备在总线中是可以并存的,因为7bit地址的高5位不可能是b11110。
  3)10位地址的I2C通讯流程(主机接收)
  8、模拟IIC的实现
  注意:本文的代码仅用于个人学习使用,请勿擅自用于商业用途!
  模拟IIC的实现是使用单片机的IO口模拟IIC的协议时序,实现IIC的通信。既然要使用单片机的IO口进行模拟,所以需要先进行一些定义,如下:头条:嵌入式之入坑笔记defineIICWRITE0x00从机写入defineIICREAD0X01从机读取defineIICACK0I2C器件应答,拉低总线设置数据线SDAPB。6defineIICSDAINPUT(){GPIOBMODER(3(62));GPIOBMODER0(62);delayus(2);}defineIICSDAOUTPUT(){GPIOBMODER(3(62));GPIOBMODER1(62);delayus(2);}defineIICSDAHIGH(){GPIOBBSRRL16;delayus(2);}defineIICSDALOW(){GPIOBBSRRH16;delayus(2);}defineIICSDAIO()(GPIOBIDR(16))设置时钟线SCLPB。7defineIICSCLINPUT(){GPIOBMODER(3(72));GPIOBMODER0(72);delayus(2);}defineIICSCLOUTPUT(){GPIOBMODER(3(72));GPIOBMODER1(72);delayus(2);}defineIICSCLHIGH(){GPIOBBSRRL17;delayus(2);}defineIICSCLLOW(){GPIOBBSRRH17;delayus(2);}defineIICSCLIO()(GPIOBIDR(17))
  注:SDA、SCL修改为自己所使用的单片机IO进行设置即可。
  (1)发送IIC起始信号
  IIC起始信号的代码实现如下:头条:嵌入式之入坑笔记voidI2CStart(void){uint32IICSDAOUTPUT();IICSCLOUTPUT();IICSDAHIGH();IICSCLHIGH();Delay();num2000;用于判断IIC从机是否空闲while(num){if(IICSCLIO())根据IIC协议,时钟线拉高空闲{}}Delay();IICSDALOW();Delay();Delay();IICSCLLOW();Delay();}
  (2)发送IIC停止信号
  IIC停止信号的代码实现如下:头条:嵌入式之入坑笔记voidI2CStop(){uint32IICSDALOW();Delay();IICSCLLOW();Delay();IICSCLHIGH();Delay();num2000;while(num){if(IICSCLIO()){}}IICSDAHIGH();Delay();}
  (3)IIC的应答信号头条:嵌入式之入坑笔记IIC发送成功应答uint32tI2CSetACK(void){uint32uint32IICSCLLOW();Delay();IICSDAHIGH();IICSDAOUTPUT();Delay();IICSDALOW();Delay();IICSCLHIGH();num2000;while(num)需要判断IIC时钟是否拉高{if(IICSCLIO()){}}Delay();IICSCLLOW();Delay();}IIC发送失败应答uint32tI2CSetNoACK(void){uint32tack,IICSCLLOW();Delay();IICSDAHIGH();IICSDAOUTPUT();Delay();IICSCLHIGH();num2000;while(num){if(IICSCLIO())需要判断IIC时钟是否拉高{}}Delay();IICSCLLOW();Delay();}IIC获取应答信号uint32tI2CGetACK(void){uint32IICSCLLOW();Delay();IICSDAINPUT();Delay();IICSCLHIGH();Delay();if(IICSDAIO())读取SDA的电平状态ack1;不响应elseack0;响应Delay();IICSCLLOW();IICSDALOW();IICSDAOUTPUT();Delay();}
  (4)IIC读取一个字节头条:嵌入式之入坑笔记IIC读取一个字节uint8tI2CRead(void){uint8tt8;uint8tdat0;uint32IICSCLLOW();IICSDAINPUT();while(t){Delay();Delay();IICSCLHIGH();num2000;while(num)需要判断IIC时钟是否拉高{if(IICSCLIO())}IICSCLHIGH();Delay();dat1;if(IICSDAIO())IICSCLLOW();}Delay();}
  (5)IIC写一个字节头条:嵌入式之入坑笔记IIC写一个字节voidI2CWrite(uint8tdat){uint8tt8;uint32IICSDALOW();IICSDAOUTPUT();Delay();while(t){if(dat0x80)高位先发MSB{IICSDAHIGH();}else{IICSDALOW();}dat1;Delay();IICSCLHIGH();Delay();num2000;while(num)需要判断IIC时钟是否拉高{if(IICSCLIO()){}}Delay();IICSCLLOW();Delay();}Delay();}
  作者简介:
  本人95后技术男,从事嵌入式软件开发,专注于技术成长和技术分享。目标是每天进一步一点点,通过技术改变自己的生活,创造自己的美好未来!如果你也对嵌入式感兴趣,欢迎关注我呀!
  声明:
  本文作者:嵌入式之入坑笔记
  文章版权归作者所有,转载请注明出处!
投诉 评论 转载

意大利女排联赛第七轮完整赛果及即时排名北京时间11月17日凌晨,意大利女排联赛第七轮进行了激烈的争夺,朱婷所在的斯坎迪奇落败,科内利亚诺、诺瓦拉、蒙扎、基耶里、库内奥、佛罗伦萨、贝加莫获胜,完整赛果如下:一、……秋天干燥多喝汤,一身火气全败光,推荐3道鲜美汤,清火去燥秋天干燥多喝汤,一身火气全败光,推荐3道鲜美汤,清火去燥秋天了,本身就比较干燥,特别容易上火,然而还有一大批人,还喜欢吃辛辣刺激的,太过于进补的肉类,美其名曰贴秋膘。其实……龙口市缓缴政策送福利企业发展增动力为促进市场主体进一步发展,龙口市财税部门严格落实落细税费缓缴政策,确保符合缓缴条件市场主体应享尽享政策红利,为企业发展助力添翼。精准宣传,实现政策传达全方位缓缴新政……为啥你的iPhone信号差,试试这4个方法轻松解决如果你跟小马哥聊iPhone有哪些优点,小马哥可能需要思考一下。但要说到iPhone有啥槽点,那小马哥立马精神百倍(属于爱之深,责之切了)比如通话不能录音、微信不能双开、……世界杯冠军花落谁家?梅西看好巴西争冠,这一次他是对的?距离世界杯正式开赛还有一个多月的时间,关于世界杯冠军的热门球队究竟是哪支球队,也逐步上了热搜。阿根廷国家队队长梅西近日接受采访时表示,如果一定要让我选择,那么法国队和巴西队应该……给三岁前的孩子制作食物,牢记两不加一少加一适当加的原则文菁妈孩子在三岁之前的食物都建议单独的制作,不建议跟大人一起吃。因为孩子整个消化系统不像成人的,他的牙齿是小乳牙,切割的能力会比较弱,对于太硬的太大块的食物,他是没……通信协议IIC协议原理和模拟IIC的实现步骤1、IIC协议的由来IIC协议最早是在1982年由飞利浦公司设计开发的,它是一种两线制(SDLSCL)的串行通行方式,它也是主从机之间通信的方式,在今天也是被广泛的应用在……走进心里的经典台词美好爱情的经典台词:1、我在最好的时候碰到你,是我的运气《一代宗师》2、有你的日子,就是我要过的日子《只有芸知道》3、你保护世界,我保护你《少年的你》4……超模档案布兰卡帕迪拉(BlancaPadilla)异域风情的小编介绍的这位BlancaPadilla是来自西班牙的95后新生代超模。布兰卡帕迪拉有一张小方脸轮廓分明又极具异域风情,还带有几分中东风情,气质优雅慵懒又有一丝丝甜美随意……洗面奶推荐让你用后肌肤轻柔清爽而绝不绷紧,带来透亮光泽洗面奶推荐:让你用后肌肤轻柔清爽而绝不绷紧,带来透亮光泽IPSA柔滑净化洁面泡沫这款洗面奶适合皮脂分泌较多及容易泛油的肌肤使用,因为是泡沫质地的,对清除暗疮,多余油……一生善良,必有后福世间万事,皆有因果,善恶忠奸,必有所报。人行善,人不知,天知,会给好运和福报。人作恶,人不懂,天懂,会降霉运和灾祸。一生一世岁月长,人……白萝卜不能随便吃?医生忠告这4类人尽量少吃,要听劝都说萝卜是秋冬季节的宝,我国民间也有十月萝卜赛人参的说法。医药学家李时珍曾这样赞赏过萝卜:可生可熟,可菹可酱,可豉可醋,可饭。,是蔬中之最有利益者。但是你知道吗?白……
使命召唤战区2。0和现代战争2将加入足球明星初秋时节的国庆带给我的四个瞬间数字十年丨我国经济实现历史性跃升什么命就读什么书,真正聪明的人,悟透这几种智慧小小缘2016年,广东男孩吃炸生蚝,感觉味道很熟悉,找到失散13年CSGO2022安特卫普major的冠军是FaZe2022年上半年OPPO位居中国智能手机销量第一孙艺珍胖不少!美式打扮变酷girl,玄彬脸胖一圈也有幸福肥了30岁成功入职京东啦英国最大的射电望远镜将从太空播放节目76人鹈鹕交易曝光!哈登换状元秀2选秀权童年的色彩卖家该如何打造差异化爆款宦园吟防烟面具有保质期吗没有玻璃水可以用洗洁精吗数字赋能国有停车资产盘活运营,捷顺科技助力破解城市停车困局教大家下暴雨的朋友圈说说分享最强的招聘电话邀约话术俗语男无性铁无钢女无性如麻糖啥意简约百搭的帆布鞋如何穿出时尚气质感感恩母校让我飞翔作文700字爱己识己及人,我是一切根源

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利