MIPI CSI-2笔记(11) -- Low Level Protocol(统一串行链路,Unified Serial Link)

 USL系统框图

        统一串行链路(USL,Unified Serial Link)是一个可选的CSI-2特性,它能够减少接口信号线数量并且能让通信距离变长。

        USL构建在由LRTE特性提供的优点之上。使用USL,相机命令接口CCI(Camera Command Interface)所用的I2C,I3C或SPI互联接口、或者用于相机模块控制信号的的GPIO所需的额外信号线可以不再需要或减少。这是通过使用CSI-2封装了本地支持C-PHY v2.0(或更高版本)、D-PHY v2.5(或更高版本)传输层的总线转向BTA(Bus Turn Around)能力来实现的。

        MIPI PHY带宽相比于I2C和其兼容的两线双向控制总线要大了很多个数量级。还有一点是,还有很多天然的空白间隔(blanking,即idle周期)存在于传输水平的行数据之间(即horizaontal blanking)以及传输帧数据之间(即vertical blanking),这些窗口能够被用来更新图像传感器的影子寄存器。

        本笔记中:

        术语SNS表示一个图像传感器,或者是一个图像传感器模块,这个模块由一个CMOS图像传感器加上额外的一些互补设备(非图像设备)构成。

        术语APP表示一个SoC应用处理器(AP),AP包含了任意的包含计算机视觉引擎和(或)图像处理单元、或是host处理器的组合。

        从APP到SNS的反向链路不要求高带宽,因此SNS收发器的接收器的时序约束和边界的要求很宽松。通过MIPI C-PHY/D-PHY映射所有CSI-2事务能够减少信号线的数量、支持更长距离、辅助安全信道的实现方案以及降低工程开发成本。

USL技术概览

Lane的使用

        绝大多数图像应用程序在使用USL时,都期望能够Lane被映射到一条独立的双向Lane(Lane 1)的管道上。如果管道有多条Lane,那么Lane 1要是双向的,剩下的lane是单向的,配置给图像传感器做TX。多Lane的管道中,链路中所有Lane都被用于USL_FWD Mode操作,只有第一条Lane(Lane 1)被用于USL_REV Mode操作。收发器功能总是被限制在一条Lane上(Lane 1)。

 USL命令和事务

        包头PH的Data Type值0x38以及CSI-2长包格式用来进行USL命令操作和事务。一个“USL  packet”是Data Type为0x38任意长包。

虚拟通道Virtual Channel

        为了便于在系统平台上使用sensor aggreation,SNS要支持带虚拟通道标识符VCI的USL包,VCI(Virtual Channel Ideitifier)的值对于D-PHY来说范围在0 - 15,C-PHY是0 - 31。CSI-2 Frame Start和Freame End短包不能用任何USL包里独占的VCI来发送。在USL包里所使用的VCI可以用于Data Type不是0x38(非USL包)的CSI-2包。但是, 对于每一个图像帧中的每一个共享的VCI,要求CSI-2 Frame Start和Frame End短包对儿囊括所有的非USL包。

