当前位置: 首页 > news >正文

ARM(IMX6ULL)——通信(IIC/I2C)

相关概念

线与特性

定义:在两个芯片连接的对应引脚上,任何一端输出高电平,则实际电平的高低,由另一端决定
【若任一输出为低电平(或无效状态),总输出则被拉为低电平】

推挽 / 开漏

在这里插入图片描述

推挽:两个互补的有源器件(如晶体管、MOS 管)交替工作,实现对输出信号的 “推”(源电流输出)和 “挽”(灌电流输出),从而直接驱动负载并输出高低电平
【电流流向的两种动作:推和挽】
【对应示例图:表格中的(1)、(2)两种情况】
(1)MOS1导通,MOS2截止:电流从 3.3V 电源通过导通的 MOS1流向输出端(pad),将输出端的电平拉高到接近 3.3V,此时 LED 会点亮。这就相当于MOS1把输出信号“推”向高电平==》
(2)MOS1截止,MOS2导通:输出端(pad)通过导通的 MOS2连接到地,电平被拉低到接近 0V,LED 熄灭。这就相当于 MOS2把输出信号 “拉” 向低电平==》
开漏:指器件的输出端仅连接到一个有源器件(如 N 沟道 MOS 管)的漏极,漏极处于 “开路” 状态,源极接地,无直接接电源的有源器件。
【对应示例图:表格中的(2)、(3)两种情况】
(2)MOS1截止,MOS2导通:输出端(pad)通过导通的 mos2 连接到地,输出低电平,LED 熄灭。
(3)MOS1截止,MOS2截止:输出端(pad)处于悬空状态(高阻态) ,无法主动输出高电平。此时,需要依靠外接的上拉电阻将输出端的电平拉高到 3.3V,LED 点亮。

I2C通讯最基本时序

  • I2C通讯是多对多通信,至少需要两根线(数据线SDA和时钟线SCL),使用的是主从应答方式(即主机发送数据,从机接收数据后发出应答标志ACK/NACK)
  • I2C是同步半双工串行通信方式

在这里插入图片描述

  1. start信号:在总线空闲状态下,想要发起一次通讯的设备A,在时钟线(SCL)为高电平时,数据线(SDA)产生一个下降沿,称之为起始信号。
  2. 总线规定
    (1)数据在发送时遵循MSB优先【UART通信遵循LSB优先】;
    (2)在时钟线(SCL)为低电平时,只允许设备(发送方)改变数据线(SDA),接收方不得采样;
    (3)在时钟线(SCL)为高电平时,只允许设备(接收方)采样数据线(SDA),发送方需要保持SDA的稳定。
  3. 应答位:数据总线的控制权由发送方转移给(发送方在clock9切换为高电平)了接收方,接收方就可以改变数据总线。
    (1)ACK:应答(低电平)
    (2)NACK:非应答(保持高电平)
  4. stop信号:在总线空闲状态下,想要发起一次通讯的设备A,在时钟线(SCL)为高电平时,数据线(SDA)产生一个上升沿,称之为结束信号。

在这里插入图片描述

地址帧结构: 从机地址占用7个bit位,第八位为数据流向位(0用于规定主机和从机谁发送谁接收)

I2C主机向从机发送数据

在这里插入图片描述
AT24C08(EEPROM 存储器)作为主机发送数据使用的I2C相关寄存器及寄存器功能

//I2CR
#define I2CR_IEN (1 << 7)   //I2C使能位(1-使能;0-失能)
#define I2CR_MSTA (1 << 5)  //主从模式选择位(0->1,主机模式,产生start;1->0,从机模式,产生stop)
#define I2CR_MTX (1 << 4)   //发送/接收模式选择位(1-发送)
#define I2CR_TXAK (1 << 3)  //应答类型(0-应答ACK,1-应答NACK)
#define I2CR_RSTA (1 << 2)    //重发start信号(0->1:repeat start)
//I2SR
#define I2SR_ICF (1 << 7)   //数据传输位(0-正在传输;1-传输完成)
#define I2SR_IBB (1 << 5)   //总线忙碌状态(0-空闲;1-忙碌)
#define I2SR_IAL (1 << 4)   //仲裁丢失标志(0-正常;1-丢失)  
#define I2SR_IIF (1 << 1)   //中断标志(0-未产生;1-产生)写0清零
#define I2SR_RXAK (1 << 0)  //接收到的应答类型(0-ACK;1-NACK)
//复用功能引脚配置时,SION位要置1
//SION位置1:开启SION位内部线路可以直接检测物理引脚实际电平

问题解答:
问题:I2C_IIEN标志位置0(中断失能),为什么还能使用中断标志位I2C_IIF作为发送(从机地址、寄存器地址、数据等)已经结束的标志位?
:即使 I2C 的中断功能整体被关闭(IIEN为 0),通过轮询IIF标志位的方式,使得IIF标志位依然能够反映 I2C 模块内部的操作状态,它本质上是I2C模块内部的一种状态指示,而非单纯依赖于中断功能。

http://www.dtcms.com/a/418819.html

相关文章:

  • 零基础学AI大模型之LangChain-PromptTemplate
  • FFT去除规律条纹
  • JAVA中的权限修饰符
  • 前端面试十四之webpack和vite有什么区别
  • 小米路由器 做网站银川森林半岛
  • Kafka04-知识速记
  • 【Linux】高级I/O
  • 开源的容器化平台:Docker高级应用与实战案例
  • 3.7 广域网 (答案见原书 P116)
  • 临淄网站制作首选公司seo排名需要多少钱
  • k8s-部署单master节点
  • Python 2025:量子计算编程的新前沿
  • 二级学院网站建设自评报告互联网营销公司有哪些
  • 做网站滨州现在写博客还是做网站
  • 基于 Service Worker 的图书馆资源缓存技术研究
  • php网站后台验证码不显示哈尔滨教育云平台网站建设
  • 银行门户网站是什么意思网页设计代码中字体的颜色如何改
  • 【代码的暴力美学】-- C语言基础编程题_1
  • Java 架构师系列:JVM 与 AI 负载的优化策略
  • 数据分析-Excel-常用函数
  • Python 文件操作
  • Java 大视界 -- Java 大数据机器学习模型在电商产品销量预测与库存优化管理中的应用
  • 陕西开龄建设网站浙江省建设厅网站如何查安全员
  • 使用 Jenkins 的流水线项目实施 CI/CD
  • 网站建设平台安全问题有哪些方面做网站自动赚钱吗
  • (八)掌握继承的艺术:重构之路,化繁为简
  • 文成做网站国外网站如何做推广
  • 云栖2025 | 阿里云AI搜索年度发布:开启Agent时代,重构搜索新范式
  • 让每次语音唤醒都可靠,公牛沐光重构可观测体系
  • 黄峥的成功之道:重构电商版图的创新密码