历史上的今天
返回首页

历史上的今天

今天是:2024年10月22日(星期二)

正在发生

2021年10月22日 | stm32专题十五:IIC通讯

2021-10-22 来源:eefocus

IIC

I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。

IIC总线物理层的特点:

       1 它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中,可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机;


       2 一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。数据线即用来表示数据,时钟线用于数据收发同步;


       3 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问;


       4 总线通过上拉电阻(通常4.7K)接到电源(2 ~ 15V)。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平;


       5 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线;


       6 具有三种传输模式:标准模式传输速率为100kbit/s ,快速模式为400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多IIC设备尚不支持高速模式;


       7 连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 ;

IIC总线协议层:

       IIC的协议定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。


接下来的这些内容全部来自于IIC总线协议:


1 数据有效性:


       由于连接到IIC总线上的设备工艺不同,逻辑0和逻辑1的电平不是固定的(由VDD决定),每传输一个数据位就产生一个时钟脉冲;


       SDA 线上的数据必须在时钟的高电平周期保持稳定。SDA线高/低电平状态只有在 SCL 线的时钟信号是低电平时才能改变;

2 起始和终止条件


       起始条件: SCL 线是高电平时 SDA 线从高电平向低电平切换;


       终止条件: SCL 是高电平时 SDA 线由低电平向高电平切换;

起始信号:


// step1 把两根总线拉高

SDA = 1;

SCL = 1;

 

// step2 等待电平稳定

delay(us);

 

// step3 依次拉低SDA SCL(中间要等待电平稳定)

SDA = 0;

delay(us);

SCL = 0;

delay(us);

终止信号:


// step1 两根线按时间轴拉低

SCL = 0;

SDA = 0;

 

// step2 等待电平稳定

delay(us);

 

// step3 按时间轴依次拉高

SCL = 1;

delay(us);

SDA = 1;

delay(us);

3 传输数据


字节格式


      发送到 SDA 线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制 每个字节后必须跟一个应答位。首先传输的是数据的最高位 MSB。如果从机要完成一些其他功能后 例如一个内部中断服务程序,才能接收或发送下一个完整的数据字节,可以使时钟线 SCL保持低电平迫使主机进入等待状态。当从机准备好接收下一个数据字节并释放时钟线SCL后,数据传输继续。


7位设备地址和8位设备地址


      比如EEPROM的设备地址为:1111 000,有时会写为0X78,这都表示7位设备地址。


8位设备地址:7位地址 + 读写位


      读地址:0X78 + 1 = (1111 000) << 1 + (0000 0001) = 0XF1 = 1111 0001


      写地址:0X78 + 0 = (1111 000) << 1 + (0000 0000) = 0XF0 = 1111 0000

4 数据应答


      数据传输必须带响应。相关的时钟脉冲由主机产生,在响应的时钟脉冲期间,发送器释放SDA线,此时被SDA被自动拉高。在响应的时钟脉冲期间,接收器必须将SDA线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平;


      通常,被寻址的接收器在接收到的每个字节后,除了用CBUS地址开头的报文,必须产生一个响应;


      当从机不能响应从机地址时,例如它正在执行一些实时函数不能接收或发送,从机必须使数据线保持高电平,主机然后产生一个停止条件终止传输,或者产生重复起始条件开始新的传输;


5 数据的传输格式

传输过程描述:


起始信号;

一个字节(7位地址 + 读写位)+ ACK;

一个数据字节 + ACK;

...

停止信号;

几种可能的数据格式:


1 主机向从机写入数据,整个的传输方向不变;

2 主机在发送第一个字节后,立即读从机。后面的字节传输方向发生改变,第一次的应答仍由从机产生,后续的应答信号全部由主机产生,当读取到指定个数的数据时,主机先发送非应答信号,然后发送停止信号。

3 复合格式


      传输改变方向的时侯,起始条件和从机地址都会被重复。但R/ W位取反。如果主机接收器发送一个重复起始条件,它之前应该发送了一个不响应信号。


      复合格式可以用于例如控制一个串行存储器(EEPROM),先写从机设备地址,然后在第一个数据字节期间,要写内部存储器的地址。再重复起始条件和从机地址后,数据可被传输。


复合格式的一般应用:


前面一般是7位设备地址+0(写方向),然后第一个数据字节(发送要读取的寄存器地址),这个地址会被EEPROM内部保存起来,然后重新发送起始信号,再写7位设备地址+1(读方向),接下来就可以读到数据。

6 数据位定义

推荐阅读

史海拾趣

思博科技(Cybermax)公司的发展小趣事

随着市场竞争的加剧,思博科技意识到只有不断创新才能在市场中立足。于是,公司加大了研发投入,不断推出具有创新性的产品。其中,一款名为“MaxPower”的高效能电源芯片在市场上引起了广泛关注。这款芯片不仅性能卓越,而且具有极高的能效比,为客户节省了大量能源成本。这一创新产品的成功推出,使思博科技在行业中树立了良好的口碑。

DILABS公司的发展小趣事