USL命令载荷结构

        所有USL传输操作使用现有的CSI-2长包(LgP)结构。封装的USL载荷字段(Size_Bytes,Slave_Address,Sub_Address,Write_data,Read_data,USL_CTL,TSEQ)映射LSB数据到 Bit0。所有多字节USL载荷字段按照最低有效字节优先(least significant byte first)的顺序传输。

        USL命令被用来映射APP到SNS的寄存器读写请求,以及从SNS到APP的读操作结果,过程中使用CSI-2 LgP。当一个APP或SNS产生USL Command寄存器R/W请求或结果时,LgP包头Data Type是0x38。对于所有C-PHY或D-PHY高速HS Mode传输来说,封装的R/W请求被映射进了USL包的LgP包数据域的应用特定载荷(LgP Packet Data Field Application Specific Payload
)域段。如下面两张D-PHY和C-PHY长包格式图中Application Specific Paylaod域段所示:

 D-PHY物理层长包结构

 C-PHY物理层长包格式

        所有USL的实现方案要支持 PHY LP或LVLP Mode信号,推荐支持ALP Mode信号。无论是D-PHY还是C-PHY下,USL系统通常在power-up之前就被配置为支持这些信号模式中的一种了。

        如果USL被配置为使用C-PHY或D-PHY LP/LVLP Mode,那么所有发送的使用正向(Forward Direction)或反向(Reverse Direction)Escape MODE LPDT的USL包和使用D-PHY HS Mode发送的USL包的格式是一样的。每一个字节同样也是least significant bit优先发送。APP要能够接收在分发到所有活动的(Active)Lane上的HS Mode传输的USL包,也要能在Lane 1上接收Escape Mode LPDT传输的USL包。

        在USL_REV模式中,SNS要支持缓存至少来自APP的32个寄存器读请求(单个读以及连续读)。在USL_REV模式中,SNS要支持至少来自APP的64个寄存器写请求(单个读以及连续读),以及至少1024位的写数据。

        如果USL被配置为使用C-PHY或D-PHY ALP Mode,那么在USL_REV_Mode中,使用C-PHY EPD或D-PHY EPD的选项2,APP可以把多个USL包连接成一个独立的HS burst传输,在Lane 1上进行传输,前提是LRTE EPD特性是支持的。SNS HS Mode接收器的LRTE功能可能会在SNSN的datasheet或其他途径获得。类似有USL_FWD Mode中,使用刚刚提到的两种EPD选项中的一种时,SNS可以将多个USL和(或)非USL包连接成1个独立的HS burst传输分发到所有活动的Lane上。

        如果USL被配置为使用C-PHY或D-PHY LP/LVLP Mode,那么当处于USL_FWD Mode中,使用任意支持C-PHY或D-PHY LRTE EPD特性(包括D-PHY EPD选项1)时,SNS可以将多个USL和(或)非USL包连接成1个独立的HS burst传输分发到所有活动的Lane上。当处于USL_FWD或USL_REV Mode时,LRTE D-PHY Option 2可以用来连接多个使用Escape Mode LPDT发送的USL包,但包之间只带0个或多个固定长度Spacer,没有EoTp短包的插入。使用LPDT发送的USL包的SNS Spacer生成过程可以通过APP来控制,使用“Image Sensor LPDT LRTE Control Register”寄存器表格中定义的寄存器实现。这个表格请参考下面的链接:

MIPI CSI-2笔记(10) -- Low Level Protocol(延迟降低、传输效率增强特性LRTE)_亦枫Leonlew的博客-CSDN博客LRTE是一个可选的CSI-2特性,它能够促使系统达到最优的传输效率,以便支持新兴的图像应用。LRTE有个部分:Interpacket Latency Reduction (ILR),包间延迟降低Enhanced Transport Effeciency,传输效率增强。https://blog.csdn.net/vivo01/article/details/126504904?spm=1001.2014.3001.5502       SNS LP/LVLP Mode接收器的LRTE能力可能会在SNSN的datasheet或其他途径获得。

        现有的LgP 16-bit校验和被用来保护传输完整性。USL命令事务(Command transactions)不需要legacy CCI “S”(Start),“P”(Stop)以及“A”(ACK),因为LgP传输处理了这些事情。

        16-bit Size_Bytes字段包含了要写或读的数据的长度。Read_Data字段包含了读出的数据。Write_Data包含了要写入的数据。

        7-bit Slave_Address字段包含了命令要发送到的设备地址或要读取数据的设备地址。例如,CCI(I2C)的Slave地址0x6c被用来和图像传感器进行通信,使用USL的时候也会应用这个0x6C。这个字段的高有效7位被发送出去,它的LS位可类比于CCI R/W bit。

        16-bit Sub_Address字段被用来在slave设备中定位寄存器地址。实际的图像系统产品根据实际需要,可能使用8位和(或)16位地址,Sub_Address是设备特定的,在平台层面上可以得到。需要注意的是,使用一条USL链路和多个设备进行通信的系统,例如通过局部I2C总线,这些系统上可能会根据设备不同,要求同时使用8位和16位索引。

        8-bit USL_CTL(USL Control)被用来保证从APP到SNS的命令完全到达,这是通过使用ACK来实现的。USL_CTL也被用来改善连续R/W操作的传输效率,这些操作通常被用来从APP到SNS更新图像和视觉固件。

        16-bit TSEQ(Transaction Sequence)字段包含了一个唯一非0的USL命令识别号,这个号由SNS和APP产生。SNS和APP在成功收到一个USL包的时候会对TSEQ字段进行生成和清除。

