17.IIC原理及应用

news2024/10/7 20:36:59

IIC总线的一些特征

• 只要求两条总线线路 一条串行数据线 SDA  一条串行时钟线 SCL

• 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从机关系软件设定地

址 主机可以作为主机发送器或主机接收器

• 它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁

防止数据被破坏

• 串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速

模式下可达 3.4Mbit/s

• 片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整

• 连接到相同总线的 IC 数量只受到总线的最大电容 400pF 限制

应用优点

极低的电流消耗

 抗高噪声干扰

电源电压范围宽

工作的温度范围广

两线――串行数据 SDA 和串行时钟

一般都是外接上拉电阻

电阻不能太小,一般是4K-10K,电阻过小,上拉不可控

SCL 线在连接到总线的器件间传递信息 每个器件都有一个唯一的地址识别

在 IIC 总线中 唯一出现的是被定义为起始 S 和停止 P 条件 见下图的情况,也就是起始信号和停止信号

发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制 每个字节后必须跟一个响应位 

首先传输的是数据的最高位

因为IIC是半双工通信,所以不是同时进行收发数据,时钟线拉低一瞬间发送数据,或者说SCL拉高一瞬间接收数据

下图有点差异,可以理解为在边沿触发的一瞬间就开始了通信,然后需要延时保证通信的完整性,这个延时是必须要有的且非常重要,一般6微秒比较通用,每次主动发起边沿就加上延时等待边沿变化完成,基本能保证框架的有效性。

标准模式100kbit/s:5 - 6us

快速模式400kbit/s:2 - 3us

IIC总体数据交互时序图:

起始信号:

    IIC_SDA_H;
	IIC_SCK_H;
	TIM5_delay_us(us);
	//在进行发送起始信号前,默认为拉高的SCK和SDA
	//拉低SDA
	IIC_SDA_L;
	TIM5_delay_us(us);

停止信号:

	IIC_SDA_L;
	//拉高SCK
	IIC_SCK_H;
	TIM5_delay_us(us);
	//等待后拉高数据线
	IIC_SDA_H;
	TIM5_delay_us(us);
	//等待后进行操作

每发送或者接收完8bit数据后必须要有的应答信号,接收8位数据发送一位应答,发送8位数据接收一位应答,0表示成功应答,1表示无应答

发送应答:在接受完第8位数据后,SCL拉低,马上发送1位应答,然后等待,等待后已经是低电平,这时为了周期的完整性要把CLK拉高,然后延时,这样周期才完整

//SCK拉低准备发送
	IIC_SCK_L;
	//拉低马上发送   发送是在拉低的一瞬间开始
	if(ack)
	{
		IIC_SDA_H;
	}
	else
	{
		IIC_SDA_L;
	}
	TIM5_delay_us(us);//等待数据发送完,也就是一个边沿变化缓冲时间
	//等待后拉高时钟线
	IIC_SCK_H;
	TIM5_delay_us(us);
	IIC_SCK_L;
	TIM5_delay_us(us);//这里必须拉低,对于多位数据来说

接收应答:在发送完第8位数据后,让SDA输出高电平,因为配置的时候是SCL为通用推挽输出,SDA为通用开漏输出,SDA输出1为高阻态,输出完全关闭,切换为输入状态,这样就可以接收来自SDA的数据,,拉高SCL,马上接收1位应答,然后等待,等待后已经是高电平,这时为了周期的完整性要把CLK拉低,然后延时,这样周期才完整

	u8 ack = 0;
	IIC_SDA_H;//开漏拉高输出关闭,进行输入
	
	IIC_SCK_L;
	TIM5_delay_us(us);
	//SCL拉高准备接收
	IIC_SCK_H;
	//拉高马上接收
	if(IIC_SDA)
	{
		ack = 1;
	}
	TIM5_delay_us(us);
	//等待后拉低
	IIC_SCK_L;
	TIM5_delay_us(us);
	return ack;

上面是整个IIC的框架,需要对时序进行充分理解,且必须要保证框架的可用性,不能有一点差错

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

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

相关文章

sql今天学习总结

排序order by(默认升序) order by id desc(降序排序) order by id,number(先按id排再按name排序) in,not in and or 通配符 where name like "Aa%";选取所有以Aa开头的名字 like "%r" 以r结…

CANoe如何实现TLS协议

TLS,Transport Layer Security,传输层安全协议。是在传输层和应用层之间,为了保证应用层数据能够安全可靠地通过传输层传输且不会泄露的安全防护。 TLS安全协议的实现逻辑,在作者本人看来,大致分为三个部分&#xff1…

Shell脚本入门:编写自动化任务的利器

一、Shell概述 Shell最早产生于20世纪70年代早期的Unix操作系统中。作为一种命令解释器,它位于操作系统的最外层,负责直接与用户进行交互。Shell把用户的输入解释给操作系统,并处理操作系统的输出结果,然后将其反馈给用户。这种交…

Windows当前无法访问>SmartScreen(安装程序长时间等待)的处理方法

问题描述:Windows下点击安装程序后,安装程序进入长时间等待状态(估计有5分钟以上),等待过后弹出“当前无法访问>SmartScreen”提示窗口,提示窗口截图如下: 问题原因:系统开启了Mi…

