在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 11189|回复: 7

[原创] I3C 总线通讯

[复制链接]
发表于 2017-8-10 08:15:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

I3C主要通讯协议和模式是SDR模式。SDR协议大部分是基于I2C协议的,部分引入一些显著的变更。

l
I3CSTARTSTOP仍然是可以被I2CSTARTSTOP识别,但是timing稍微有些变化。

l
I3C的地址头仍然与I2C的地址头在格式和信号上相匹配,但是时序上可能有变化。

l
仍然沿用9bit字长,但是第9bit定义改变。

l
I3CSCL线只被Master驱动。一般情况下采用Push-Pull,但也可以是Open Drain

正因如此,地址头、数据长度都是相同的,I3C Slave只需要知道一条发送到本设备地址的消息是否为I3C消息即可。

一条I3C消息起始于START终止与RepeatedSTARTSTOP,包含全部需要传输的信息。

一条I3C消息一定是SDR模式的,如果满足下列条件:

地址头是7’h7E,广播地址,所有I3CSlave都对该地址进行响应。任何I2C设备都不会对该地址进行响应,因为在I2C中该地址是保留的。

地址头选中了动态分配地址。

所有的I3C设备都不应对广播地址以及动态地址以外的地址进行响应,而必须响应广播地址和自身动态地址,必要时候可以NACK

1.png

1.1.1.1
I3C Slave 设备的角色

I3C Slave设备不需知道自身处在I2C总线上或是I3C总线上。如果其自身有一个I2C静态地址,那么它可以一直使用这个地址,知道被赋予一个动态地址。一旦被赋予了动态地址,它就必须作为一个I3C Slave设备工作,除非被要求重置。

在被赋予动态地址之前,I3C Slave 设备只能以I2C设备的方式工作,但是添加了以下特性:

必要时候紧接着START条件可以响应I3C广播协议。

正确处理CCCENTDAASETDASA命令。

I3C Slave的角色应当如下:

紧随STARTRepeated START条件,以任何速率尝试对I3C总线上的广播地址或指向自己的地址进行响应。一旦被选中,则I3C Slave就把这一条消息当成SDR模式处理。

如果一条消息指向Slave的动态地址,那么Slave可以ACK或简单NACK这个地址头。

如果ACK,则I3C SlaveSDR模式处理这条消息。

如果NACK,则抛弃接下来的任何数据,等待下一个STARTRepeated START

如果消息是一条广播消息,且读写标识为写,则Slave需要至少处理数据中的头一个字节。

如果广播消息的数据为一个字节,则这则消息为CCC

I3C Slave 必须处理所有可以应用的CCC命令。一条命令可能是必须的,也可能根据上下文可选的。

如果CCC命令改变了了I3C总线的模式,则I3CSlave必须以下述两种方式中的一种来处理:

如果新的模式为动态地址指定模式,并且请求的是所有I3C Slave,则当前没有动态地址的设备都要参与地址的指定;已经有动态地址的则等待动态地址指定模式的退出。

如果新的模式为HDR,则支持HDRSlave 可以选择进入HDR,不支持HDR的设备则启动本设备的HDR退出监测器以监听HDR Exit序列的到来。

如果消息的地址头既不是广播也不是动态地址,则I3C Slave必须等待Repeated START 或是 STOPSlave可以记录或监测总线上传输的位流,但在总线上只能进行等待。

1.1.1.2
I3C的地址头

I3C的地址头紧随着STARTRepeated START。地址头的格式同I2C完全一致:7bit地址,1bit读写位,1bit应答位。

紧随着START的地址头是一个可仲裁的地址头、这意味着,START,至少地址的起始bit,以及应答位使用SDAOpen Drain模式。但是,一些可仲裁的地址头也可以使用Push-Pull模式来加速通讯速率。

紧随着Repeated START的地址头永远使用SDAPush-Pull模式来驱动,除非有ACK/NACK例外。

使用I3C可仲裁的地址头,I3C Slave可以想Master传输以下三种请求:

In-Band 中断请求,这等同于使用额外的中断总线请求Master的介入控制。In-Band中断请求必须使用RnW位置1的设备动态地址。

Secondary Master 请求,除非I3C Slave标记为支持此功能,否则不应请求这个功能。Secondary Master 请求必须使用RnW位置0的地址头。

热接入请求,只有当I3C总线可操作时,I3CSlave才可以发出此请求。该请求使用的头地址必须为特殊的7’h02 Hot-Join

I3C Slave只能在以下两种总线状态下发出上述请求:

1.
START起始在总线上出现,注意不是Repeated START,并且接下来是总线可用状态,SLAVE就可以传送自己的动态地址,或是Hot-Join地址,并遵循地址仲裁机制。

2.
总线处在可用状态,这时Slave就是可通过将SDA拉低来起始一个START序列

a.
如果SlaveSDA拉低后,然后Master尽快将SCL拉低,这段时间并未进行严格定义。

