嵌入式ARM架构学习9——IIC - 教程

news/2025/9/23 12:23:46/文章来源:https://www.cnblogs.com/lxjshuju/p/19106962

一、IIC总线概述

  • IIC(Inter-Integrated Circuit)即集成电路总线,用于板级芯片间通信,常见于传感器与主控芯片之间的数据交互。
  • IIC由飞利浦公司创建,采用两线制:SCL(时钟线)和SDA(数据线),支持多主多从架构,通信中任一时刻仅一个主机主导。

  • IIC通信方式为半双工、同步、串行,因其仅有一根数据线且有时钟线控制时序。
  • 线与特性指当多个设备连接在同一总线上时,若任一设备将总线拉低,则整体呈现低电平,高电平需所有设备均释放总线。

  • 总线空闲时为高电平,便于任意设备发起通信;上拉电阻(典型值4.7kΩ–10kΩ)用于提升驱动能力、延长传输距离,推荐默认选用10kΩ。

二、IIC通信时序

  • 通信开始由主机发送起始信号(SCL高电平时SDA下降沿),结束于停止信号(SCL高电平时SDA上升沿)。
  • 信息在SCL低电平时可改变,在SCL高电平时必须稳定供接收方采样,确保正确读取。
  • 数据传输以字节为单位,高位(MSB)先行;每发送一个字节后需跟随一个应答位(ACK应答/NACK非应答)。
  • 应答位由接收方在第9个时钟周期内拉低SDA表示ACK(确认收到),保持高电平则为NACK(未应答)。(注:第八个时钟周期后释放拉高数据总线便与区别从机的应答信号,第九个时钟周期后拉低数据总线为了区分结束信号)
  • 单次通信可在START与STOP之间连续传输多个字节,每个字节后均有应答位,最终由主机发出STOP信号终止通信。

三、IIC协议层机制

  • 起始信号后紧跟的第一个字节包含7位从机地址和1位内容方向位(R/W),用于指定目标设备及数据流向。

  • 从机地址由厂商向飞利浦申请获得,保证全球唯一;若存在地址冲突,可通过挂接不同I²C总线解决。
  • 材料方向位为0时表示主机写(主机发,从机收),为1时表示主机读(主机收,从机发)。
  • 所有通信均由主机控制START与STOP信号,应答由接收方发出,确保通信有序进行。

四、AT24C02存储芯片应用

  • 一款I2C接口的EEPROM芯片,容量为2K比特(256字节),支撑1.8V–5.5V宽电压工作。就是AT24C02
  • 芯片引脚包括SCL、SDA、VCC、GND、WP(写保护)以及A0–A2(地址选择引脚),通过A0–A2配置可实现 同一总线上最多挂载8个相同型号器件。
  • 字节写操作流程:主机发送START → 发送设备地址+写位(0)→ 接收ACK → 发送字地址 → 接收ACK → 发送数据 → 接收ACK → 发送STOP。

  • 页写操作允许连续写入多个字节,地址自动递增,受限于每页8字节边界。

  • 当前地址读操作无需指定地址,直接从上次操作位置继续读取;随机读操作需先发送设备地址+写位及目标地址,再重启START并发送设备地址+读位以启动读取过程。

  • 随机读采用两次START信号(无中间STOP),第一次用于发送地址(写模式),第二次用于启动读取(读模式),搭建跨方向的数据访问。

五、I2C控制器原理与结构

  • 介绍了IDOMAX芯片中I2C控制器的基本结构,包括时钟线(SCL)和数据线(SDA),以及内部包含的多个关键寄存器。
  • 解释了I2C总线的主从机模式:主机发起通信(start信号),从机响应;控制器可作为主机或从机使用。
  • 说明了I2C总线采用半双工通信方式,只有一根数据线,读写操作共用同一材料寄存器。
  • 指出IDOMAX芯片内有四个I2C总线控制器(I2C1-I2C4),可通过引脚复用功能选择具体使用的控制器。

六、关键寄存器功能解析

  • FREQUENCY寄存器(IFDR)用于设置分频系数,将66MHz外设时钟分频至目标频率(如100KHz),最接近的可用值为640分频(IC域值为0x15)。

  • 控制寄存器(I2CR)包含多个控制位:IEN为模块使能位,MSTA为主从模式选择位(置1发start信号,清0发stop信号),MTX为发送/接收模式选择位。

  • 状态寄存器(I2SR)包含要紧状态标志:IIF为中断标志位(通信过程中需频繁检查),IBB为总线忙碌标志,IAL为仲裁丢失标志。

  • 数据寄存器(I2DR)用于存放待发送或已接收的数据字节,读写操作均依据此寄存器完成。
  • 地址寄存器(IADR)存储设备作为从机时的地址,本次实验作为主机使用故不涉及。