图像传感器LPDT LRTE控制寄存器

 USL传输控制(USL_CTL) Bit描述

USL操作过程

        为简单起见,本小节的所有例子的前置条件是:

        16-bit Sub_Address[15:0]

        16-bit 事务序列号TSEQ(Transaction Sequence)包含一个唯一的非零USL命令识别号,由APP生成

APP发起的USL事务

        下面的例子展示了APP发起了4次有效的USL命令事务(USL_REV Mode)。

1. ACK Generation

        TSEQ被系统用来确保USL命令一定到达了对方。APP包含一个16-bit寄存器来保存TSEQ,这个TSEQ是从处于USL_FWD Mode的SNS侧接收到的最后一个成功的TSEQ。在进入USL_REV Mode时,APP使用如下格式生成两次ACK:

        LgP 包头Data ID = 0x38

        用于生成ACK的LgP 包 Data Format:

                {USL_CTL[7:0], TSEQ[15:0]}

2. 带Write Data的寄存器写请求

        LgP 包头Data ID = 0x38

        用于所有写请求的LgP 包Data Format:

                {USL_CTL[7:0], TSEQ[15:0], Size_Bytes[15:0],
                Slave_Address[7:1],[W=0],
                Sub_Address[15:0],
                Write_Data [16’d Size_Bytes-1:0]}

3. 寄存器读请求

        LgP 包头Data ID = 0x38

        用于所有读请求的LgP 包Data Format:

                {USL_CTL[7:0], TSEQ[15:0], Size_Bytes[15:0],
                Slave_Address[7:1],[R=1],

                 Sub_Address[15:0]}

4. 发起BTA(Bus Turn Around)

        当完成R/W寄存器命令后,APP会生成两次Initiate BTA包来将link从USL_REV切换到USL_FWD模式。

        USC_CTL的Initiate BTA bit设置为1'b1

         LgP 包头Data ID = 0x38

        用于发起BTA和从USL_REV切换到USL_FWD的LgP包Data Format:

        {USL_CTL[7:0], TSEQ[15:0]}

 SNS发起的USL事务

        下面的例子展示了SNS发起了5次有效的USL命令事务(USL_FWD Mode)。

1. NAK Generation

        如果一个图像传感器(SNS)从应用处理器侧(APP)收到了一个非法的USL命令请求,那么SNS会产生一个NAK(Nagetive Acknoledgement)。默认情况下,处于USL_REV_Mode时,在NAK之后,SNS不再执行任何后续从APP来的R/W USL命令请求。除非USL_CTL Force Command bit被APP所启用。SNS会对第一个来自APP的非法的或失败的R/W请求生成NAK。SNS可以选择对“Force Command”的后续请求产生NAK。在切换到USL_FWD_Mode后,会立刻发送两次NAK到APP,NAK格式如下:

        {USL_CTL[7:0], TSEQ[15:0]}

2. ACK Generation

        TSEQ被图像产品系统用来确保从APP到SNS的R/W命令一定到达了。图像传感器包含一个16-bit寄存器来保存TSEQ,这个TSEQ是从处于USL_REV Mode的APP侧接收到的最后一个成功的TSEQ。在进入USL_REV Mode时,SNS使用如下格式生成两次ACK:

        LgP 包头Data ID = 0x38

        用于生成ACK的LgP 包 Data Format:

                {USL_CTL[7:0], TSEQ[15:0]}

3. 寄存器读完成

        LgP 包头Data ID = 0x38

        用于所有读完成的LgP 包Data Format:

                {USL_CTL[7:0], TSEQ[15:0], Size_Bytes[15:0],
                 Read_Data [16’d Size_Bytes-1:0]}

4. 中断生成

        在完成ACK/NAK生成的时候,在USL_FWD模式中,SNS可以使用USL_CTL[1:0]来产生带内(in-band)中断。强烈建议SNS在最早的时机做中断通知的优先级排序和产生过程。

        如下是对应数据格式,里面也包含了一些属于中断的可选的信息:

        LgP 包头Data ID = 0x38

        用于带内中断产生的LgP包Data Format:

        {USL_CTL[7:0], Slave_Address[15:0], Interrupt_Information[15:0]}

