一、IIC概述 IIC(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器以及其外围设备,IIC也被成为I2C,其实两者是完全相同的,只是名词不一样而已。
它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。 二、IIC特点数据线SDA:数据线用来传输数据;时钟线SCL:时钟线用来同步数据收发 总线上每一个器件都有一个唯一的地址识别,所以我们只需要知道器件的地址,根据时序就可以实现微控制器与器件之间的通信。 数据线SDA和时钟线SCL都是双向线路,都通过一个电流源或上拉电阻连接到正的电压,所以当总线空闲的时候,这两条线路都是高电平。 总线上数据的传输速率在标准模式下可达100kbit/s在快速模式下可达400kbit/s在高速模式下可达3.4Mbit/s。 总线支持设备连接个数:同时支持多个主机和多个从机,连接到总线的接口数量只由总线电容是400pF的限制决定,如以下图所示:



注意:注意起始和终止信号都是由主机发出的,总线在起始条件之后,视为忙状态,在停止条件之后被视为空闲状态。
应答:每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据。 注意:从机应答主机所需要的时钟仍是主机提供的,应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期,低电平0表示应答,1表示非应答
- b#ifndef __IIC_H
- #define __IIC_H
- /* -----------------------------------------头文件-----------------------------------------*/
- #include "main.h"
- /* -----------------------------------------宏定义-----------------------------------------*/
- /* -----------------------------------------结构体定义-------------------------------------*/
- typedef struct
- {
- uint8_t DelayTick; //定义延时,以适应不同器件对速率的不同要求,具体值要在调试中确定
- uint8_t ADDR; //器件地址
- }IIC_TYPE;
- /* -----------------------------------------全局变量定义-----------------------------------*/
- /* -----------------------------------------应用程序---------------------------------------*/
- void IIC_Init(void); // IIC端口
- void IIC_Start(void); // 启动信号
- void IIC_Stop(void); // 停止信号
- void IIC_Wait_ACK(void); // 应答信号
- void IIC_NACK(void);
- void IIC_WriteByte(uint8_t txd);
- uint8_t IIC_ReadByte(void); // 读取数据
- uint8_t IIC_ReceiveData(uint8_t Ack); // 读取数据
- #endif
|