DSI及DPHY的学习知识点

0.DPHY可以传输DSI和CSI信号

在CSI-2 V1.2及以前都只能用DPHY传输csi数据。

1.DPHY的输出差分clk是双沿有效

        所以DDRCLKHs_I/Q 频率是ByteCLKHS的4倍。ByteclkHs频率是bitrate的1/8.【这里的bitRate是单条active lane上的bitRate,多条activeLane的bitRate相等】但是这些频率和pixclk的关系是不确定的,因为burst传输下,保证所有差分线上bitrate之和大于pixclk domian的bitrate就行。

        ByteClkHS保证了进入每条lane上的TxDataHS[7:0]都是一拍8bit连续的,ByteclkHs和lane num没有直接的关系,但lane越多,ByteClkHs的最小值就越小。

        ByteclkHS另外的一个错误理解是,对pix stream处理成Byte stream,然后这一路Byte stream的clk,这实际是错误的,在controller中从pixclk到ByteclkHs转换的过程中,不会把pix stream转为一路byte stream【除非就支持一条lane】。如果系统最多支持4条dataLane,这个转换接口输出一拍32bit,如果实际配置只支持2dataLane,可以降低byteClkHs或者让PPI接口通过TxReadyHS给controller反压。

        ByteClkHS只有在non-burst传输的时候才需要根据lane Num和pixclk及VC准确计算。

        对ByteClkHs的理解同样适用与csi-CPHY的wordclk和symbolclk

2.LP和Escape这些低功耗传输是单端的

        差分是两根线上电压在均值上下对称摆动,任意时刻两根线上电压都是相对均值电压对称的,设均值电压为V,则两根线上电压是V+Vswing/2和V-Vswing/2.

        单端就是线上电压只和地线做参考,线与线之间的电压没有关系。LP和Escape 低功耗模式下,Dp和Dn各自以0和1.2V电压传输数据。

        LP state但也不是Escape mode的情况下【即Control Mode】,主要是传输一些LP的状态或序列来控制PHY是在stop状态还是进入其他状态。比如说data-lane通过LP-11,LP-10,LP-00,LP-01,LP-00序列进入Escape mode。这种情况下clk lane是没有是时钟的。每一个LP 状态都会有一定的持续时间,所以rx端在一定时间内检测到LP电平变化就行,不需要clk。

       clk lane处于Esc的LP-00 space状态还是Control Mode的stop state LP-11?

        这个要根据protocol对clk lane的配置,如果只是进入LP而不进入ULPS,则clklane为LP-11.要求进入ULPS就是LP_00

        Escape mode 所有传输都是用spaced-ont-hot(间隔独热码)编码,是不需要时钟的异步传输,只是需要用Dp ^ Dn来获得EscClk时钟。

3.LP-Contention Detection (竞争检测)

        如果两个PHY都是双向时,为了防止两端的PHY同时驱动总线而发生冲突,协议要求PHY必须支持contention detection模块,简称CD模块

        CD检测只在LP且非ulps时使用。HS不用是因为都是从LP进入HS的。

4.双向data-lane,可以选择只支持双向HS或Escape

        很多情况下,为了成本考虑,没必要支持反向的HS传输,也没有太多这样的场景。此时就只支持反向的Esc

5.传输数据和命令只能在HS和Esc的LPDT

6.正向Esc必须支持ULPS和Triggers

7.ULPS是什么样的状态

        首先ULPS是控制TX/RX的PHY及protocol的clk和power状态吗?此时差分线是不是可以下电?

        ULPS状态且ulpsActiveNot=0时,TX protocl layer可以关闭TxClkEsc【注意和clkLane状态不是一回事】。对应Rx那边也不能从dataLane异或出RxClkEsc,且要上报protocol,当前是ULPS。dataLane处在LP-00状态。

        至于下电 目前并没有看到 这么做。是ULPS的范围太小了,而且还要快速被Wakeup,所以没有用来控制下电?