I2C初始化流程

  • 首先进行引脚复用配置,将UART4的TXD/RXD引脚复用为I2C1的SCL/SDA功能,并设置SION位以支持物理引脚状态检测。
  • 调整引脚电气特性,设置上拉电阻(PUE=1, PUS=0b11)和其他相关参数(PKE=1等),确保信号完整性。
  • 初始化I2C模块:先清除IEN位使模块失能并触发硬件复位,然后设置IFDR分频值为0x15(640分频),最后重新使能IEN位完成初始化。

写操作函数建立

  • 封装i2c_write函数,参数包括I2C基地址、从机地址、寄存器地址、数据指针和长度。
  • 写操作流程:清除IAL和IIF标志 → 设置MTX为发送模式 → 置位MSTA产生start信号 → 发送(从机地址<<1)|0 → 等待应答(Ack)。
  • 继续发送寄存器地址 → 等待应答 → 循环发送每个资料字节并等待每次应答。
  • 所有数据发送完成后,清除MSTA位产生stop信号,并循环检测IBB位直到总线空闲。
  • 实现wait_iif函数用于等待IIF标志置位,判断应答类型(RXAK),返回-1表示NACK异常。

读操作函数搭建

  • 封装i2c_read函数,核心流程前半部分与写操作相同:发送start信号 → 发送从机地址(写模式) → 发送寄存器地址 → 等待应答。
  • 关键区别在于后续步骤:再次置位RSTA位产生restart信号 → 发送(从机地址<<1)|1(读模式) → 等待应答。
  • 切换MTX为接收模式(MTX=0),根据资料长度设置应答方式:非最后一个字节回复ACK(TXAK=0),最后一个字节回复NACK(TXAK=1)。
  • 实现伪读机制:首次读取数据寄存器以启动接收过程,随后在循环中等待IIF置位、读取数据,直至所有材料接收完毕。
  • 最后产生stop信号并等待总线空闲,完成读取操作。

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

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

相关文章

山东青岛网站建设律师事务所免费咨询

正则表达式&#xff0c;又称正规表示法、常规表示法&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是计算机科学中的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器…

苏州市相城区住房和城乡建设局网站济南建设网站 概况

题意&#xff1a;给定n和m&#xff0c;求c(n,m)%(∏ p)的值&#xff0c;相当于lucas定理的一个推广&#xff0c;在p不是素数的情况下的一个解决方法。 思路&#xff1a; 首先对于c(n,m)%p[i]来讲&#xff0c;是一个lucas的裸题&#xff0c;那么对于c(n,m)%(∏ p)划分成lucas子…

网站推广赚钱吗做金融怎么进基金公司网站

在 MyBatis 中&#xff0c;< 符号在 XML 配置文件中是一个特殊字符&#xff0c;用于标记 XML 标签的开始。因此&#xff0c;如果你在 MyBatis 的 if 标签中直接使用 < 符号&#xff0c;它会被解析为 XML 标签的开始&#xff0c;从而导致解析错误。 为了避免这个问题&…

福建泉州做淘宝的拿货什么网站第一模板ppt网

一、故事引言 想象一下&#xff0c;你正在管理一座神奇的数据仓库&#xff0c;这个仓库没有沉重的门、旋转的磁盘和机械手臂&#xff0c;而是由一群训练有素的“数据小飞侠”组成。这些小飞侠们居住在一个叫做闪存芯片&#xff08;NAND Flash&#xff0c;本文主人公&#xff0…

营销型企业网站建设价格wordpress5.0.2版的新功能

aws sqsAmazon WEB服务为我们提供了SQS消息传递服务。 sqs的java sdk与JMS兼容。 因此&#xff0c;可以将SQS与spring提供的JMS集成框架集成在一起&#xff0c;而不是将SQS用作简单的spring bean。 我将使用spring-boot和gradle。 gradle文件&#xff1a; group com.gkatzi…

网站开发案例详解下载x浏览器

zencart 如何修改在线人数和订单编号 1 订单编号的修改办法 进入后台-工具(tool)-店铺管理器(store manager)&#xff0c;里面有个重置当前订单号&#xff08;Reset Current Order ID). 首先你得测试购买一次&#xff08;不要告诉我你不会&#xff09;&#xff0c;就会产生当前…

杭州市建设工程质量安全监督总站网站媒体广告投放平台

转载自 超详细的 Redis Cluster 官方集群搭建指南 今天从 0 开始搭建 Redis Cluster 官方集群&#xff0c;解决搭建过程中遇到的问题&#xff0c;超详细。 安装ruby环境 因为官方提供的创建集群的工具是用ruby写的&#xff0c;需要ruby2.2.2版本支持&#xff0c;ruby安装需…

