ARM嵌入式学习--第十三天(I2C)

I2C

--介绍

    I2CInter-intergrated Circuit 集成电路总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信;I2C总线有俩根双向的信号线一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;I2C总线硬件结构简单,简化了PCB布线,降低了系统成本,提高了系统的可靠性,因此在各个领域得到了广泛应用。

    I2C总线是一种多主机总线,连接在I2C总线上的器件分为主机从机主机有权发起和结束一次通信,从机只能被动呼叫;当总线上有多个主机同时启用总线时,I2C也具备冲突检测仲裁的功能来防止错误产生;每个连接到I2C总线上的器件都有一个唯一的地址(7bit),传输数据的设备间是简单的主从关系,每个器件既可以作为主机也可以作为从机但同一时刻只能有一个主机总线上的器件增加和删除不影响其他器件正常工作;I2C总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器

    I2C总线可以通过外部连线进行在线检测,便于系统故障诊断和调试故障可以立即被寻址,软件也有利于标准化和模块化,缩短开发时间

    串行的八位双向数据传输速率在标准模式下可达100bit/s快速模式下可达400bit/s高速模式下可达3.4Mbit/s

--通信过程

    1.主机发送起始信号启用总线

    2.主机发送一个字节数据指明从机地址和后续字节的传输方向

    3.被寻址的从机发送应答信号回应主机

    4.发送器发送一个字节

    5.接收器发送应答信号回应发送器

    6.  .......(循环步骤4,5)

    7.通信完成后主机发送停止信号释放总线

注意点:

    第四步和第五步用的是发送器和接收器,不是主机和从机,这是由第一个字节的最后一位决定主机给从机发送,还是从机给主机发送。也就是说,第一个字节和最后的停止信号一定是主机发给从机的,但中间就不一定了。

    发送数据过程中不允许改变发送方向

--I2C总线的信号类型

    I2C总线在传输数据过程中共有3种类型信号:开始信号、结束信号、响应信号

