(南京观海微电子)——I3C协议介绍

特点

  1. 两线制总线:I2C仅使用两条线——串行数据线(SDA)和串行时钟线(SCL)进行通信,有效降低了连接复杂性。
  2. 多主多从设备支持:I2C支持多个主设备和多个从设备连接到同一总线上。每个设备都有唯一的地址。
  3. 可变的时钟速率:I2C总线支持不同的速率模式,如标准模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)。
  4. 同步通信:I2C是一种同步通信协议,数据传输由时钟信号(SCL)来控制。
  5. 简单的连接:I2C通信对硬件的要求比较低,很容易在微控制器和外围设备间实现连接。
  6. 地址分配:每个I2C设备都通过一个7位或10位的地址来识别,这使得总线上可以连接多个设备。
  7. 阻塞传输:I2C支持阻塞传输机制,即主设备可以在传输过程中控制总线,防止其他设备发送数据。
  8. 应用广泛:由于其简单和灵活性,I2C被广泛应用于各种电子产品中,如传感器、LCD显示器、EEPROM等。
  9. 总线仲裁和冲突检测:在多主模式下,I2C能够处理多个主设备同时尝试控制总线的情况。
  10. 低功耗:I2C总线的设计使其成为低功耗的通信方式,适用于电池供电的设备。

5种速率

I2C协议可以工作在以下5种速率模式下,不同的器件可能支持不同的速率。

  • 标准模式(Standard):100kbps
  • 快速模式(Fast):400kbps
  • 快速模式+(Fast-Plus):1Mbps
  • 高速模式(High-speed):3.4Mbps
  • 超快模式(Ultra-Fast):5Mbps(单向传输)

【bps:bit/s,即SCL的频率】

其中超快模式是单向数据传输,通常用于LED、LCD等不需要应答的器件,和正常的I2C操作时序类似,但是只进行写数据,不需要考虑ACK应答信号。

在I2C协议的官方文档NXP_UM10204_I2C-bus specification and user manual_Rev.6,超快模式和其他模式在3.2和3.1章节分别进行介绍。

4种信号

I2C协议最基础的几种信号:起始、停止、应答和非应答信号

起始信号

I2C协议规定,SCL处于高电平时,SDA由高到低变化,这种信号是起始信号。

停止信号

I2C协议规定,SCL处于高电平,SDA由低到高变化,这种信号是停止信号。

数据有效性

I2C协议对数据的采样发生在SCL高电平期间,除了起始和停止信号,在数据传输期间,SCL为高电平时,SDA必须保持稳定,不允许改变,在SCL低电平时才可以进行变化。

应答信号

I2C最大的一个特点就是有完善的应答机制,从机接收到主机的数据时,会回复一个应答信号来通知主机表示“我收到了”。

应答信号出现在1个字节传输完成之后,即第9个SCL时钟周期内,此时主机需要释放SDA总线,把总线控制权交给从机,由于上拉电阻的作用,此时总线为高电平,如果从机正确的收到了主机发来的数据,会把SDA拉低,表示应答响应。

使用MCU、FPGA等控制器实现时,需要在第9个SCL时钟周期把SDA设置为高阻输入状态,如果读取到SDA为低电平,则表示数据被成功接收到,可以进行下一步操作。

非应答信号

当第9个SCL时钟周期时,SDA保持高电平,表示非应答信号。

非应答信号可能是主机产生也可能是从机产生,产生非应答信号的情况主要有以下几种:

  1. I2C总线上没有主机所指定地址的从机设备
  2. 从机正在执行一些操作,处于忙状态,还没有准备好与主机通讯
  3. 主机发送的一些控制命令,从机不支持
  4. 主机接收从机数据时,主机产生非应答信号,通知从机数据传输结束,不要再发数据了

读写时序

向指定寄存器地址写入指定数据操作时序:

从指定寄存器地址读取数据操作时序:

注意,读数据时有两次起始信号。

7位和10位地址

大多数I2C器件支持7位地址模式,有一些器件还支持10位地址,而且两种类型的器件可以连接在同一个I2C总线上,目前10位地址的器件还没有被广泛使用

主机发送,从机接收。使用10位地址进行写时序:

主机接收,从机发送。使用10位地址进行读时序:

I2C保留字节

