I2C通信时序图解析

本文详细解析了I2C通信协议的起始信号、停止信号、发送和读取字节以及应答过程,结合OZ9350电源管理芯片的I2C写数据和读数据时序图,介绍了分析I2C时序图的步骤,帮助读者深入理解I2C通信。
摘要由CSDN通过智能技术生成

一、I2C协议简介

  I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地 使用在系统内多个集成电路(IC)间的通讯。 
  关于I2C协议的更多内容,可阅读《I2C总线协议》,本博文主要分析I2C波形图,对于I2C的基础知识不在做介绍。

二、I2C协议标准代码

2.1 起始信号&停止信号

  起始信号:当 SCL 线是高电平时 SDA 线从高电平向低电平切换。 
  停止信号:当 SCL 线是高电平时 SDA 线由低电平向高电平切换。

2.1.1 起始信号代码
void I2C_Start(void)
{
    I2C_SDA_High();     //SDA=1
    I2C_SCL_High();     //SCL=1
    I2C_Delay();
    I2C_SDA_Low();
    I2C_Delay();
    I2C_SCL_Low();
    I2C_Delay();
}
2.1.2 停止信号代码
void I2C_Stop(void)
{
    I2C_SDA_Low();
    I2C_SCL_High();
    I2C_Delay();
    I2C_SDA_High();
    I2C_Delay();
}

2.2 发送一个字节

  CPU向I2C总线设备发送一个字节(8bit)数据

u8 I2C_SendByte(uint8_t Byte)
{
    uint8_t i;

    /* 先发送高位字节 */
    for(i = 0 ; i < 8 ; i++)
    {
        if(Byte & 0x80)
        {
            I2C_SDA_High();
        }
        else
        {
            I2C_SDA_Low();
        }
        I2C_Delay();
        I2C_SCL_High();
        I2C_Delay();
        I2C_SCL_Low();
        I2C_Delay();

        if(i == 7)
        {
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值