5. 发起BTA(Bus Turn Around)

        在将链路从USL_FWD 切换到USL_REV模式之前,SNS会生成两次Initiate BTA包。USC_CTL的Initiate BTA bit设置为1'b1。TSEQ的值从16-bit REG_USL_ACK_TSEQ寄存器中得到。

        LgP 包头Data ID = 0x38

        用于发起BTA和从USL_FWD切换到USL_REV(注意,规范原文是USL_REV到USL_FWD,个人觉得规范有误,各位请自行判断)的LgP包Data Format:

        {USL_CTL[7:0], TSEQ[15:0]}

 USL命令传输完整性检查

        本小节展示了使用TSEQ和两个SNS寄存器来检查USL命令传输的完整性的步骤。

1. [System Reset] [Power Cycle]

        SNS复位REG_USL_ACK_TSEQ[15:0]和REG_USL_NAK_TSEQ[15:0]寄存器为16'd0。APP复位内部寄存器APP_REG_USL_ACK_TSEQ[15:0]。

2.[USL_REV Mode]

        在进入USL_FW Mode时,APP从内部寄存器APP_REG_USL_ACK_TSEQ[15:0]获取16-bit TSEQ,产生两次ACK。

        APP生成一个16-bit非零TSEQ值,这个值和每个发送到SNS的USL命令R/W请求同步增加。

        SNS存储最后一个成功的USL命令的TSEQ到REG_USL_TSEQ_ACK[15:0]寄存器。

        SNS存储第一个非法USL命令的TSEQ导REG_USL_TSEQ_NAK[15:0]寄存器。

 3. [USL_REV Mode Exit]

        APP复位内部寄存器APP_REG_USL_ACK_TSEQ[15:0]为16'd0。

4.  [USL_FWD Modde]

        在进入USL_FWD Mode时,如果在之前USL_REV Mode中遇到过任何非法操作,SNS使用寄存器REG_USL_NAK_TSEQ[15:0]的16-bit TSEQ产生两次NAK。

        接下来,SNS使用寄存器REG_USL_ACK_TSEQ[15:0]的16-bit TSEQ产生两次ACK。

        如果SNS没有从处于USL_REV Mode的APP侧成功接收任何USL命令,SNS会生成一个TSEQ值为16'd0的ACK。

        注意:SNS要复位一些内部状态,这些状态被用来在NAK后阻塞后续命令操作的执行。

5. [USL_FWD Mode Exit]

        SNS复位REG_USL_ACK_TSEQ[15:0]和REG_USL_NAK_TSEQ[15:0]寄存器为16'd0。

USL上电/复位,SNS配置以及模式切换(USL Powerup/Reset, SNS Configuration,Mode Switching)

        本小节讨论USL操作的不同阶段的细节。需要注意当切换USL模式时,总是由当前的TX方发起BTA。

USL链路模式(USL Link Modes)

         USL链路在以下条件满足时处于USL Rerverse Mode(USL_REV):

  •         SNS被配置为RX
  •         APP被配置为TX
  •         通道被创建来传输从SNS到APP的载荷

        USL链路在以下条件满足时处于USL Forward Mode(USL_FWD):

  •         SNS被配置为TX
  •         APP被配置为RX
  •         通道被创建来传输从SNS到APP的载荷