I2C读写时起始位之后的第一个字节,除了厂商指定的设备地址外,还有一些保留字节,主要有两组0000 xxx和1111 xxx,保留字节的含义:

上述的10位地址模式,就是使用到了最后一种保留字节

第一种广播模式,可以通过写入第二个字节06h来复位I2C总线上所有的从机器件。具体操作时序可以查看文档NXP_UM10204_I2C-bus specification and user manual_Rev.6:3.1.12 Reserved addresses章节有详细介绍。其中device ID控制字(1111 1xx1),可以读取I2C器件内部的24位器件ID,通过对照NXP I2C协议器件列表可以查询到器件所属的厂商和型号

SDA应该在第9个SCL时钟周期设置为输入状态:

下图的波形是使用Xilinx FPGA对AT24C1024的驱动,使用片上逻辑分析仪ChipScope抓取的实际波形,AT24C1024B存储空间为1024K Bit = 131072 Byte,存储单元地址位宽为17位。

AT24C1024B写时序:

AT24C1024B读时序:

SPI和I2C的对比

  • I2C是半双工,SPI是全双工。
  • I2C支持多主多从模式,而SPI只能有一个主机。
  • 从GPIO占用上来看,I2C占用更少的GPIO,更节省资源。
  • I2C有应答响应机制,数据可靠性更高,SPI没有应答机制。
  • I2C速率不会太高,最高速率3.4Mbps,SPI可以达到很高的速率。
  • I2C通过器件地址来选择从机,从机数量的增加不会导致GPIO的增加,而SPI通过CS选择从机,每增加一个从机就要多占用一个GPIO。
  • SPI协议在SCLK边沿进行数据采样,I2C在SCL高电平器件进行数据采样。
  • 两者大多都应用于板内器件短距离通讯。

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

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

相关文章

题目 2036: 散列存储

题目描述: 给出了几个长度为n(n<20)的全排列&#xff0c;求某个全排列是否在上述的位置出现过。 代码: package lanqiao;import java.util.*;public class Main{public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m …

Python脚本,用于从MagicEden和HowRare API获取指定集合的拍卖列表和稀有度信息,并计算每个NFT的稀有度价格

一个Python脚本,用于从MagicEden和HowRare API获取给定集合的拍卖列表和稀有度信息,并计算每个NFT的稀有度价格。 代码的主要功能如下: 1. 导入所需的模块:`sys`,`time`,`requests`。 2. 定义了一个延迟时间`delay`,用于在每个API请求之间添加一定的延迟。 3. 定义了一个…

Mac安装oh-my-zsh

目录 命令下载 卸载命令 注意 命令下载 curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh 卸载命令 uninstall_oh_my_zsh 注意 终端init的时候并不会执行~/.bash_profile、~/.bashrc等脚本了&#xff0c; 这是因为其默认启动执行脚本…

017-$route、$router

$route、$router 1、$route2、$router 1、$route $route 对象表示当前的路由信息&#xff0c;包含了当前 URL 解析得到的信息。包含当前的路径&#xff0c;参数&#xff0c;query对象等。 使用场景&#xff1a; 获取路由传参&#xff1a;this.$route.query、this.$route.par…

C语言---位运算符练习(二)---单身狗问题

C语言—位运算符练习(二)—单身狗问题 文章目录 前言一、单身狗问题&#xff08;1&#xff09;1.题目2.思路3.参考代码 二、单身狗问题&#xff08;2&#xff09;1.题目2.思路3.代码的实现 前言 上一篇博客&#xff0c;我们留了一个思考题—单身狗问题&#xff0c;下面咱们对这…

【布局:1688,阿里海外的新筹码?】1688重新布局跨境海外市场:第一步开放1688API数据采集接口

2023年底&#xff0c;阿里巴巴“古早”业务1688突然成为“重头戏”&#xff0c;尤其宣布正式布局跨境业务的消息&#xff0c;一度引发电商圈讨论。1688重新布局跨境海外市场&#xff1a;第一步开放1688API数据采集接口 2023年11月中旬&#xff0c;阿里财报分析师电话会上&…

VUE——v-cloak指令