-开始信号(S)和结束信号(P)

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

    结束信号SCL为高电平时,SDA低电平向高电平跳变结束传输数据

    起始信号和停止信号都是由主机发出起始信号产生后总线处于占用状态,停止信号产生后总线被释放,处于空闲状态。(空闲时,SCL与SDA都是高电平

    停止情况由俩种:

        1.主机不想发了,就发送停止信号

        2.从机不想接了,不应答,主机就发送停止信号结束此次通信

-响应信号(ACK)

    接收器在接收到8位数据后,在第9个时钟周期,拉低SDA电平

(注意:SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化

 

 --I2C总线的数据传输格式

    I2C总线通信时每个字节为8位长度,数据传送时,先传送最高位(MSB)后传送低位,发送器发送完一个字节数据后接收器必须发送1位应答位来回应发送器,即一帧共有9位

启动一个传输时,主机先发送S信号,然后发出8位数据,这8位数据中前7位为从机地址,第8位表示传输的方向(0表示写操作,1表示读操作)从机收到后会发出一个ACK信号 

(注意:主机接收器在接收到最后一个字节后,也不会发出ACK信号。于是从机发送器释放SDA线,以允许主机发出P信号结束传输)

--iMX6ull I2C控制器介绍

    inter IC提供标准I2C从机和主机的功能,I2C被设计为兼容标准NXP I2C总线协议

    I2C是一种双线串行总线,它提供了一种简单有效的数据交换方法,最大限度地减少了设备之间的互连,这种总线适用于需要在许多设备之间偶尔进行短距离通信的应用,灵活的标准允许将其他设备连接到总线上,以进行扩展和系统开发

-I2C控制器设计

-Clocks

    I2C有俩个输入时钟

    I2C的时钟源说明如下表所示

    外围时钟:这个时钟用于外围总线寄存器读写

    模块时钟:这是I2C的功能时钟。串行位时钟频率来源于模块时钟。模块时钟与外设时钟是同步的,在Fast模式下,模块时钟的最小频率应为12.8MHz,以实现400kbps的工作

 

-Arbitration procedure(仲裁程序)

    如果多个设备同时请求总线,总线时钟由一个同步过程确定,其中低周期等于设备中最长的时钟低周期,高周期等于最短的时钟低周期,数据仲裁程序决定了竞争设备的相对优先级

    如果一个设备发送高逻辑而另一个发送低逻辑,则失去仲裁;立即切换到Slave Receive模式,停止驱动I2Cn_SDA。在这种情况下,从主模式到从模式的转换不会生成Stop条件,同时,硬件在I2C状态寄存器(I2C_I2SR[IAL]表示仲裁丢失)中设置仲裁丢失位

 

-Initialization sequence(初始化顺序)

    在接口能够传输串行数据之前,必须初始化寄存器,如下所列:

        1.设置数据采样率(I2C_IFDR[IC]),从系统总线时钟获得SCL频率

        2.更新(I2C_IADR)中的地址以定义其从地址(地址范围从0到0x7f)

        3.设置I2C使能位(I2C_I2CR[IEN]),使能I2C总线接口系统

        4.修改I2C_I2CR中的位,使其选择“主从模式”、“收发模式”、和“中断使能”

-Generation of Start(Start的生成)

    初始化程序完成后,可以通过选择主传输模式来发送串行数据,在多主总线系统中,需要测试忙碌的总线(I2C_I2SR[IBB])以确定串行总线是否空闲,如果总线是空闲的(IBB=0)则可以发送起始信号和第一个字节(从机地址)。写入数据寄存器的数据包括所需从机的地址,并且最低有效位指示传输方向

    停止和下一个开始条件之间的空闲时间内置在生成开始周期的硬件中,根据系统时钟和SCL周期的相对频率,在将调用地址写入数据寄存器(I2C_I2DR)后,可能需要等到I2C不忙,然后再将数据加载到数据寄存器(I2C_I2DR)中

-Generation of Stop(Stop的产生)

    数据传输结束后,主站发出停止信号,这可能发生再所有数据发送后,对于主接收器终止数据传输,它必须通过不确认最后一个数据字节通知从站发送器,这是通过在读取倒数第二个字节之前设置传输确认位(I2C_I2CR[TXAK])来完成的,在读取最后一个字节之前,必须生成停止信号

-Generation ofRepeated Start(重复启动的产生)

    在数据传输之后,如果主站仍然需要总线,它可以发出另一个启动信号,后面跟着另一个从站地址,而不用发出停止信号

-Post-transfer software response(传输后软件响应)

    发送或接收一个字节设置数据传输位(I2C)I2SR[ICF]),表示一个字节的通信完成。完成后,中断转台(I2C_I2SR[IIF])也被设置,如果设置了中断使能(I2C_I2CR[IIEN]),则会产生外部中断。软件必须首先清除中断例程中的中断状态(I2C_I2SR[IIF])

    数据传输位(I2C_I2SR[ICF])通过在接收模式下从I2C_I2DR读取或在传输模式下写入该寄存器来清除

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(10) 如何获取 linux 系统上的 TCP 、 UDP 套接字的收发缓存的默认大小,以及代码范例

(1) 先介绍下后面的代码里要用到的基础函数: 以及: (2) 接着给出现代版的 读写 socket 参数的系统函数 : 以及: (3) 给出 一言的 范例代码,获取…

kafka消费端之消费者协调器和组协调器

文章目录 概述回顾历史老版本获取消费者变更老版本存在的问题 消费者协调器和组协调器新版如何解决老版本问题再均衡过程**第一阶段CFIND COORDINATOR****第二阶段(JOINGROUP)**选举消费组的lcader选举分区分配策略 第三阶段(SYNC GROUP&…

Redis --- 使用Feed流实现社交平台的新闻流

要实现一个 Feed 流(类似于社交媒体中的新闻流),通常涉及以下几个要素: 内容发布:用户发布内容(例如文章、状态更新、图片等)。内容订阅:用户可以订阅其他用户的内容,获…

6 maven工具的使用、maven项目中使用日志

文章目录 前言一、maven:一款管理和构建java项目的工具1 基本概念2 maven的安装与配置(1)maven的安装(2)IDEA集成Maven配置当前项目工程设置 maven全局设置 (3)创建一个maven项目 3 pom.xml文件…

Visual Studio(VS)没有显示垂直滚轮or垂直滚轮异常显示

前言: 前段时间,我换上了新电脑。满心欢喜地安装好 VS,准备大干一场时,却发现了一个小麻烦 —— 垂直滚轮显示异常(如图 1)。这种显示方式实在让我难以适应,每一次操作都觉得别扭。 于是&#…

Fiddler Classic(HTTP流量代理+半汉化)

目录 一、关于Fiddler (一) Fiddler Classic (二) Fiddler Everywhere (三) Fiddler Everywhere Reporter (四) FiddlerCore (五) 总结 二、 软件安全性 1. 软件安装包 2. 软件汉化dll 三、安装与半汉化 1. 正常打开安装包点击下一步安装即可,安装路径自…

时序数据库:Influxdb详解

文章目录 一、简介1、简介2、官网 二、部署1、安装2、配置(1)用户初始化 三、入门(Web UI)1、加载数据(1)上传数据文件(2)代码接入模板 2、管理存储桶(1)创建…

android 适配 api 35(android 15) 遇到的问题

首先升级 targetSdkVersion 和 compileSdkVersion 到 35,升级后发生的报错 一、 解决方案: 升级 gradle 和 gradle 插件版本 com.android.tools.build:gradle -> 8.3.0-alpha02 gradle-wrapper.properties : distributionUrl -> gradle-8.6-bin.zip htt…

【万字详细教程】Linux to go——装在移动硬盘里的Linux系统(Ubuntu22.04)制作流程;一口气解决系统安装引导文件迁移显卡驱动安装等问题

Linux to go制作流程 0.写在前面 关于教程Why Linux to go?实际效果 1.准备工具2.制作步骤 下载系统镜像硬盘分区准备启动U盘安装系统重启完成驱动安装将系统启动引导程序迁移到移动硬盘上 3.可能出现的问题 3.1.U盘引导系统安装时出现崩溃3.2.不影响硬盘里本身已有…

完美解决phpstudy安装后mysql无法启动

phpstudy数据库无法启动有以下几个原因。 **一、**自己在电脑上安装了MySQL数据库,MySQL的服务名为MySQL,这会与phpstudy的数据库的服务名发生冲突,从而造成phpstudy中的数据库无法启动,这时我们只需要将自己安装的MySQL的服务名改掉就行。 但是&#…

Class加载流程和运行时区域

目录 jvm是什么.class加载过程干预.class.class文件内容1 加载2-1 连接:验证(class字节流的校验)2-2 连接:准备(分配内存,初始化默认值)2-3 连接:解析3 class 初始化什么时候需要对类…

ESP32开发学习记录---》GPIO

she 2025年2月5日,新年后决定开始充电提升自己,故作此记,以前没有使用过IDF开发ESP32因此新年学习一下ESP32。 ESPIDF开发环境配置网上已经有很多的资料了,我就不再赘述,我这里只是对我的学习经历的一些记录。 首先学习一个…

pycharm集成通义灵码应用

在pycharm中安装通义灵码 1、打开files-settings 2、选中plugins-搜索”TONGYI Lingma“,点击安装 3.安装完成后在pycharm的右侧就有通义灵码的标签 4、登录账号 5、查看代码区域代码,每一个方法前面都多了通义灵码的标识,可以直接选择…

Git--使用教程

Git的框架讲解 Git 是一个分布式版本控制系统,其架构设计旨在高效地管理代码版本,支持分布式协作,并确保数据的完整性和安全性。 Git 的核心组件: 工作区(Working Directory): 工作区是你在本…

力扣.270. 最接近的二叉搜索树值(中序遍历思想)

文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的中序遍历) 本题的难点在于可能存在多个答案,并且要返回最小的那一个,为了解决这个问题,我门则要利用上二叉搜索树中序遍历为有序序列的特性,具体到代码中&a…

7个国内能打开的AI绘画网站!新手福音!

以下是我收集的国内能打开的AI绘画网站。 1、6pen 网址:https://6pen.art/ 2、文心大模型 网址:https://wenxin.baidu.com/moduleApi/ernieVilg 3、Draft 网址:https://draft.art/ai- art/drawing 4、nightcafe 网址:https:/…

Redis数据库篇 -- Pipeline

一. 什么是Pipeline 在传统的请求-响应模式中,客户端与服务器之间的通信流程如下: 客户端发送一个命令到服务器。服务器接收命令并执行。服务器将执行结果返回给客户端。客户端接收结果后,发送下一个命令 在这种传统的模式下,…

Baumer工业相机堡盟相机的相机传感器芯片清洁指南

Baumer工业相机堡盟相机的相机传感器芯片清洁指南 Baumer工业相机1.Baumer工业相机传感器芯片清洁工具和清洁剂2.Baumer工业相机传感器芯片清洁步骤2.1、准备步骤2.2、清洁过程1.定位清洁工具2.清洁传感器3.使用吹风装置 Baumer工业相机传感器芯片清洁的优势设计与结…

【OS】AUTOSAR架构下的Interrupt详解(下篇)

目录 3.代码分析 3.1中断配置代码 3.2 OS如何找到中断处理函数 3.3 Os_InitialEnableInterruptSources实现 3.4 Os_EnableInterruptSource 3.5 DisableAllInterrupts 3.5.1Os_IntSuspendCat1 3.5.2 Os_InterruptDisableAllEnter 3.5.3 Disable二类中断 3.5.4 Disable一…

ASP.NET Core中间件Markdown转换器

目录 需求 文本编码检测 Markdown→HTML 注意 实现 需求 Markdown是一种文本格式;不被浏览器支持;编写一个在服务器端把Markdown转换为HTML的中间件。我们开发的中间件是构建在ASP.NET Core内置的StaticFiles中间件之上,并且在它之前运…