USL Power-up/Reset

        链路在上电(power-up)或复位(reset)后,进入USL_FWD Mode需要:

        SNS初始配置每条PHY Lane(如存在时钟Lane,时钟Lane也包含在内)为TX

        APP初始配置每条PHY Lane(如存在时钟Lane,时钟Lane也包含在内)为RX

        SNS和APP随后会按照PHY定义好的过程初始化它们的Lane 1。其他所有的Lane都是单向的,它们都保持未初始化状态直到有需要的时候再初始化。

        如果USL被配置为使用D-PHY ALP Mode,那么时钟Lane也要按照它的初始化流程进行初始化并启动,以便在数据Lane 1上使用ALP Mode fast BTA和高速数据传输。

        如果USL被配置为使用D-PHY LP/LVLP Mode,那么时钟Lane的初始化和启动可以延后到SNS第一次使用HS Mode发送包到APP的时候。需要注意的是在这种模式下,所有在数据Lane 1s上,从APP到SNSUSL包的传输过程使用Escape Mode LPDT,不需要时钟Lane处于running状态。

        一旦SNS完成了内部的上电/复位校准,SNS在Lane 1上发起BTA,其步骤在前面"SNS发起的USL事务"一节中说明。SNS可以在发起BTA之前,使用读完成格式(read completion format)发送TX_USL_SNS_BTA_ACK_TIMEOUT[15:0]里的数据。

        在BTS完成时,链路被配置为了USL_REV Mode,这样就能让APP使用Lane 1来配置SNS了。

        在SNS配置过程中,APP可以选择活动Lane的总数量,以便在图像数据流启动时能让正确数量的单向Lane被初始化并且正常服务。

USL SNS配置

        当链路处于USL_REV Mode时,APP可以配置SNS(使用“APP Initiated USL Transactions”这个章节里的步骤)。

  •         一旦APP完成了1个或多个SNS配置操作后,APP会发起BTA。
  •         BTA完成的时候,链路被配置为USL_FWD Mode

USL模式切换方式的SNS配置

        SNS在内容准备好后,产生USL read completion,处于USL_FWD Mode时,这个read completion可以和非USL载荷交织(interleaved)起来。

        SNS支持两个16-bit USL BTA Switch寄存器,这两个寄存器在下面两个表格中说明。APP在USL_REV Mode的时候配置这两个寄存器。

USL BTA Switch Registers

TX_USL_REV_FWD_ENTRY寄存器

        对于传统的摄像和视频应用来说,USL BTA切换可以在垂直blanking时间中发起。对于更加高级的视觉应用,USL BTA切换可以在预定义的LgP(帧内)之后发起。CSI-2图像视觉系统(Imaging  and Vision systems)会要求fast BTA持续时间映射到PHY。

USL Modes Link Transitions 

        上图展示了APP和SNS的USL_REV和USL_FWD状态图。USL SNS要支持16-bit Operation寄存器,如下表所示:

        USL SNS要支持1个或多个16-bit GPIO寄存器,如下表所示:

ALP Fast BTA Timeout支持

        由于目标设备的PHY在收到一个来自发起者的“Initiate BTA” USL命令请求时,没有提供一个用于确认的电子信号,APP利用了下面的SNS超时寄存器来减少潜在的死锁。

 TX_USL_SNS_BTA_ACK_TIMEOUT寄存器

 TX_USL_APP_BTA_ACK_TIMEOUT寄存器

D-PHY ALP Mode下的USL 时钟Lane管理

        当USL配置为使用D-PHY ALP Mode时,需要有一条运行的高速时钟Lane,用来实现SNS和APP之间的数据通信。这些通信包含了常见的forward方向SNS像素流,以及在数据Lane 1上的双向事务,这些事务关联于SNS或APP发起的USL包传输(DT编码0x38)、任何底层PHY fast BTA或ULPS命令。当USL被配置为使用D-PHY LP或LVLP Mode时,时钟Lane只需要在SNS像素流传输中存在。

系统上电和(或)复位

        SNS ALP Mode TX和RX PHY的初始化后,SNS在切换到USL_REV模式之前,会以某个初始的、依赖于实现方案的频率运行。举例来说,这个频率可能和SNS的外部参考时钟频率一样,以此避免去启动和锁定PLL,可以潜在地节省启动延迟中的数百个时钟。这里需要特别小心的一个点是要确保选择的时钟Lane的频率,至少要是D-PHY规范所要求的最小bit rate的两倍。因为USL所使用的D-PHY高速 reverse-direction数据传输只有forward-direction数据传输的bit rate的四分之一。举例来说,2MHz的时钟Lane频率,对应一个4Mbps的forward-direction数据传输bit rate,但只有1Mbps的reverse-direction数据传输bit rate。

        一旦时钟Lane开始运行,SNS就能按照需要使用USL协议切换到USL_REV Mode以便APP配置SNS寄存器,包括用于设置图像数据流所需的时钟Lane频率的PLL控制寄存器。APP最后做的动作是通过写入合适的控制寄存器请求开始图像数据流,随后切换到USL_FWD Mode。SNS的响应过程是,停止时钟Lane,锁定所有PLL到配置的频率,重启时钟Lane,随后开始发送图像数据流。

