IIC总线的操作时序

IIC(Inter-Integrated Circuit)是IIC Bus简称, 它是一种串列通讯总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。

IIC简介:

IIC总线只有2根信号线,一根是数据线SDA,一根是时钟线SCL。SDA和SCL均为双向信号线,通过上拉电阻接正电源。当总线空闲时,两根线都是高电平。连接到总线上的任一器件,输出低电平,都将使总线的信号变低。
连接总线的器件输出级必须是集电极或漏极开路,以形成线“与”功能。
每个具有IIC接口的设备都有一个唯一的地址,也叫做设备地址,通讯时需要进行寻址。
在这里插入图片描述
数据在进行传输时,时钟线SCL为高电平时,数据线SDA上的数据必须稳定,时钟线SCL为低电平时,才允许数据发生改变。
在这里插入图片描述

IIC的启动和停止

在这里插入图片描述
时钟线SCL高电平时,拉低数据线SDA-------------启动
时钟线SCL高电平时,拉高数据线SDA-------------停止

//总线启动条件
void IIC_Start(void)
{
    SDA = 1;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 0;
    IIC_Delay(DELAY_TIME);
    SCL = 0;	
}

//总线停止条件
void IIC_Stop(void)
{
    SDA = 0;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}

数据通信

在这里插入图片描述
启动总线后,必须发送设备地址,其中高4位是器件的类型识别符(EEPROM的识别符为1010),接着3位是片选信号,最后1位是读写控制位,读操作为1,写操作为0。
第9位是应答信号位,以确定数据传送是否被对方收到。应答信号由接收方在数据开始后的第9个时钟周期发送,在SCL为高电平期间,接收方将SDA拉为低电平产生应答,用来结束一个字节的传输。也就是说,一帧完整的数据共有9位。
等待应答信号的代码:

//等待应答
bit IIC_WaitAck(void)
{
    bit ackbit;
	
	SDA  = 1;				//新加,释放数据总线
	IIC_Delay(DELAY_TIME);
    SCL  = 1;
    IIC_Delay(DELAY_TIME);
    ackbit = SDA;
	if(ackbit)				//新加,若无应答,则停止总线
		IIC_Stop();
    SCL = 0;
    IIC_Delay(DELAY_TIME);
	
    return ackbit;
}

注意:当主机接收数据(也就是在读数据状态)时,它收到最后一个字节后,必须向从机发出一个结束传送的信号。这个信号是通过对从机的“非应答信号”来实现的,在SCL为高电平期间,SDA为高电平,即从机释放SDA线,允许主机产生一个停止信号。
主动发送应答的代码实现:

//主机发送应答
void IIC_SendAck(bit ackbit)
{
    SCL = 0;
    SDA = ackbit;  					// 0:应答,1:非应答
    IIC_Delay(DELAY_TIME);
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SCL = 0; 
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}

发送数据

在这里插入图片描述
操作时序:总线开始-----发送地址+写(0)-----从机应答------发送数据------从机应答……
发送一个字节数据的代码实现:

//通过I2C总线发送数据
void IIC_SendByte(unsigned char byt)
{
    unsigned char i;

    for(i=0; i<8; i++)
    {
        SCL  = 0;
        IIC_Delay(DELAY_TIME);
        if(byt & 0x80) 
        	SDA  = 1;
        else 
        	SDA  = 0;
        IIC_Delay(DELAY_TIME);
        SCL = 1;
        byt <<= 1;				//从最高位开始传输数据
        IIC_Delay(DELAY_TIME);
    }
    SCL  = 0;  
}

接受数据

在这里插入图片描述
操作时序:总线开始-----发送地址+读(1)-----从机应答------接受数据------主机发送应答……
接受一个字节数据的代码实现:

//从I2C总线上接收数据
unsigned char IIC_RecByte(void)
{
    unsigned char i, da;
    for(i=0; i<8; i++)
    {   
    	SCL = 1;
		IIC_Delay(DELAY_TIME);
		da <<= 1;					//从高位开始接受数据
		if(SDA) 
			da |= 1;
		SCL = 0;
		IIC_Delay(DELAY_TIME);
    }
    return da;    
}

Reference
https://blog.csdn.net/ohy3686/article/details/86716456

  • 16
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
IIC总线的FPGA实现是指使用FPGA芯片来实现IIC总线通信协议的功能。FPGA是一种可编程逻辑器件,可以根据需要进行配置和重新编程,因此可以用来实现各种数字电路和通信协议。在实现IIC总线时,FPGA可以通过配置其内部逻辑电路来模拟IIC总线时序和通信协议。 具体实现IIC总线的FPGA设计需要考虑以下几个方面: 1. 配置FPGA的IO引脚:需要将FPGA的IO引脚连接到IIC总线的SDA和SCL信号线上,以实现数据和时钟的传输。 2. 实现IIC总线时序:根据IIC总线时序要求,FPGA需要在适当的时机产生时钟信号和数据信号的变化,以实现数据的传输和通信的控制。 3. 实现IIC总线的协议:FPGA需要根据IIC总线的协议规范,实现主机和从机之间的数据传输和通信控制。这包括发送起始信号、地址和数据的传输、接收应答信号等操作。 4. 实现主机和从机的功能:FPGA可以实现主机和从机的功能,可以作为主机发送数据或作为从机接收数据,也可以同时兼具主机和从机的功能。 总的来说,通过配置FPGA的内部逻辑电路,可以实现IIC总线时序和通信协议,从而实现IIC总线的功能。具体的实现方式和细节可以根据具体的应用需求和FPGA芯片的特性来确定。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [FPGA实现IIC协议(二)----IIC总线的FPGA实现(单次读写驱动)](https://blog.csdn.net/wuzhikaidetb/article/details/120752864)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [IIC总线的FPGA实现](https://blog.csdn.net/qq_43416206/article/details/129678657)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值