网站设计任务怎么自己制作二维码内容

打家劫舍2 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 首先&#xff0c;给定一个非负整数数组 nums&#xff0c;其中 nums[i] 表示第 i 家的财物价值。 定义两个辅助数组 f 和 g&#xff0c;长度都为 n&#xff08;n 是…

长安镇网站建设东莞销售网站建设

## 资源简介 在STM32开发板,板载资源上有两个可自由控制的 LED。如下图原理 图其中我们以操作 LED1 为示例,LED1 为出厂系统的心跳指示灯。 ## 应用实例 想要控制这个 LED,首先出厂内核已经默认将这个 LED 注册成了 gpio-leds类型设备。所以我们可以直接在应用层接口直接…

微信小程序与网站连接互联网门户网站建设

Softing工业将ARM 32位兼容性集成到了edgeConnector产品中&#xff0c;以满足用户对ARM处理器的边缘设备日益增长的使用需求。 &#xff08;兼容ARM 32位架构的edgeConnector产品扩展了其应用部署范围&#xff09; 用户对采用ARM处理器的紧凑型边缘设备的需求正在大幅增长&…

就业专项资金网站建设北京外贸网站设计备案

C#上位机——根据命令发送 第一步&#xff1a;设置窗口的布局 第二步&#xff1a;设置各个属性 第三步&#xff1a;编写各个模块之间的关系

diango做的网站怎么用ppt在哪个软件制作

概述对于一些数据量较大的系统&#xff0c;数据库面临的问题除了查询效率低下&#xff0c;还有就是数据入库时间长。特别像报表系统&#xff0c;每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此&#xff0c;优化数据库插入性能是很有意义的。其实最有效的…

有几个网站如何做外贸海口网站公司

Python学习之路-Flask项目:博客前台 前言 前一篇完成了项目开发前的所有准备工作&#xff0c;本篇将完成整个博客的前台相关工作。 首页 前言 首页主要为我们提供各个分类入口已经按时间顺序的文章列表和列表排行等数据&#xff0c;是进入博客中第一眼看到的&#xff0c;接…

学院实验室建设网站的好处高州市网站建设

导语&#xff1a;之前介绍了如何打包一个安卓安装包文件&#xff0c;如果想要上架安卓应用商店&#xff0c;那么就来这里学习一下方法吧。 目录 准备材料应用商店注册账号上架步骤审核事项 准备材料 基本信息 安装包&#xff1a;需要 32 或 64 位&#xff1b;包名&#xff…

网站维护更新费用品牌建设的重要性与意义

一、JavaScript的面向对象 JavaScript其实支持多种编程范式的&#xff0c;包括函数式编程和面向对象编程&#xff1a; JavaScript中的对象被设计成一组属性的无序集合&#xff0c;像是一个哈希表&#xff0c;有key和value组成&#xff1b;key是一个标识符名称&#xff0c;val…

项目管理软件开发案例seo 资料包怎么获得

学习笔记-SQL语法系统性学习&#xff0c;关卡式进阶 笔记参考&#xff1a;作者鱼皮 关卡式Sql语句学习体验网站 &#xff0c;网站开源代码 如果想本地体验语法&#xff1a;1.下载大佬开源代码&#xff0c;运行前端项目&#xff08;推荐&#xff09;&#xff1b; 2.或是自己使…

饮食类网站绿盒子网站建设案例

iPhone 不能下载第三方软件的原因主要是因为苹果公司严格控制其应用生态系统&#xff0c;确保所有应用都通过其官方的 App Store 分发。这有几个主要原因&#xff1a; 安全性&#xff1a;苹果公司希望通过这种方式减少恶意软件的传播&#xff0c;保护用户的隐私和数据安全。所…

使用Go语言实现高效定时任务功能

gofly.v1kf.com vx: llike620 ​ 在现代软件开发中,定时任务是许多系统不可或缺的一部分。无论是数据同步、定期通知还是资源清理,定时任务都能帮助我们自动化这些重复性工作。本文将介绍如何使用Go语言中的cron库实…

深入解析:GPT-5风波后,奥特曼深夜道歉并补偿!Plus用户成最大赢家,Wildcard 野卡停服后,普通人如何充值?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站开发有前途么北京网站建设公司华网天下优惠

目录 1. redis下载 2. 环境准备 3. redis部署 3.1 修改系统配置文件 3.2 开放端口 3.3 安装 redis 3.4 验证 本文将以三台服务器为例&#xff0c;介绍在 linux 系统下redis的部署方式。 1. redis下载 下载地址&#xff1a;Index of /releases/ 选择需要的介质下载&am…