动态时钟控制

        USL允许时钟Lane在某些周期内停止,这些周期中,系统应用要么不支持SNS和APP之间的数据传输,要么不会立即参与数据传输。

        这些周期的例子有:

  •         图像数据streaming中图像行之间的一个或多个水平行blanking(hblank)周期(假设这些周期足够长,足以包含时钟停止后重启过程中所需要的时序开销)。
  •         图像数据streaming中图像帧之间的全部或部分垂直blanking(vblank)周期。
  •         当图像传感器功耗最低,并且不允许访问内部寄存器时的“Hard standby”周期。通常Hard standby的进入和退出使用一个独立的控制信号来控制(比如XSHUTDOWN信号)。
  •          图像数据streaming中临时停止,以便让APP重新配置和基础SNS工作特性相关的寄存器时,全部或部分“soft standby”周期。这些基础SNS工作特性的例子有输出图像的分辨率、像素深度、帧率、bit rate、有效的Lane数量等。

        停止和重启时钟Lane的过程,可能是APP提前知道的约定方式,由SNS自动进行;或者是SNS按照专门的方式响应APP。举例来说,当时钟Lane在USL_REV模式下运行时,APP可以通过写入SNS上的一个特殊的控制寄存器来命令SNS停止时钟。相反地,当时钟Lane在USL_REV模式中停止时(意味着无法访问寄存器),APP可以通过发送一个短的D-PHY ALP Mode PHY-TO-PHY Wake脉冲到SNS来请求SNS重新启动时钟。

        注意改变时钟Lane频率要求SNS停止时钟Lane,在内部调整频率(可能会涉及重新锁定PLL),随后按照D-PHY规范重启时钟Lane。不用说,后面的动作总的来说会很耗时,当需要在相对较短的时间周期内(比如hblank)从USL_FWD模式切换到USL_REV模式然后又切回来时,最好要避开这些操作。换句话说,如果APP需要在hblank中访问SNS的寄存器,那么理想情况是:SNS和APP同时都能支持reverse-direction传输,传输的速率是用于像素数据包streaming的速率的四分之一,这样就避免了在hblank中要改变两次时钟Lane频率。

Sensor Vblank周期中USL ALP Mode时钟Lane管理示例

        以上图为例子来分析时钟Lane的管理(Sensor Vblank周期,USL ALP Mode):

        时间点“A”的时候,SNS在发送完CSI-2 Frame End短包以及使用USL协议进入到USL_REV(以便让APP开始访问SNS寄存器)模式之后,SNS自动地保持时钟Lane处于运行状态。在这个点上,APP也可能会启动一个内部timer用来计时,在vblank周期快要结束时可以警告APP。

        在时间点“B”,APP至少在完成了本次寄存器访问,它最后执行的访问是写入到TX_USL_ALP_CTRL寄存器的动作,这个动作想要达到的效果举个例子来说,可能是命令SNS关闭时钟Lane但也期望在后面的某个时间通过请求重启时钟Lane。

 USL TX_USL_ALP_CTRL寄存器

        USL_REV模式会一直保持住(所有D-PHY时钟和数据Lane都处于Stop状态),直到在时间点“C”的时候,APP通过发送一个短的ALP Mode PHY-to-PHY Wake脉冲信号到SNS,请求时钟Lane重新启动。作为响应,SNS重启时钟Lane并保持为运行状态,这样可以让APP执行更多的寄存器访问。

        当到达时间点“D”的时候,APP在SNS必须要发送Frame Start帧表示下一帧图像开始之前,切换回USL_FWD状态。