8.clk lane只支持Escape的ULPS

        由于clk lane不传输数据和命令,所以要么在HS下传时钟,要么在Esc的ULPS状态下LP-00或者contorl mode下stop 状态LP-11。clk lane的进入Escape程序不像dataLane需要LP-11,LP-10,LP-00,LP-01,LP-00,而是直接LP-11,LP-10,LP-00。

        只有HS传输才需要clk,所以当所有的dataLane都不在HS传输后,可以关闭clklane

9.DPHY可以直接传输8bit原始数据也可以用8b/9b编码

10.HS的反向速率只有正向速率的1/4,反向的接收端需要调整选择合适的clk相位

        因为反向传输,只是datalane的方向发生了变化,clklane没变,所以反向后的Tx【slave侧】用的是反向后的Rx【master】那边输出的ddr clk。数据经过line delay和在master,slave的内部delay。达到master侧采样点时,有一个固定的未知的delay。所以在master接收侧需要首先利用slave在SOT发送的sync sequence进行synchronization。

        简单的做法在master接收端用4个相位采样反向数据,哪个相位能正确采样到syncWord "0x1D",就用这个相位采样数据。有这4个相位,基本就可以正确采样,而不需要PLL和DLL来产生更多的相位。

11.DPHY 三个operating Mode :control、HS、Escape

        如果dataLine不在HS和Escape mode,那就一定在control mode。control mode的stop state LP-11可以作为clk lane/data lane的待机state。

12.DPHY最小传输单元是Byte,数据量是byte整数倍

        DPHY没有规定最大的burst传输长度,但是PHY没有有效的错误恢复处理,实际误码率不会是0,所以需要合理的选择最大burst Length;而对于短burst,header和trailer的时间可能比payload还长。

        另外一点burstLength还影响了protocol layer【dsi controller】里面的dataBuf有关,所以不能设置过大的burstLen

13.多dataLane传输时,它们可以独立的开始和结束

        多个dataLane可以传输不同数据量,也可以在不同时间开始和结束。但一般情况下所有dataLane都是同时开始的,结束时间不一样。

14.Remote Triggers

        是TX protocol层通过Escape mode发送到对端protocol layer的一个flag,不会影响PHY的行为。Reset-Trigger就是协议已经定义的Triggers。目前还没看到除此之外的其他协议定义的Triggers。

15.DPHY的初始化

        上电之后,master PHY会被系统或PPI接口初始化,此时需要master  PHY驱动LP-11 stop state超过Tinit时间。需要注意的是第一个持续超过Tinit的stop state 才是初始化period。

        slave PHY是在上电后第一个超过Tinit的stop state,才被认为完成初始化。在没有检测到第一个超过Tinit的stop state之前,所有的line state都会被忽略。多lane配置,要同时初始化。

        slave只在上电之后初始化,并在检测到LP-11持续超过Tinit时间后认为初始化完成。并不是说在PHY 上电初始化完成之后,不能在LP-11停留超过Tinit时间。正常运行状态下,很容易出现在LP-11这种standBy状态停留超过Tinit时长【比如Burst间隙,行消隐区】,但此时slave是不会重新进入初始化的。如果在上电初始化之后PHY出了问题,可以走复位流程,复位流程解决不了问题,就需要下电再走上电初始化。

16.Calibration

  • 只有超过1.5Gbps的 transmitter在初始化时必须通过Calibration deskew。
  • 周期性deskew是可选的
  • 小于等于1.5Gbps的传输,deskew是可选的
  • 当从其他状态转到HS rate > 1.5Gbps, deskew也是可选的
  • deskew调整的是clklane与datalane之间的skew

TX先发16'hFFFF作为sync pattern;

接着在发至少2^15个0101用来initial deskew calibration

周期性校准只需要发至少2^10 个0101