随着全球环保意识的提高,DILABS开始注重绿色生产。他们引入了先进的环保技术和设备,确保在生产过程中最大限度地减少废弃物和污染物的排放。同时,DILABS还积极推动电子产品的环保设计,帮助客户实现绿色采购和可持续发展。

Dino-Lite公司的发展小趣事

Dino-Lite公司在发展过程中,始终注重市场拓展和合作伙伴关系的建立。公司与多家知名企业建立了长期稳定的合作关系,共同开拓市场、分享资源。通过与合作伙伴的紧密合作,Dino-Lite公司的产品得以快速进入各个行业领域,并获得了良好的口碑和市场份额。

此外,Dino-Lite公司还积极参与国际展览和交流活动,展示公司的最新技术和产品。这些活动不仅提高了公司的知名度,也为公司带来了更多的商业机会和合作伙伴。

Bomar公司的发展小趣事

Bomar公司成立于1963年,最初是一家专注于石英晶体制造的公司。在当时的电子行业,石英晶体作为频率控制元件,对于无线通信和电子设备的稳定运行至关重要。Bomar公司通过不断的研发和技术创新,成功突破了石英晶振在宽频率范围内的高稳定性问题,满足了严格的FCC规范。这一技术突破使得Bomar公司的石英晶振在市场上获得了广泛的认可,并为公司的发展奠定了坚实的基础。

Emmoco公司的发展小趣事

在稳固了电子元器件和模块市场地位后,Emmoco开始寻求多元化发展。公司利用自身的技术优势和市场经验,逐步拓展产品线,涉足智能家居、物联网等领域。通过不断的技术创新和市场拓展,Emmoco成功实现了产品线的多元化,为客户提供更加全面和多样化的解决方案。

Alpha Industries公司的发展小趣事

为了提高生产效率和产品质量,Alpha Industries决定引入数字化生产线。通过与电子设备制造商合作,公司成功建立起一条自动化生产线,实现了从设计到生产的无缝对接。数字化生产线的建立不仅提高了生产效率,还降低了生产成本,使得Alpha Industries的产品更具市场竞争力。

问答坊 | AI 解惑

protel99se教程

学习PROTEL99se必备…

查看全部问答>

基于AT89S52单片机的LED点阵显示屏控制系统的设计.PDF

基于AT89S52单片机的LED点阵显示屏控制系统的设计.PDF…

查看全部问答>

2440开发板,液晶显示800*600问题

液晶显示问题。我买了快开发板,本来是1024*768分辨率的,根据网上资料,修改成800*600,但是整个WINDOWS界面只显示了屏幕的左上角,其他WINDOWS CE程序一切正常,不知道如何是好,希望各位能给电帮助。…

查看全部问答>

网络开发笔记6_伪动态网页

一 为什么说是伪动态     做网站的人知道动态网页常用的开发语是ASP.net、JSP、PHP。而这里我们是没法用上的,我们用的是cgi文件。   二 什么是CGI        Common Gate Interface(通用网关 ...…

查看全部问答>

STM8关于LIN总线的请教

大家好!      小弟现在遇到一个奇怪的问题。      硬件测试环境:板子是STM8S208,板子上有两个LIN接口,一个做主机,一个做从机,用一条串口线将两个口连接起来通信。       ...…

查看全部问答>

关于申请租借TI仿真器的问题

近几天一直在TI网站上瞎转悠,深为它的器件性能所引,在我提交的电源方案中(还没有完善)决定使用它的Piccolo CPU : _TMS320f28035,它可以由一块CPU担任所设想的从PFC到输出部分的、全部分的功率控制。     然而,搞这个没有个仿真器 ...…

查看全部问答>

如何使用 CCS 建一个 M3 的工程

如何使用 CCS 建一个 M3 的工程,一直在用 MDK,最近不得不熟悉 CCS ,不知道 CCS 要怎么建工程呢? 找到一个 PDF ,按照里边的步骤还是能编译,而且很慢,这样的工具怎么用呢? [ 本帖最后由 Study_Stellaris 于 2011-12-5 16:00 编辑 ]…

查看全部问答>

OMAPL138开发板无法连接上PC

在CCS3.3的开发环境下,拿TDS560仿真器连接omapl138的板子,在reset_TDS560USB_plus时出现如下错误:C:\\CCStudio_v3.3\\cc\\bin>dbgjtag -f brddat\\ccbrd0.dat -rv ------------------------------------------------------------------------ ...…

查看全部问答>

BeagleBone试用第一周 底板PCB--今天终于决定把板子拿去制了。到底如何不管他。

今天终于决定把板子拿去制了。到底如何不管他。 时间要紧。有错就改嘛。反正还是好同志。 希望大家支持,阿莫那里要求插孔都加大0.15MM 所以我的孔画的比较大。 有关硬件的资料: [ 本帖最后由 damiaa 于 2012-9-28 16:27 编辑 ...…

查看全部问答>

编译出错

Building configuration: project - Debug Updating build tree... Linking Error[e16]: Segment CSTACK (size: 0x32 align: 0x1) is too long for segment definition. At least 0x19 more bytes needed. The problem occurred while proces ...…

查看全部问答>