USL Hard Standby Mode

        USL hard standby的进入和退出本质上可以和legcy 非USL图像传感器采用相同的方式来控制。在hard standby模式中,所有Lane(包括时钟Lane(如果有的话))一般都处于forward-direction ULPS状态,APP不能访问任何SNS寄存器。

        SNS进入hard standby的方式通常是通过触发一个硬件输入信号(比如XSHUTDOWN),这个信号可能和图像数据流是异步生效的。每条Lane几乎是立即转入foward-direction ULPS状态,即任何处理中的图像数据流只是简单地被终止掉,不发送PHY ULPS进入命令。但是,通常APP会先让SNS进入soft standby模式以便干净地停止图像数据流并将接口转换到Stop状态或ULPS。SNSN和APP两种方式的Lane 1也要在hard standby被触发时自动切换到forward-direction。

        退出hard standby的过程是通过无效化同一根硬件输入信号(例如XSHUTDOWN)来触发的,这个信号会让每条Lane切换到Stop状态。

USL Soft Standby Mode和ULPS进入/退出

        和legacy方式的非USL图像sensor类似,USL支持SNS进入soft standby模式,通过APP写控制寄存器来让数据流有序地停止。对于USL,这个写操作必须发生在hblank或vblank周期中,USL_REV模式下。APP随后使用USL协议谢欢会USL_FWD模式,以便让SNS输出在控制寄存器被写入的时候产生的全部或部分图像帧数据,最后所有Lane进入Stop状态(时钟Lane在D-PHY ALP Mode下回继续运行)。SNS随后切换到USL_REV模式,以便让APP发送命令到SNS。

        一旦streaming被停止,APP就能选择不同的行动方案。举例来说,如果要执行一个时间要求严格的SNS模式修改,APP随后会立即更新对应的SNS寄存器,处理的最后写入一个控制寄存器请求重启图像数据流,然后使用USL协议切换回USL_FWD模式。回到了USL_FWD模式时,在真正重启图像数据流流之前,SNS可能不得不禁用、重新配置和重新锁定一个或多个内部PLL,可能会要求SNS自动停止和重启时钟Lane。

        另一种APP可能的行动方案是让SNS进入到一种扩展的休眠状态,这种状态下SNS会同时等待来自APP的后续命令。实现这种方式的首选方法是APP先在Lane 1上发送一个PHY ULPS进入命令到SNS,SNS反过来在所有forward-direction数据Lane上发送PHY ULPS进入命令到APP。这种方法作为首选是因为Lane 1在整个ULPS过程中都处于USL_REV模式,因此能够让APP在需要的时候,通过Lane 1发送后面的ULPS wakeup信号到SNS。这也是推荐D-PHY和C-PHY的Lane 1使用"reverse direction ULPS"的原因。D-PHY ALP Mode的SNS随后会停止时钟Lane,并且在所有数据Lane都进入到ULPS后,让时钟Lane也进入ULPS。在这个点上,SNS能够关掉内部一些不必要的电路,同时仍然保持了内部寄存器状态,维持在USL_REV模式中。

        对于D-PHY ALP模式,在soft standby模式中ULPS wakeup要求APP发送一个长的ALP Wake脉冲到SNS。一旦SNS开始在数据Lane 1上接收这个脉冲(比如,由PPI信号通知),它随后就能在每条单向的数据Lane上发送一个长的ALP Wake脉冲到APP,这种方式产生了一个总的来回唤醒延迟,延迟时间基本上和forward或reverse direction的延迟相同。SNS也会唤醒时钟Lane到Stop状态,随后重启时钟Lane,好让APP访问SNS寄存器。

        对于C-PHY ALP模式,在soft standby模式中ULPS wakeup要求APP发送一个扩展的ALP-Pause Wake线状态到SNS,随后紧跟一个ALP “Stop”命令。在这个点上,SNS同样能在每条单向Lane上发起ULPS wakeup信号。但是这会导致一个大约在forward或reverse direction中两倍的总的来回唤醒延迟。这种冲击可能通过APP在其他Lane在唤醒过程中,通过Lane1来执行更多的事务(比如寄存器访问)来降低或抵消掉,有效地隐藏额外的延迟。另一种可能的解决方案是要么让C-PHY Lane 1进入ULPS,要么让所有其他Lane进入ULPS,但不是两者都进入。举个例子,APP可以通过写一个控制寄存器请求进入ULPS的时候使用Lane 1;SNS随后会将所有单向的Lane进入ULPS,留下Lane 1进入Stop状态。反过来,APP也能只让Lane 1进入ULPS,让SNS的所有单向的Lane停留在Stop状态。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦枫Leonlew

希望这篇文章能帮到你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值