b.
Master也应该将SDA拉低一段时间,形成时间重叠。

c.
一旦MasterSDA拉低后,Slave就可以使用Open-Drain模式控制SDA线。

d.
此时Slave就可以传输地址了。

I3C地址仲裁

紧随着START的地址头是可仲裁的,意味着MasterSlave双方都有可能个试图驱动SDA线。这样的地址头被定义为可仲裁的地址头。

仲裁机制采用常用的Open-Drain模式。所有传输地址的设备都要遵守这一个规则:

1.
如果当前要传输的bit0,则设备需要在SCL下降沿之后将SDA线拉低,并保持到下一个SCL 的下降沿。

2.
如果当前要传输的bit1,设备就释放SDA线,在SCL的下降沿后将SDA置为高阻态。

a.
另外,设备需要在SCL的上升沿后监测SDA有没有变为低电平,以探测是否有其他设备在驱动SDA线。

b.
如果有其他设备驱动SDA线,导致SDA变为低电平,那么当前设备就丢失了对总线的控制权,并退出。也就是说,这时候当前设备不可再传输任何数据,而需要等待以后出现的START条件。

I3C地址仲裁优化

I3C可仲裁地址头的传输过程是可以被优化的。

前述I3CMaster 设备传送范围为7’h03-7’h7B范围的7bit动态地址,由于I3CMaster将整个9bit都视为Open-Drain模式,因此没有办法知道此时是否有别的Slave Device正在传送其地址。

注意,对于I3C Secondary MasterI3C In-Band中断请求的Slaves来说,I3C Master不必限制动态指定的地址在低半段(7’h03-7’h3F),保留地址的A6位为0.

采用了这样的做法以后,I3C Master就可以可选性得对地址进行仲裁了:

l
如果I3C Master传送一个bit 1,例如传送7h’7E时,那么就可以在SCL的上升沿监测SDA的状态。如果SDA确实变为1,那么I3C Master可以将剩余的地址使用Push-Pull方式传输完。

l
如果I3C Master传输一个bit 0,或者SDASlave 拉低,那么I3C Master必须将剩余的地址使用Open-Drain方式传输。

l
如果I3C Master是单独向I3C 设备传输数据,那么可以将SCL的脉冲宽度降低到50nS以下,结果是I2C设备仅仅看到纵向上的0。降低脉冲宽度获得了更快的数据传输速率,因为Open-Drain的仲裁机制仅仅是将低电平延长了。


l
如果I3C Master希望想I2C设备传输数据,那么它必须使用低速的I2C时序来完成。

3.png

Master使用I3C Slave 地址启动一帧传输的序列

I3C Master通常应使用7’h7E或是I2C 的静态地址。

两种情形下,地址都可能被仲裁,所以Master必须监测总线上是否有IBIMastership 请求,Hot-Join请求发生。

l
如果没有发生这些请求,则按照正常流程处理即可。

l
如果发生这些请求,则Master需要ACKNACK这些请求。

如果Master使用动态地址来启动一次传输,那么需要引入特殊,因为相同的地址可能正在请求IBIMastership Hot-Join。可能有如下的情况发生:

1.
地址相同,但是RnW位不同,并且Master正在写(RnW=0);所以Master获得控制权(SlaveIBIRnW=1),可以正常执行。

2.
地址相同,但是RnW位不同,并且Master正在读(RnW=1);所有Master失去控制权,Master应该ACKNACKSlave Mastership请求。

3.
地址和RnW都相同,这时MasterSlave都等待对方进行ACKNACK

a.
这是一个困境,因为Master无法得知NACK是由于上述情形导致的还是Slave主动NACK的。

b.
Master应该在Repeated START后再次发送设备地址。这样可以探测究竟是哪种情况导致了死锁的发生。

Repeated START后使用Push-Pull输出的地址头

Repeated START后传送的地址头不应该被仲裁。也就是说,Repeated START后不应该有任何设备尝试传输自己的地址或是Hot-Join地址。


因此,如果不是发往I2C Slave的消息,应使用Push-Pull模式的SDA。接下来RnW位后的ACK/NACK永远是Open-Drain,以允许Slave ACK或被动NACK

4.png

 楼主| 发表于 2017-8-10 08:22:15 | 显示全部楼层
发表于 2017-9-15 19:17:50 | 显示全部楼层
学习一下啦
发表于 2019-7-15 17:08:49 | 显示全部楼层
翻译的很僵硬了
发表于 2020-3-19 18:18:26 | 显示全部楼层


窜天猴 发表于 2019-7-15 17:08
翻译的很僵硬了


楼主,你好,问个问题,I3C设置动态地址的好处是什么?
发表于 2020-4-7 09:08:41 | 显示全部楼层
学习学习
发表于 2022-11-14 19:57:17 | 显示全部楼层
very good
发表于 2023-12-4 10:15:07 | 显示全部楼层
好难
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-27 05:58 , Processed in 0.022226 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表