VUE——v-cloak指令 属性选择器&#xff0c;可以控制vue实例化完成前的dom样式 功能&#xff1a;利用vue实例化后v-cloak属性会消失&#xff0c;设置其样式 官网介绍 没用前效果&#xff1a;当vue没渲染完前&#xff0c;界面效果会看到{{aboutCloak}}字符&#xff0c;影响用户…

【万题详解】DFS搜索专题合集(中)

课前C小程序&#xff08;关机&#xff0c;休眠&#xff0c;注销程序&#xff09; 有的时候我们需要让电脑在一段时间工作而不能关机&#xff0c;但是工作完成之后不关机会造成用电浪费&#xff0c;那么使用自动关机命令&#xff0c;就不用担心电脑一直开着会浪费电啦。夜里看电…

UDP与TCP:了解这两种网络协议的不同之处

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

pytorch升级打怪(一)

基础介绍 学习基础知识机器学习的基本流程 快速入门一个简单的目标分类任务执行过程 学习基础知识 机器学习的基本流程 数据处理创建模型优化模型参数保存训练的模型 快速入门 一个简单的目标分类任务 识别衣服的类型 import torch from torch import nn from torch.util…

红包题第一弹

下载附件&#xff0c;发现有86个压缩包 现每个压缩包里面都有图片&#xff0c;010打开图片末尾都有base64部分&#xff0c;并且每个压缩包里面图片末尾的base64长度一样&#xff0c;刚好每一张的base64长度为100。猜测需要拼接起来然后解码 写个python脚本 import os import …

sql server 数据删除操作

删除 DELETE FROM table_name WHERE id < 10000; DELETE FROM [allmedia_restore] WHERE [SYS_DOCUMENTID] < 10000; 清空表 truncate table tableA truncate table [allmedia_restore].[dbo].[DOM_4_DOCLIB] 倒序排序 order by [字段] desc SELECT TOP 1000 [SYS_…

阿里云服务器9元1个月优惠价格表

阿里云服务器9元1个月优惠价格表&#xff0c;用不上9元&#xff0c;又降价了&#xff0c;只要5元。阿里云服务器一个月多少钱&#xff1f;最便宜5元1个月。阿里云轻量应用服务器2核2G3M配置61元一年&#xff0c;折合5元一个月&#xff0c;2核4G服务器30元3个月&#xff0c;2核2…

详解Mysql中redo log、undo log、bin log

目录 1 redo log&#xff08;重做日志&#xff09;2 undo log&#xff08;回滚日志&#xff09;3 Binlog&#xff08;二进制日志&#xff09;4 两阶段提交4.1 执行过程4.2 系统崩溃后重启如何刷新数据4.3 redo log 和 bin log区别 MySQL是一个关系型数据库管理系统&#xff0c;…

对象注入的几种方式

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;JavaEE &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 注入对象 1. 属性注入2. 构造方法注入3. S…

微信小程序uniapp+django+python的酒店民宿预订系统ea9i3

Android的民宿预订系统设计的目的是为用户提供民宿客房、公告信息等方面的平台。 与PC端应用程序相比&#xff0c;Android的民宿预订系统的设计主要面向于民宿&#xff0c;旨在为管理员和用户、商家提供一个Android的民宿预订系统。用户可以通过Android及时查看民宿客房等。 An…

随机选择器

说明&#xff1a; 在阅读本公司源码时发现了一段实现随机选择器的代码&#xff0c;感觉不错&#xff0c;现分享出来。 public class RandomSelector {private final NavigableMap<Integer, Object> map new TreeMap<>();private Integer total 0;Random random …

滑动窗算一下rms

clear clc close all fs20; width16; height16; t(1/fs:1/fs:200); signalsin(2*pi*0.1)rand(length(t),1)3/100*t; figure(1) set(gcf,units,centimeters,Position,[1,2height,width,height]) plot(t,signal) smoothed_avg_values smooth(signal, 20); % 这里的10是…

013 Linux_互斥

前言 本文将会向你介绍互斥的概念&#xff0c;如何加锁与解锁&#xff0c;互斥锁的底层原理是什么 线程ID及其地址空间布局 每个线程拥有独立的线程上下文&#xff1a;一个唯一的整数线程ID, 独立的栈和栈指针&#xff0c;程序计数器&#xff0c;通用的寄存器和条件码。 和其…

【C++】深度解剖多态

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是多态&#xff0c;熟练掌握多态的定义&a…