Elasticsearch实现hotel索引库自动补全、拼音搜索功能

Elasticsearch实现hotel索引库自动补全、拼音搜索功能 在这里边我们有两个字段需要用拼音分词器,一个name字段,一个all字段。 然后我们还需要去实现自动补全,而自动补全对应的字段必须使用completion类型。目前我们酒店里面所有的字段都采用的…

MacPro(M1,M2芯片)Java开发和常用工具开源软件合集

目录 Java开发软件1 IDE1.1 idea1.2 Vs Code 2 开发工具2.1 数据库数据库模型管理数据库连接客户端 2.2 SSH/Telnet/Serial/Shell/Sftp客户端2.3 MarkDown编辑器2.3 代码片段管理粘贴 3小工具3.1 截图贴图3.2 Mac下修改hosts文件的图形化界面软件 Java开发软件 1 IDE 1.1 ide…

ElasticSearch教程入门到精通——第五部分(基于ELK技术栈elasticsearch 7.x+8.x新特性)

ElasticSearch教程入门到精通——第五部分(基于ELK技术栈elasticsearch 7.x8.x新特性) 1. Elasticsearch集成1.1 框架集成-SpringData-整体介绍1.2 Spring Data Elasticsearch 介绍1.3 框架集成-SpringData-代码功能集成1.3.1 创建Maven项目1.3.2 修改po…

pytorch中的过拟合和欠拟合

基本概念 我们知道,所谓的神经网络其实就是一个复杂的非线性函数,网络越深,这个函数就越复杂,相应的表达能力也就越强,神经网络的训练则是一个拟合的过程。   当模型的复杂度小于真实数据的复杂度,模型表…

linux中通过logrotate进行日志切割

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…

Android 设置头像 - 裁剪及圆形头像

书接上文 Android 设置头像 - 相册拍照,通过相册和照片的设置就可以获取到需要的头像信息,但是在通常情况下,我们还想要实现针对头像的裁剪功能和圆形头像功能。 先上截图: 图像裁剪 通常裁剪可以分为程序自动裁剪和用户选择裁剪…

自适应信号处理基础及应用——DSP学习笔记五

本专栏的图片内容都来自于老师讲课的PPT,本篇博客只是我个人对于上课内容的知识结构分析和梳理。 导论 自适应系统的定义、特征、形式、举例 特征 非自适应系统 • 固定参数的设计方法 • 假定事先知道了一切可能的输入条件;在这些条件下怎样动作&#…

限流--4种经典限流算法讲解--单机限流和分布式限流的实现

为什么需要限流 系统的维护使用是需要成本的,用户可能使用科技疯狂刷量,消耗系统资源,出现额外的经济开销问题: 控制成本>限制用户的调用次数用户在短时间内疯狂使用,导致服务器资源被占满,其他用户无…

大象机器人开源六轴协作机械臂myCobot 320 手机摄影技术!

引言 有没有遇到过这样的情况:当你手持手机或相机准备拍摄视频时,心中已经构想了完美的画面,但却因为实际的限制无法捕捉到理想中的角度?这种情况可能会让人感到挫折。例如,如果想要从地面一只蚂蚁的视角拍摄&#xff…

dremio数据湖sql行列转换及转置

1、行转列 (扁平化) 数据准备 表 aa 1.1 cross join unnest 在Dremio中,UNNEST 函数用于将数组或复杂类型的列(如JSON、Map或Array类型)中的值“炸裂”(分解)成多行. with aa as ( select 上海 as city, ARRAY[浦东…

asp.net结课作业中遇到的问题解决1

作业要求 实现增删改查导出基本功能。 1、如何设置使得某个背景就是一整个而不是无限填充或者是这个图片的某一部分。 这就要求在设置这一块的时候,长和宽按照背景图片的大小进行设置,比如: 如果,图片的大小不符合你的要求&am…

技术团队的管理方法和日常总结建议

管理学家德鲁克有言“管理是一种实践,其本质不在于知,而在于行,其验证不在于逻辑,而在于成果,其唯一的权威就是成就” ,因此管理重实践看效果,但如果管理实践有理论依凭,那么实践起来…

云手机对出海企业有什么帮助?

近些年,越来越多的企业开始向海外拓展,意图发掘更广阔的市场。在这过程中,云手机作为一个新型工具为很多企业提供了助力,尤其在解决海外市场拓展过程中的诸多挑战方面发挥着作用。 首先,云手机的出现解决了企业在海外拓…

VS2022 嘿嘿

还是大二的时候就开始用这个,但居然是为了用PB,-_-|| 用了段时间换成了C#,依稀还记得大佬们纠正我的读法,别读C井,应该读C夏普。。。 安装过程其实也没啥,就是关键Key得花时间找,我好不容易搞…

Android如何使用XML自定义属性

1、定义 在res/values文件下定义一个attrs.xml文件,代码如下: 2、使用 在布局中使用, 示例代码如下: 3、获取 最终来到这里:

设计模式——保护性暂停

同步模式之保护性暂停 文章目录 同步模式之保护性暂停定义实现应用带超时版 GuardedObject扩展——原理之join扩展——多任务版 GuardedObject 定义 即 Guarded Suspension,用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程&…