校准之后再发送HS的同步序列:‘00011101’ 【0x1D】

说明:dataLane发送校准序列'0101',就是和clkLane是同频的时钟,在Rx端用DLL就可以完成dataLane和clkLane之间的相位校准。

17.clklane扩频

        dphy clklane可以进行频率扩频调制用以降低EMI。clk lane的ddr变化沿在发送端是和数据中间对齐的,而不是和数据变化对齐

18.Escape进入流程

LP11->LP10->LP00-LP01->LP00

其内的LPDT/ULPS/Triggers子状态还有专门的entry command

19.SOT/EOT/BTA/syncWord

SOT: start of transmission

        HS的同步序列就是在SOT阶段发送的,而且只在SOT过程发送,中间可以有初始化校准的过程。但周期校准后面不会跟syncWord【虽然DPHY的spec High-Speed Data Transmission这一节提到前导码和拖尾码都可以做sync,但实际上DPHY的拖尾码是固定的HS-1或HS-0,没有翻转做不了sync,CPHY的拖尾码Post1经过确认也不用于sync

        相比CPHY的SOT少了一个在SYncWord之前发送 data normal preamble的步骤。猜测CPHY的前导码是为了RX先恢复出稳定的clk

EOT: end of transmission

BTA: Bus turn-around 

以上每一个过程都有专用处理流程,可以参见

Specification for D-PHY Version 1.2.pdf

20.DPHY 3.0的ALP和FBTA

DPHY 3.0新增了特性:

  • ALP (alternative low power) 备用低功耗
  • FBTA (Fast Bus trun-around) 快速Bus反向

都是可以让PHY在HS mode下进入低功耗和BTA的操作,具体参考:

CSI及CPHY的学习知识点_cy413026的博客-CSDN博客

21.DPHY最少1clk+1datalane,最大无限制

协议只规定了最小lane,没有规定最大lane数,可以多于4data lane

500.DPHY HS长包数据(long packet)格式

数据长包允许payloadSize=0,此时checkSum为0xFFFF,checkSum是对payload进行计算的。

501.DSI多lane传输 分配和合并        

TODO

502.DSI支持virtual channel

dsi v1.1支持最多4个virtual channel。有可能在更高版本支持更多的虚拟通道。比如csiv3.0的DPHY就支持16个virtual channel,是因为ECC由8bit变为了6bit,多的两bit用于VC

