IIC通信
1,物理层
1》IIC是一种两线串行的通信方式,SCL(时钟线),SDA(数据线)
2》IIC是一种高位先行的通信方式
3》IIC可以实现多主机多从机通信,IIC总线上每一个设备都有唯一的ID
4》IIC总线是飞利浦公司研发的总线协议
5》IIC总线上必须接两个上拉电阻,用于总线空闲时,将总线拉高
6》IIC总线上当两个设备同时发起IIC通信时,由总线仲裁决定谁掌握总线控制权
7》IIC总线的通信速率 标准100kbit/s 快速400kbit/s 高速3.4Mbit/s
8》IIC总线SCL的作用:当SCL为低电平时,SDA线上的数据无效,当SCL为高电平时,SDA线上的数据有效
9》IIC总线的时钟线一般由主机控制,并且IIC通信必须由起始信号开始,由停止信号结束
10》IIC总线通信具有应答机制,接收方应答,发送方等待应答
2,协议层
起始信号:SCL为高电平期间,SDA由高电平跳变到低电平,产生一个有效的下降沿
停止信号:SCL为高电平期间,SDA由低电平跳变到高电平,产生一个有效的上升沿
应答信号:SCL为高电平期间,SDA产生一个有效的低电平
非应答信号:SCL为高电平期间,SDA产生一个有效的高电平
等待应答信号:拉高SCL,等待SDA线上的高电平或低电平
发送数据信号:SCL为高电平期间,数据稳定,SCL为低电平期间,运行SDA数据发生改变
接收数据信号:拉高SCL,读取SDA线上的数据,拉低SCL,让从机准备有效数据
3,IIC信号产生的途径:
1》片上外设
2》利用GPIO口模拟IIC协议
4,总线仲裁
“低电平优先原则”------谁的低电平时间长,谁掌握总线控制,谁先发出低电平,谁掌握总线控制
5,EEPROM----电可擦除可改写存储器-----掉电保护功能
利用GPIO口模拟IIC协议代码篇:
drv_iic.c文件
#include "drv_iic.h"
void IIC_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_6;//SCL
GPIO_InitStruct.GPIO_Mode =GPIO_Mode_Out_OD;
GPIO_InitStruct.GPIO_Speed =GPIO_Speed_10MHz;
GPIO_Init(GPIOB,&