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

2024-03-17 16:04

本文主要是介绍(南京观海微电子)——I3C协议介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是I3C总线?

 i2c全称是Inter Integrated Circuit,i3c是MIPI(Mobile Industry Processor Interface)移动产业处理器接口联盟推出的改进型i2c总线接口,全称是Improved Inter Integrated Circuit,因此简称为i3c。i3c仍然是采用2根通信线,一根数据线SDL,一根时钟线SCL。i3c向下兼容i2c,也就是i3c总线可以挂载传统i2c接口的器件,使用很是方便。MIPI联盟的新接口标准旨在通过减少传感器系统集成的物理引脚来实现传感器通讯的标准化,提供一个快速、低成本、低功耗、两线数字接口标准。
I3C(Improved Inter Integrated Circuit)升级版的集成电路总线,同样两根总线:SDA和SCL

I3C接口致力于改善I2C的性能,并提供向后兼容,即兼容I2C。i3c向下兼容i2c,但不兼容10bit的i2c扩展地址

I2C vs SMBus?

I2C(Inter-Integrated Circuit,IIC) 最初由飞利浦(Philips)半导体(后并入NXP)在1982年提出,主要目的是提供一种简单的、成本低廉的串行总线,用于MCU和电视机原件进行通信。它在最初是由一个Master(可以多Master)和可以多达127个Slave在由两根线(SDA, SCL)组成的总线上进行通讯。

这样MCU就可以不用再单独和各个设备通讯,而仅仅用两根线就可以和所有外围设备愉快的通话了。这两根线分别是数据线(SDA)和时钟线(SCL)。如此这般,大大节约了芯片引脚数目,方便主板布线,节省了整体成本。良好的设计,慢慢让它得到了广泛应用。这些年下来,I2C从省电和提高速度方面进行了三次版本升级,速度从10KHz提高到最高可达5MHz。现在计算机领域,大多数低速设备都是靠I2C通讯:大多数传感器的数据读取界面是I2C;Clock芯片CK404界面是I2C;内存条SPD信息的读取界面是I2C;有些控制器的界面是I2C,等等。随着速度提高,有些中速设备也是I2C:经常遇到的例子是笔记本电脑的触摸板(Touch Pad)和触摸屏(Touch Panel),只不过界面是HS I2C。

电脑里面常有的一个容易混乱的相似总线是SMBus,它由Intel在1995发布,最早用于和智能电池的通讯,后也经过三次提高,于2000年左右成熟后一直变化不大。SMBus脱胎于I2C,他可以说是I2C的一个子集。它在大部分情况下,也由一个Master(可以多Master)和众多Slave组成,用两根线(SMBDAT和SMBCLK)进行通讯:

I2C和SMBus两者在一般应用下,区别不大,甚至大多数情况下互用也没有问题。更让人迷惑的是,两者可以同时出现在一些设计中,这让一些同学相当疑惑,两者到底有什么区别?在I2C上重新发明一遍轮子有何意义呢?

答案在于I2C偏重速度,而SMBus偏重可靠性和成本。I2C速度从10KHz起步(理论上可以更低至0),最高5MHz;而SMBus最低10KHz,最高100KHz。也就是说在10KHz到100KHz上,两者才通用,这就排除了中速和高速设备。I2C不强制Slave对地址请求发送回应(ACK),而SMBus要求必须ACK。于此对应,SMBus对NACK的要求也严格于I2C。这是因为SMBus面向电脑中很多可拆卸设备,必须确定该设备是否存在,避免误操作。SMBus还加入了WatchDog,在SMBCLK拉低后,不得超过35ms(这就是10KHz的最低频率的由来),否则Slave应该Reset。而I2C并没有该限制。这让SMBus避免了复杂的错误恢复电路。SMBus还提供了单独的SMBSUS来用于Slave向Master报警。

I2C有什么缺陷?

I2C两根线的设计相当简洁而高效,让MCU、PCH或CPU通过两个PIN就可以通讯,节约了成本和简化了设计。但是,所有的通讯都是由Master发起,Slave只是被动相应,这造成很大的麻烦。如果是输出设备还行,但对输入设备,CPU不知道有没有数据,不得不定时Pull I2C总线,看看输入存在与否,这与现代计算机系统设计初衷相反。随着I2C使用越来越广,越来越多的设备加入了更多的带外(sideband)线来补足I2C的缺点,其中最重要的两个线就是中断线INT和一些RESET线,一个经典设计如下:

I2C经典设计

在图中,左边慢速I2C设备虽然共用了一个I2C总线,但每个设备都有自己的INT和Host相连,用于通知Host有事发生,而不是让Host不停来查询,这样才能让Host没事进入省电状态,更加高效。右边的高速设备更是另辟自己的高速I2C总线。如此这般,理想中的简洁设计在现实中越来越被破坏的支离破碎,常常是INT线比I2C线多得多。再加上进一步提高速度的需求,业界呼唤一种新的解决方案。于是I3C应运而生。

I3C来了

I3C特性

  • 明确的定义标准
  • 两条通讯线路(DCL和SDA)
  • 带内中断
  • 带内命令代码
  • 动态寻址
  • 多主/多点通讯特性
  • 支持热链接(是否是热拔插)
  • 错误检查
  • 向后兼容I2C

MIPI Alliance发布了I3C标准,I3C(Improved Inter Integrated Circuit)另一个名字叫做SenseWire,顾名思义,它的初衷是满足众多物联网设备中的Sensor的,它带来众多的改进,除了常说的12.5MHz速度的提高之外:

更重要的是嵌入进协议的软中断。如此,就不需要单独的INT连线了:

与之前的进行对比

I3C在不同模式下与I2C每传输一个bit数据消耗的能量对比(左图)以及比特率的对比(右图)。从结果来看,I3C在各方面都更具优势。I3C的HDR_TSP模式是数据速率最快功耗最低的一种模式,能够支持超过33Mbps的有效数据比特率。

支持动态地址

  i3c支持动态地址,同时可以分配7bit静态地址以适配传统i2c 从设备。i3c从设备地址由主设备仲裁,但并不是所有设备地址都可用,部分地址是i3c标准所保留的,用于后期拓展或者错误仲裁。
在这里插入图片描述
在这里插入图片描述

                                                              部分不可用地址

通讯协议
    1、SDR动态分配地址
    I3C可以为所有的I3C从设备动态的分配7-bit address
在I3C从设备中会有两个standardized characteristics register和内部的48-bit的临时ID去协助此过程
Bus Characteristic Register    这个只读寄存器描述了I3C兼容设备在动态地址分配和通用命令代码中使用的角色和功能 


Device Characteristic Register    这个只读寄存器描述了I3C兼容的设备类型(例如加速计、陀螺仪等),用于动态地址分配和通用命令代码 
仍然支持I2C的静态地址
传统I2C设备需要提供的只读寄存器:Legacy Virtual Register,用来描述该I2C设备的功能(工作模式,时钟频率等)


    2、主设备发送的地址

    发送静态地址:持有该地址的I2C从设备响应
    发送7位的0X7E:此地址为广播地址,所有的I3C从设备都会对这个地址进行响应,所有的I2C从设备都不会对这个地址进行响应,因为I2C中该地址是保留的。
    发送动态地址:持有该地址的I3C从设备响应
 
        I3C Slave设备不需知道自身处在I2C总线上或是I3C总线上。如果其自身有一个I2C静态地址,那么它可以一直使用这个地址,直到被赋予一个动态地址。一旦被赋予了动态地址,它就必须作为一个I3C Slave设备工作,除非被要求重置。在被赋予动态地址之前,I3C Slave 设备只能以I2C设备的方式工作,但是添加了以下特性:
        必要时候紧接着START条件可以响应I3C广播协议。
        正确处理CCC的ENTDAA和SETDASA命令。 / AMSS/ sm8250_slpi/ slpi_proc/ ssc/ inc/ utils/ sns_com_port_types.h

低目标电压
  i3c标准的目标电平电压是3.3V、1.8V、1.2V,甚至更低。


支持软中断
  传统i2c、spi接口需增加中断线通知主控制器,i3c支持软中断,无需外部中断线,传感器数目多的情况下,节约IO引脚和中断资源。i3c软中断的基本原理是,当总线处于空闲状态时,从设备可以通过中断机制发送一个"START"信号,然后主设备会为从设备提供一个时钟信号,从设备可以通过主设备提供的分配地址将设备驱动到总线上来启动中断。如果此时有多个从设备尝试启动中断,则地址最小的从设备获得此次仲裁。同时主设备发出ACK信号响应此次中断并重新启动总线或者继续从从设备接收数据,也可以发出NACK信号来结束通信。


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_20553613/article/details/105896530

这篇关于(南京观海微电子)——I3C协议介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/819433

相关文章

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优