<think>好的,我需要回答用户关于单片机中如何实现同步功能或同步通信机制的问题。首先,用户提到了几个引用,涉及串行通信、Ymodem协议和CAN通信。我需要结合这些引用来构建答案,并确保符合系统级指令,比如使用正确的中文回答、LaTeX格式、生成相关问题等。 首先,用户的问题是关于单片机中的同步功能或通信机制。根据引用[1],同步串行通信使用共享时钟信号,而异步则用起始位和停止位。引用[3]详细讲解了CAN通信中的同步段和时间段,这可能涉及到同步机制的具体实现。我需要将这些内容整合起来,分点说明同步的实现方法。 接下来,我需要确保回答结构清晰,分步骤或分点。比如,首先解释同步通信的基本原理,然后具体到单片机中的实现方式,如SPI、I2C、CAN等,结合引用中的内容。每个部分可能需要引用对应的引用来源,比如在讲同步通信时引用[1],在讲CAN时引用[3]。 然后,考虑是否需要代码示例。用户提供的引用[2]提到在单片机中使用Ymodem协议,但Ymodem是异步的吗?可能需要确认。不过用户的问题是关于同步的,所以可能不需要深入Ymodem,除非涉及同步部分。不过引用[2]可能和问题关联不大,但用户提到了,可能需要简要提及。 另外,根据引用[3],CAN的同步机制涉及时间段划分,如SYNC_SEG、BS1、BS2,这些是硬件自动处理的,需要在程序中配置相关寄存器。这部分需要详细说明,并可能引用[3]。 系统级指令要求生成相关问题,我需要根据回答内容提出相关的问题,比如同步通信与异步的区别、SPI和I2C的对比、CAN总线的同步机制等。 还需要注意LaTeX格式的使用,比如变量、术语需要用$...$,例如$f_{SCK}$,独立公式用$$...$$,但问题中可能不需要太多数学公式,但如果有的话需要正确应用。 最后,确保所有引用的来源在回答末尾正确标注,例如[^1]、[^3]等,并且引用标识自然地添加到相关段落末尾。 现在,开始组织内容: 1. 同步通信的基本原理:引用[1]中的同步串行通信,共享时钟,确保数据传输同步。 2. 单片机中的同步通信协议:SPI和I2C,这些是常见的同步协议,需要说明它们如何工作,比如SPI的时钟线,主从设备同步数据传输。 3. 硬件自动同步机制:以CAN总线为例,引用[3]中的SYNC_SEG、BS1、BS2,说明硬件如何调整时间单元实现同步。 4. 软件实现方法:比如使用中断或轮询方式检测同步信号,结合代码示例(如果有的话)。但用户提供的引用中没有具体代码,可能需要避免假设,或者参考引用[2]中的Ymodem实现,但Ymodem可能属于异步,所以可能不适用。 5. 总结同步机制的应用场景和优势。 然后生成相关问题,如同步与异步的区别、SPI/I2C对比、CAN同步实现等。 需要注意避免错误,例如Ymodem协议是否属于同步,根据引用[2]可能是在异步串行通信上实现的,所以可能不需要在同步部分提及,但用户的问题可能涉及同步功能的其他方面,需谨慎处理。 最后检查LaTeX格式是否正确,引用是否正确标注,回答是否符合结构要求。</think>在单片机中实现同步功能主要涉及时钟同步机制和通信协议层面的协调控制,以下是具体实现方法及原理: ### 一、同步通信基础原理 同步通信的核心是通过共享时钟信号协调数据收发时序。发送方和接收方使用同一时钟源(如$f_{SCK}$)进行数据采样,确保每个比特位的传输时间窗口一致。典型公式描述时钟频率与波特率的关系: $$ Baud\ Rate = \frac{f_{SCK}}{Prescaler} $$ 其中预分频系数($Prescaler$)需根据通信协议要求配置。 ### 二、硬件级同步实现 1. **SPI协议同步机制** - 四线制结构包含SCK(时钟)、MOSI、MISO、SS - 主设备通过SCK信号触发从设备采样数据边沿 - 配置时钟极性(CPOL)和相位(CPHA)实现时序对齐 2. **I2C协议同步仲裁** - 通过SCL时钟线同步多主机竞争 - 利用线与特性检测总线冲突 - 特殊重复起始位实现无缝协议切换 3. **CAN总线硬同步** ```c CAN_InitStructure.CAN_SyncJumpWidth = CAN_SJW_1tq; //同步跳转宽度 CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq; //时间段1 CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq; //时间段2 ``` 通过配置BS1和BS2时间段实现位时间调整,SYNC_SEG用于检测边沿跳变 ### 三、软件同步方法 1. **时钟校准算法** - 接收端计算发送方时钟偏差 - 动态调整本地采样点位置 - 实现代码片段: ```c void adjust_sample_point(uint8_t edge_delta) { if(edge_delta > threshold) { SAMPLE_POINT_REG += compensation_value; } } ``` 2. **协议层同步控制** - Ymodem协议通过SOH/EOT控制包实现文件传输同步[^2] - 自定义同步帧设计示例: ```c #define SYNC_HEADER 0xAA55 typedef struct { uint16_t sync_word; uint32_t sequence_num; uint8_t payload[256]; } sync_frame_t; ``` ### 四、典型应用场景 1. 传感器阵列数据采集 2. 工业现场总线控制 3. 汽车电子ECU通信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值