第二天:IIC总线协议

一、IIC 总线协议

IIC(Inter-Integrated Circuit)总线协议是一种用于短距离通信的串行总线协议,广泛应用于嵌入式系统和微控制器的内部通信,另一种写法是I²C总线协议。它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。

IIC总线协议有很多的特点,目前应用十分广泛。首先是双线制通信,IIC协议使用两根线进行通信,SDA(Serial Data Line)数据线,用于传输数据;SCL(Serial Clock Line)时钟线,用于提供同步信号。其次是支持多个主从设备,IIC总线允许多个主机设备(Master)控制总线。主机负责生成时钟信号,并向从设备发送命令。同样的I²C可以连接多个从设备(Slave)。每个从设备都有一个唯一的地址,主机通过该地址与特定从设备进行通信。IIC使用7位或10位地址来标识每个从设备,7位地址可以支持最多127个从设备,而10位地址可以支持最多1023个从设备。再其次是数据传输方式,IIC总线的数据传输是基于字节(8位)的,每次传输一个字节,数据从主机传输到从设备或从设备传输到主机。最后,IIC支持多种数据传输速度,常见的速度模式有标准模式、快速模式、高速模式等。

|------------------------|---------|
| 模式 | 传输速度 |
| 标准模式(Standard Mode) | 100kb/s |
| 快速模式(Fast Mode) | 400kb/s |
| 增强快速模式(Fast Mode Plus) | 1Mb/s |
| 高速模式(High Speed Mode) | 3.4Mb/s |
| 极速模式(Ultra-FastMode) | 5Mb/s |

表 6.1 IIC协议不同模式下传输速度汇总表

I²C协议的通信过程主要分为四个部分。分别为启动条件、地址传输、数据传输、停止条件。

启动条件:通信开始时,主机通过将SDA线从高电平拉低到低电平来发出启动信号(SDA下降沿,SCL保持高电平)。

|---------------------------------------------------------------------------------------------|
| 图1 IIC开始/停止信号时序图 |

地址传输:在启动条件后,主机发送一个包含从设备地址和读/写位的数据字节。根据从设备的应答,通信继续进行。

数据传输:数据通过SDA线传输,每次传输8位(1字节)。SDA在SCL低电平时改变数据,在SCL高电平时保持数据,每个SCL脉冲的高电平传递1位数据。每次字节传输后,从设备或主机会产生一个应答信号(ACK),确认数据的接收。数据的先后顺序为高位在前 。

|------------------------------------------------------------------------------------------|
| 图2 IIC数据传输时序图 |

停止条件:通信结束时,主机通过将SDA线从低电平拉高到高电平,发出停止信号,表示总线的释放(SDA上升沿,SCL保持高电平)。

IIC协议的优势有很多。如其连接简单,由于只需要两根线,硬件连接简洁,降低了布线成本。并支持多设备,通过地址机制,IIC可以连接多个设备,节省了主板上的引脚数量。IIC协议的实现成本较低,适合用于低功耗的设备。IIC适用于芯片间的短距离通信,如主板上的传感器、存储器等外围设备。

此外,IIC协议也有一些局限性。如通信距离短,IIC的通信距离通常较短,适用于PCB板内或近距离设备间的通信。数据传输速率较低,尽管IIC有不同的传输速率,但相比于SPI或UART等其他串行通信协议,IIC的传输速率较低。

二、IIC设备-OLED屏

OLED屏幕(Organic Light Emitting Diode,有机发光二极管屏幕)是一种基于有机材料的自发光显示技术。OLED 屏幕的基本工作原理基于有机发光二极管(OLED)技术。OLED 屏幕由多个像素(每个像素由红、绿、蓝三种子像素组成)组成,每个子像素都由一个微小的发光二极管单元构成,依靠有机材料的电致发光效应发光。OLED屏幕的工作过程涉及电致发光效应。当电流通过 OLED 器件时,阴极(负极)注入电子,阳极(正极)注入空穴,电子和空穴在有机发光层内复合,释放出光子(光)。

OLED屏幕共有四个引脚,分别是VCC电源、GND地、SDA数据线、SCL时钟线,将VCC电源连接到开发板电源,将GND地连接到开发板接地端,将SDA数据线连接到开发板SDA,将SCL时钟线连接到开发板SCL。

|------------------------------------------------------------------------------------------|
| 图3 OLED显示屏实物图 |

三、IIC实验

用STM32CubeMX启用IIC1,并生成Keil5工程。

首先添加两个.c/.h文件到工程中,然后修改主函数。main.c主函数如下所示,编译后0错误0警告。

cpp 复制代码
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  /* USER CODE BEGIN 2 */
	OLED_Init();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {		
		OLED_ShowString(0,0,(uint8_t *)"HelloWorld!",2);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
相关推荐
CQ_YM4 小时前
51单片机(3)
单片机·嵌入式硬件·51单片机
范纹杉想快点毕业4 小时前
C语言100个经典编程练习题(完整标题+清晰排版)
运维·c语言·单片机·嵌入式硬件·算法
北京盟通科技官方账号4 小时前
Windows 平台 EtherCAT 实时控制:从抖动抑制到虚拟化架构解析
stm32·单片机·嵌入式硬件
EVERSPIN4 小时前
高性能32位MCU微控制器数字电源参考方案
单片机·嵌入式硬件·mcu微控制器·32位微控制器·32位mcu、
代码游侠5 小时前
学习笔记——DS18B20 温度传感器
笔记·单片机·嵌入式硬件·学习·51单片机
foundbug9995 小时前
基于STM32F103单片机实现汽车OBD诊断仪的开发方案
stm32·单片机·汽车
一枝小雨5 小时前
【OTA专题】 20 上电立即跳转:加快MCU启动速度
stm32·单片机·嵌入式·ota·bootloader·加速启动
VekiSon5 小时前
51单片机——DS18B20 温度传感器
单片机·嵌入式硬件·51单片机
chao1898445 小时前
基于51单片机的红外遥控器实现方案
单片机·嵌入式硬件·51单片机