三、IIC 总线协议——1、IIC总线协议介绍

news2024/9/23 23:31:38

IIC总线协议介绍

1、IIC介绍:

        Inter Integrated Circuit,同步、串行、半双工通信总线。

2、IIC总线结构图

① 由时钟线SCL和数据线SDA组成,并且都接上拉电阻,确保总线空闲状态为高电平。

②总线支持多设备连接,允许多主机存在,每个设备都有唯一地址。

③连接到总线上的数目受总线的最大电容400pf限制。

④数据传输速率:标准模式100k bit/s,快速模式400k bit/s,高速模式3.4M bit/s

 3、信号

      开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

      结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

      应答信号:主机或丛机接收到信号之后,返回应答信号,为低电平。

      接收到信号为ack,没有接收到信号为nack。

      SCL和SDA有上拉电阻,空闲状态默认为高电平。

 4、程序

      起始信号

void iic_start(void)
{ /* SCL为高电平期间, SDA从高电平往低电平跳变*/
    IIC_SDA ( 1 );	
	IIC_SCL ( 1 );
    iic_delay( );  /*延时时间由丛机决定*/
 	IIC_SDA ( 0 );	
 	iic_delay( );
    IIC_SCL ( 0 );	/* 钳住总线, 准备发送/接收数据 */
 	iic_delay( );  
}

       停止信号

void iic_stop(void)
{ /* SCL为高电平期间, SDA从低电平往高电平跳变*/
    IIC_SDA ( 0 );	
	iic_delay( );
 	IIC_SCL ( 1 );	
 	iic_delay( );
    IIC_SDA ( 1 ); 	/* 发送总线停止信号*/
 	iic_delay( );
}

       检测应答信号

uint8_t iic_wait_ack (void) /* return 1:fail 0:succeed*/
{	
	IIC_SDA (1);  /* 主机释放SDA线,将控制权交给丛机,
                     丛机发送SDA为0为应答,不操作则为非应答(SDA为高电平)*/
	iic_delay( );
	IIC_SCL (1);  /* 从机返回ACK,SCL为高电平,SDA才有效*/ 	
 	iic_delay( );
	if ( IIC_READ_SDA ) /* SCL高电平读取SDA状态*/ 
	{
		iic_stop();	    /* 非应答,SDA高电平表示从机nack */ 
		return 1;
	}
	IIC_SCL(0);	 /* 应答,SCL低电平表示结束ACK检查 */ 
 	iic_delay( );
	return 0;
}

       发送应答信号

void iic_ack(void)
{ 
    IIC_SCL (0);	
	iic_delay( );
 	IIC_SDA (0);  /* 数据线为低电平,表示应答 */
 	iic_delay( );
    IIC_SCL (1); 	
 	iic_delay( );
}

      发送非应答信号

void iic_nack(void)
{ 
    IIC_SCL (0);	
	iic_delay( );
 	IIC_SDA (1);  /* 数据线为高电平,表示非应答 */
 	iic_delay( );
    IIC_SCL (1); 	
 	iic_delay( );
}

      发送1字节数据

void iic_send_byte(uint8_t data)
{
	for (uint8_t t = 0; t < 8; t++)
	{	/* 高位先发 */
		IIC_SDA((data & 0x80) >> 7);
 		iic_delay( );
 		IIC_SCL ( 1 );	
 		iic_delay( );
 		IIC_SCL ( 0 );
		data <<= 1; /* 左移1位,发送次高位,用于下一次发送 */
	}
	IIC_SDA ( 1 ); 	/* 发送完成,主机释放SDA线 */ 
}

       读取1字节数据

