《嵌入式系统原理与应用》 |(十二)IIC 知识梳理

系列索引:《嵌入式系统原理与应用》 | 嵌入式系统 重点知识梳理


 

目录

 

I2C的物理层接口(电平特性)及互联

I2C、SPI及UART三者之间的对比

I2C中的主从机、收发器的概念

I2C中的起始条件、停止条件、数据有效性及数据格式

I2C一次通信过程的组成及传输速率

STM32中I2C的特性

 

I2C的工作模式及其收发数据的过程

I2C常用库函数(初始化设置、起始与停止条件生成、收发数据集中断)


I2C的物理层接口(电平特性)及互联

I2C是IC器件之间互联的两线制总线规范,引脚少、硬件简单、易于建立、可扩展性强

通信方式同步半双工

I2C接口(两个 数据线和时钟线)

都是通过开路输出来控制数据或时钟线电平变化

I2C互连

 

I2C、SPI及UART三者之间的对比

 

IIC优点

仅用两根线就完成了数据传输

采用器件地址的硬件设置方法,通过软件寻址避免了像SPI那样的器件片选线寻址,显著地简化了微控制器和外围器件之间的连接,连接在同一条总线

要求被寻址的设备发回应答信息,这样可以提供相对可靠的系统

IIC缺点

仅能实现半双工通信

传输速率也相对有限

易受干扰,并且不检查错误

 

I2C中的主从机、收发器的概念

主机初始化发送、产生时钟和终止发送的器件,通常是微控制器

从机被主机寻址的器件;

发送器:本次传输中发送数据到I2C总线的器件,既可以是主机也可是从机,由通信过程具体确定;

接收器:本次传输中I2C总线上接收数据的器件,既可以是主机也可以从机,由通信过程具体确定;

 

I2C中的起始条件、停止条件、数据有效性及数据格式

I2C的位时序,包括起始条件、数据有效性、停止条件等。

起始条件(起始信号)

    当SCL为高电平时,SDA上由高到低的跳变。时钟线为高,数据线由高到低

停止条件(停止信号)。

    当SCL为高电平时,SDA上由低到高的跳变。时钟线为高,数据线由低到高

数据有效性

     SDA的数据线必须在SCL为高电平时内保持稳定,只能在SCL为低电平时改变。否则,会被误判为起始位或停止位。

数据格式

I2C上所有数据都是以一个字节(8 bit)为最小单位,按照高位(MSB)在前、低位(LSB)在后的顺序在SDA上传输。

    每当发送器发送完一个字节接收器必须发送一个应答位(ACK,Acknowledgement)来以确认接收器是否成功收到数据。

 

 

I2C一次通信过程的组成及传输速率

通信过程的组成

一次标准的I2C数据流通信,通常由 起始信号、从机地址传输、数据传输和停止信号组成。

传输速率

 I2C的标准传输速率为100Kbps快速传输可达400Kbps。目前,还增加了高速模式,最高传输速率可达3.4Mbps

 

STM32中I2C的特性

 STM32F103微控制器的I2C模块,连接微控制器和I2C总线,提供多主机功能,支持标准和快速两种传输速率

 

I2C的工作模式及其收发数据的过程

工作模式

所有的I2C可工作于主模式或从模式,可以作为主发送器、主接收器、从发送器或者从接收器;

收发数据过程

使用DMA的12C数据发送

        通过设置I2C_CR2寄存器中的DMAEN位可以使能DMA.只要I2C_SRI 寄存器中的TxE位被置位,数据将由DMA从预置的存储区装载进I2C_DR寄存器。

        为I2C的数据发送分配一个DMA通道,具体执行步骤如下:

●在DMA_ CPARx寄存器中设置I2C _DR寄存器地址。数据将在每个TxE事件后从存储器传送至这个地址。

●在DMA_CMARx寄存器中设置存储器地址。数据在每个TxE事件后从这个存储区传送至I2C_DR

●在DMA_CNDTRx寄存器中设置所需的传输字节数。在每个TxE事件后,此值将被递减。 

●利用DMA_CCRx寄存器中的PL[0:1]位配置通道优先级。

●设置DMA_CCRx寄存器中的DIR位,并根据应用要求可以配置在整个传输完成通过设置一半或全部完成时发出中断请求。

●通过设置DMA_CCTx寄存器上的 EN位激活通道。

        当DMA中设置的数据传输数目已经完成时,DMA控制器给I2C接口发送一个传输结束的EOT/EOT_1信号。在中断允许的情况下,将产生一个DMA中断。

使用DMA的I2C数据接收

        通过设置I2C_CR2寄存器中的DMAEN位可以激活DMA接收模式。每次接收到数据字节时,将由DMA把I2C_DR寄存器的数据传送到设置的存诸区。

        为I2C的数据接收分配一个DMA通道,具体执行步骤如下:

●在DMA_ CPARx寄有器中设置I2C_DR寄存器的地址。数据将在每次RxNE事件后从此地址传送到存储区。

●在DMA_CMARx寄存器中设置存储区地址。数据将在每次RxNE事件后从I2C_DR寄存器传送到此存储区。

●在DMA_CNDTRx寄存器中设置所需的传输字节数。在每个RxNE事件后,此值将被递减。 

●用DMA_CCRx寄存器中的PL[0:1]配置通道优先级。

●清除DMA_CCRx寄存器中的DIR位,根据应用要求可以设置在数据传输完成一半或全部完成时发出中断请求。

●设置DMA_CCRx寄存器中的EN位激活该通道。

当DMA控制器中设置的数据传输数目已经完成时,DMA控制器给12C接口发送一个传输结束的EOT/EOT_1信号。在中断允许的情况下,将产生一个DMA中断。

 

I2C常用库函数(初始化设置、起始与停止条件生成、收发数据集中断)

I2C_DeInit:将I2Cx的寄存器恢复为复位启动时的默认值。

I2C_Init:根据I2C_InitStruct中指定的参数初始化指定I2C的寄存器。

I2C_Cmd:使能或禁止指定I2C。

I2C_GenerateSTART:产生I2Cx传输的起始信号。

I2C_Send7bitAddress:发送地址信息来选中指定的I2C从设备。

I2C_SendData:通过I2C发送单字节数据。

I2C_ReceiveData:返回指定I2C最近接收到的字节数据。

I2C_CheckEvent:查询I2Cx最近一次发生的事件是否是I2C_EVENT指定的事件。

I2C_AcknowledgeConfig:使能或者禁止指定I2C的应答功能。

I2C_GenerateSTOP:产生I2Cx传输的结束信号。

I2C_GetFlagStatus:查询指定I2C的标志位状态。

I2C_ClearFlag:清除指定I2C的标志位。

I2C_ITConfig:使能或禁止指定的I2C中断。

I2C_GetITStatus:查询指定的I2C中断是否发生。

I2C_ClearITPendingBit:清除指定的I2C中断请求挂起位。

I2C_DMACmd:使能或禁止指定I2C的DMA请求。

 

 

 

 

 

 

发布了112 篇原创文章 · 获赞 975 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_41523096/article/details/103791353