IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 你想知道的IIC通讯! -> 正文阅读

[嵌入式]你想知道的IIC通讯!

目录

简述

(1)启动和停止条件

(2)数据传输格式

(3)应答(ACK)信号传达

(4)读/写操作

(5)I2C总线仲裁

(6)异常中断条件处理


简述

集成电路互连总线I2C用于连接嵌入式处理器及外围器件,是广泛采用的一种串行半双工传输总线标准。主动发起数据传输操作的I2C器件为主控器件。由飞利浦公司在上世纪八十年代发展,用于嵌入式处理器连接外围低速设备的一种通信总线。

IIC(Inter-Integrated Circuit(集成电路总线))_百度百科 (baidu.com)

I2C总线接口少,控制方式简单,器件封装紧凑,通信速率一般100kb/s、400kb\s,高速I2C速率可达3.4Mb/s以上。另外,I2C通信设备都有自己的地址,以确保数据传输的稳定性。

I2C总线仅两条信号线:数据线SDA,数据必须在时钟高电平期间保持稳定;时钟线SCL,为I2C通信提供时序服务,按位传输数据,正常的数据位转换必须是在时钟周期的低电平内发生。。一般嵌入式处理器供I2C总线接口四种模式:主发送模式、主接收模式、从发送模式和从接受模式。SCL和SDA与其他I1C总线处理器或设备同名端相连,在SCL和SDA线上要上拉电阻,大小由速度和容性负载决定一般在3.3K-10K之间。

软件IIC:软件IIC通信是指处理器采用两个I/O端口模拟出来的IIC,用软件控制管脚状态以模拟I2C通信波形,软件模拟寄存器的工作方式。
?
硬件IIC:硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,硬件(固件)I2C是直接调用内部寄存器进行配置。效率相比,硬件IIC高于软件IIC。

关于I2C操作时序,以下通过STM32驱动展示:

(1)启动和停止条件

SCL和SDA两信号线同时拉高后,SDA在SCL信号保持高电平期间由高电平转换为低电平,表示启动总线操作,起始信号。

void IIC_Start(void)//起始信号
{
    SDA_OUT(); ? ? //sda信号线输出模式,
    IIC_SDA=1;   ? //时钟线、信号线拉高       ?
    IIC_SCL=1;  
    delay_us(4);
    IIC_SDA=0;   ? //START:when CLK is high,DATA change form high to low 
    delay_us(4);
    IIC_SCL=0;//钳住I2C总线,准备发送或接收数据 
}

类似,A在SCL信号保持高电平期间由低电平转换为高电平,表示停止总线操作,停止信号。SDA和SCL信号线,由低电平转换为高电平,总线工作停止,恢复为空闲状态。

void IIC_Stop(void)//停止信号
{
    SDA_OUT();  //sda线输出
    IIC_SCL=0;
    IIC_SDA=0;  //STOP:when CLK is high DATA change form low to high
    delay_us(4);
    IIC_SCL=1; 
    IIC_SDA=1;  //发送I2C总线结束信号
    delay_us(4);                             ?  
}

(2)数据传输格式

对于从设备,I2C通信设备一般在出厂时设定了器件的七位从地址(address)

其写地址为 ( address<<1 ),读地址为 ( address<<1 ) + 1 。 而若为八位地址,则一般器件地址就表示写地址。

数据位传送时,保持高位在前,低位在后。I2C总线通信时可分为单字节传输和多字节传输,单字节和多字节其实本质上没有什么区别,无非就是停止位后移,在每个数据字节传输完毕时,给予应答信号作为双方通讯确定标志。

通信起始信号发出,主发送设备发出从地址设备七位地址,选中从设备,接着发出一位读/写位,表示操作类型。

I2C通信数据量:Trans_data = Start (起始)+ n * Bytes(数据)+ n * ack(应答) + Stop(停止)

(3)应答(ACK)信号传达

主设备每对一字节发送,会停下来发送等待应答信号,就好比聊天时,等待对方回应,确定对方的在线状态。

//等待应答信号到来
//返回值:1,接收应答失败  ; 0,接收应答成功
u8 IIC_Wait_Ack(void)
{
    u8 ucErrTime=0;
    SDA_IN(); ? ?  //SDA设置为输入,接收从设备信号 ?
    IIC_SDA=1;delay_us(1);   ? 
    IIC_SCL=1;delay_us(1);   
    while(READ_SDA)
    {
        ucErrTime++;
        if(ucErrTime>250)
        {
            IIC_Stop(); ? //接收失败,判定设备离线,结束通信
            return 1;
        }
    }
    IIC_SCL=0;//时钟输出0    ? 
    return 0; ?
} 

ACK信号出现在SCL信号的第九个时钟脉冲上,有效应答ACK在SDA上呈现低电平。

//产生ACK应答
void IIC_Ack(void)
{
    IIC_SCL=0;
    SDA_OUT();
    IIC_SDA=0;
    delay_us(2);
    IIC_SCL=1;
    delay_us(2);
    IIC_SCL=0;
}
//不产生ACK应答       ? ?
void IIC_NAck(void)
{
    IIC_SCL=0;
    SDA_OUT();
    IIC_SDA=1;
    delay_us(2);
    IIC_SCL=1;
    delay_us(2);
    IIC_SCL=0;
}   

(4)读/写操作

以写入数据为例示图:

?

?发送模式下,数据发送后,I2C接口将处于等待状态,SCL线保持为低电平,直到有新数据写入发送寄存器,SCL线才被释放,继续发送数据。

//IIC发送一个字节
//返回从机有无应答
//1,有应答 ;0,无应答           ?
void IIC_Send_Byte(u8 txd)
{ ? ? ? ? ? ? ? ? ? ? ? ?
 ?  u8 t; ? 
    SDA_OUT();   ? ?
 ?  IIC_SCL=0;//拉低时钟开始数据传输
 ?  for(t=0;t<8;t++)
 ?  { ? ? ? ? ? ? ?
 ? ? ?  IIC_SDA=(txd&0x80)>>7;
 ? ? ?  txd<<=1;     ?
        delay_us(2); ? 
        IIC_SCL=1;
        delay_us(2); 
        IIC_SCL=0;  
        delay_us(2);
 ?  }    
}    ? ?

接收模式下,I2C接口接收到数据后,将处于等待状态,直到接收寄存器内容读取后,才释放SCL信号。

(5)I2C总线仲裁

I2C总线属于支持可多主多从的总线,允许拥有一个或多个主发送设备和若干从设备,因此,在多主多从情况下,对于总线的仲裁是不可或缺的。

总线在被启动后,没发送一个数据位时都要对自己的输出电平进行检测,若检测到电平和自己发出的电平相同,就会继续占用总线。仲裁发生在SCL为高电平期间。

另外,总线仲裁遵循低电平优先原则,I2C总线仲裁机制是靠自身接口的特殊结构实现。

(6)异常中断条件处理

没有从设备对主机发出的地址进行确认时,SDA线将被拉高,主控器件将发出停止信号终止传送。

根据IIC协议,IIC从机可以在通讯过程中通过拉低SCL线迫使主机进入等待状态,当从机准备好之后再释放SCL线继续数据传输,SCL被拉低进入中断,需外部操作释放。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:27:45  更:2022-09-04 01:30:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:55:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码