uint8_t iic_read_byte (uint8_t ack) /* 1:ack 0:nack*/
{ 
	uint8_t receive = 0 ;
	for (uint8_t t = 0; t < 8; t++)
	{	
        /* 高位先输出,先收到的数据位要左移 */ 
		receive <<= 1;		
		IIC_SCL ( 1 );	
 		iic_delay( );
		if ( IIC_READ_SDA ) receive++;
 		IIC_SCL ( 0 );
		iic_delay( );
	}
	if ( !ack ) iic_nack();
	else iic_ack();
	return receive; 	
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2084567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSM电动车智能充电桩管理系统 项目源码24481

摘 要 随着社会对环保和可持续发展的关注不断增加&#xff0c;电动车作为清洁能源交通工具受到了广泛关注和推广。然而&#xff0c;电动车充电设施的建设和管理面临着诸多挑战&#xff0c;如充电效率低下、管理繁琐等问题。为解决这些问题&#xff0c;本研究设计开发了一款电…

揭秘无线领夹麦克风五大行业隐秘:音质失真、隐私泄露需警惕!

​无线领夹麦克风是演讲、教学、直播等场合的得力助手&#xff0c;然而市场上品牌众多&#xff0c;产品质量参差不齐&#xff0c;安全隐患层出不穷。作为一名音频设备评测师&#xff0c;我近期入手了多款无线领夹麦克风进行测评&#xff0c;下面就来为大家揭秘无线领夹麦克风行…

Jupyter Notebook详细教程

1、Ipython介绍 介绍 科学计算标准工具集的组成部分 IPython是一个免费、开源的项目&#xff0c;支持Linux、Unix、Mac OS X和Windows平台&#xff0c;其官方网址&#xff1a;Jupyter and the future of IPython — IPython IPython中包括各种组件&#xff0c;其中的两个主要…

无盘设计及其在Allegro中的具体操作

无盘设计的好处有两点&#xff1a; 去掉焊环后&#xff0c;增加了孔与线或是其它孔的间距; 去掉焊环后&#xff0c;铜皮避让的面积更少了&#xff0c;增加了铺铜平面的完整性。 一、确定通孔/过孔焊盘支持去除焊环 只有在封装中勾选了Suppress unconnected internal pads; leg…

AI大模型,互联网的中年革命?人才抢夺白热化,平均工资水平惊呆了……

写在前面 在腾讯股东大会上&#xff0c;CEO马化腾深刻指出&#xff0c;人工智能&#xff08;AI&#xff09;并非仅仅是互联网领域十年一遇的机遇&#xff0c;而是一个具有深远影响的、堪比电力发明的工业革命级别的重大机遇。 本文将包括&#xff1a; 1- 行业概览 2- 大模型…

C++必修:bitset的用法与实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. 位图的引入 首先我们来看一道面试题&#xff1a; 给40亿个不重复的无符号整数…

乌龙?揭露2024国自然被刷真相!

8月24日&#xff0c;国自然正式放榜&#xff0c;并且申请项目批准资助通知、不予资助通知以及专家评审意见也已发送到各位申请人手里。 中了的人兴奋庆祝&#xff0c;没中的人气愤懊恼&#xff0c;一遍又一遍的看着评审意见&#xff0c;甚至会质疑一些评审的意见有些 “不合理…

The Power of Scale for Parameter-Efficient Prompt Tuning

系列论文研读目录 文章目录 系列论文研读目录论文题目含义Abstract1 Introduction2 Prompt Tuning5.6.7.8.9.10. 论文链接 论文题目含义 刻度在参数高效快速调优中的作用 Abstract In this work, we explore “prompt tuning,” a simple yet effective mechanism for lear…

(四)Kafka离线安装 - Kafka下载及安装

Kafka官方下载地址&#xff1a;Apache Kafka 这时候下载安装版本。 我这里的安装目录在 /usr/local/ cd /usr/local/# 创建目录 mkdir kafka cd kafka mkdir kafka_log 把下载的压缩包&#xff0c;放入到/usr/local/kafka/目录下&#xff0c;解压。 # 解压 tar -zxvf kafka…

PDF招生简章如何转二维码?

​随着科技的不断发展&#xff0c;招生报名方式也在不断创新。如今&#xff0c;许多学校和企业都采用PDF招生简章来宣传招生。然而&#xff0c;传统的纸质招生简章存在携带不便、易损坏等问题。为了解决这些问题&#xff0c;将PDF招生简章转换为二维码成为了一种趋势。那你知道…

Laravel邮件发送功能的实现的方法和技巧?

Laravel邮件发信功能如何配置&#xff1f;怎么使用Laravel发信&#xff1f; 在现代Web开发中&#xff0c;邮件发送功能是不可或缺的一部分。Laravel框架以其优雅的语法和强大的功能&#xff0c;成为了许多开发者的首选。AokSend将深入探讨如何在Laravel中实现邮件发送功能&…

让甲方看得见服务器资源降本增效-软件开发不仅考虑开发成本也要重视长期的运维成本

这几天有几个开发者朋友问&#xff0c;用Go语言开发后端真能降低服务器成本吗&#xff1f;本文想分享是低成本一种解决方案&#xff0c;我们不讨论谁是世界上最好的开发语言&#xff0c;所以开发者朋友看到对比语言就不要去挣个高低。GoFly社区今天给大家分享我们这几年用下来真…

餐饮点餐外卖到店小程序系统管理

餐饮业主要以到店就餐和外卖方式/部分细分业快递配送、团餐等满足客户购餐消费需要&#xff0c;互联网时代&#xff0c;尤其是年轻人无论进店与否都追求快捷方便&#xff0c;商家也要提高自身服务效率。 制作餐饮外卖配送/到店/扫码点餐小程序并可在后台开启设置扫码点餐、到店…

黑神话悟空 PC端配置需求详解:如何为不同游戏体验选择合适的配置?

《黑神话&#xff1a;悟空》是一款备受期待的动作角色扮演游戏&#xff0c;由游戏科学&#xff08;Game Science&#xff09;开发&#xff0c;基于《西游记》改编。随着游戏的发布&#xff0c;许多玩家都在关心一件事&#xff1a;我的电脑能带动这款游戏吗&#xff1f;本文将详…

七年老玩家《王者荣耀》分析四:【更新与维护以及防沉迷系统】

目录 更新与维护 王者荣耀日常例行不停机维护的具体时间和内容是什么&#xff1f; 王者荣耀停机维护的历史案例及其对玩家体验的影响如何&#xff1f; 王者荣耀版本更新维护中&#xff0c;T0级英雄调整的标准和流程是什么&#xff1f; 王者荣耀大版本更新的准备工作包括哪些…

vscode链接到远程

点击左下角的绿色按钮选择远程链接成功后左下角会显示远程的名字点击打开文件夹&#xff0c;选择目录进行目录进行编辑

NSSCTF练习记录:[AFCTF 2018]BASE

题目&#xff1a; 根据题目&#xff0c;应为base家族解码&#xff0c;用工具套娃解就可以了

一、基于Vue3的开发-环境搭建【pnpm】安装

基于Vue3开发环境搭建 1、npm 的安装1.1、下载参考地址1.2、安装1.3、设置为国内镜像2、pnpm的安装2.1、启动PowerShell注意事项2.1、 安装2.2、常用命令3、创建项目1、npm 的安装 1.1、下载参考地址 //下载参考地址:https://nodejs.cn/download/#google_vignette下载界面 …

制造业如何利用MES管理系统实现数据采集

制造业利用MES&#xff08;制造执行系统&#xff09;管理系统实现数据采集是一个综合性的过程&#xff0c;它涉及多个环节和技术的协同工作。以下是一个详细的步骤说明&#xff1a; 一、设备接入与集成 设备连接&#xff1a;首先&#xff0c;需要将生产线上的各种设备&#xff…

css揭秘 7 结构与布局

36 自适应内部元素 众所周知&#xff0c;如果不给元素指定一个具体的 height&#xff0c;它就会自动适应其 内容的高度。假如我们希望 width 也具有类似的行为&#xff0c;该怎么做呢&#xff1f; <p>Some text [...]</p> <figure><img src"adamca…