레이블이 IF-MIPI-DSI인 게시물을 표시합니다. 모든 게시물 표시
레이블이 IF-MIPI-DSI인 게시물을 표시합니다. 모든 게시물 표시

12/19/2020

MIPI DSI(Display Serial Interface) 와 SW 구조

1. MIPI  Data 전송방식  

MIPI-DSI Hardware 구조 

ST MIPI-DSI 구조 (필독 자세한 설명이 나옴)

MIPI 관련내용


MIPI의 기본전송방식은 크게 Long Packet/ Short Packet 구조로 두개로 나누어지며, 세부적으로 Data ID에 따라 변경이 된다.  

https://www.st.com/resource/en/application_note/dm00287601-dsi-host-on-stm32f469-479-stm32f7x8-x9-and-stm32l4r9-s9-mcus-stmicroelectronics.pdf

  1. PH(Packet Header):  Header는 ECC로 검증이가능
  2. Data Paylod 
  3. PF(Packet Footer): Checksum으로 전체 Data가 검증가능 

만약 S/W에서 MIPI 전송오류가 발생한다면, ECC or Checksum Error가 발생할 것이며, 이는 곳 MIPI가 고속 Serial 통신이므로, 
HW 관련부분을 점검해봐야 할 것이다. 


  • 일반적인 HS(High Speed )모드 전송 방식 


  • Short Packet 전송 HS Mode 


  • Long Packet 전송 HS Mode (2 Lane)


1.1  Long Packet 과 Short Packet 

MIPI에서 알아야 할 기본구조 전송방식이며, DataID 값도 같이 알아야 정확한 이해가 가능하다. 

  • Long Packet 
  1. SoT(Start Of Transmission)
  2. Data ID(Virtual Channel ID) : 1byte
  3. Word Count: 2 bytes (Payload Size)
  4. ECC: 1 byte
  5. Data: Payload
  6. CheckSum: 2bytes 
  7. EoT(End Of Transmission)











Kernel(drivers/gpu/drm/drm_mipi_dsi.c)
mipi_dsi_packet_format_is_long  ( 이 함수를 보면 long packet의 종류를 파악)

  • Short Packet 
  1. SoT(Start Of Transmission)
  2. Data ID(Virtual Channel ID) : 1 byte
  3. Data 1/2: 2 bytes
  4. ECC: 1byte
  5. EoT(End Of Transmission)








Kernel (drivers/gpu/drm/drm_mipi_dsi.c)
mipi_dsi_packet_format_is_short  ( 이 함수를 보면 short packet의 종류를 파악)
  https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/drm_mipi_dsi.c#L369

long/short packet (mipi_dsi_msg *msg ) 자체가 packet header 와 payload 가 포함됨 


1.2 Packet 의 Data ID의 구조 


  • DI(Data ID) 에서 Virtual Channel ID 사용 



  • Virtual ID로 Logical Channel 구분 


  • Virtual Channel로 구성 









1.2.1  Data ID->Data Type 의 값 


  • Data ID-> Data Type Class 
아래와 같이 Data Type의 종류를 간단히 보고 세부 값들을 보자. 


  • Data Type 의 다양한 값의 의미  
Packet 이 Short 과 Long으로 구분이 되며, 아래의 Data Type은 Data ID 값이며, DSI Mode에서 Both인 EOT를 반드시 기억하자.
  1. Video: Display 관련 Video Signal 
  2. Both: Master /Slave 동시사용
  3. Command: Master에서 주로 Command를 주는 것 


  1. DCS: DCI 기반으로 DCS로 Display Command 가능 
  2. VD(Video Display Packet)
  3. GN(General Packet)



상위 Data ID (DI) 값과 동일하며, Linux Source에서  동일하며, 상위 값 이외에도 다양하게 확장중이며, 아래와 같이 각 함수마다 호출되는 곳이 다르다. (주의)


  • Linux Kernel 의 Data Type 값 

//include/video/mipi_display.h
/* MIPI DSI Processor-to-Peripheral transaction types */
enum {
	MIPI_DSI_V_SYNC_START                         = 0x01,
	MIPI_DSI_V_SYNC_END                           = 0x11,
	MIPI_DSI_H_SYNC_START                         = 0x21,
	MIPI_DSI_H_SYNC_END                           = 0x31,

	MIPI_DSI_COMPRESSION_MODE                     = 0x07,  //mipi_dsi_compression_mode()
	MIPI_DSI_END_OF_TRANSMISSION            = 0x08,  //주의 SOT는 없어도 EOT는 별도로 존재

	MIPI_DSI_COLOR_MODE_OFF                       = 0x02,
	MIPI_DSI_COLOR_MODE_ON				          = 0x12,
	MIPI_DSI_SHUTDOWN_PERIPHERAL                  = 0x22,   //mipi_dsi_shutdown_peripheral()
	MIPI_DSI_TURN_ON_PERIPHERAL                   = 0x32,   //mipi_dsi_turn_on_peripheral()

	MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM    = 0x03,     //mipi_dsi_generic_write -> mipi_dsi_device_transfer()
	MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM 	= 0x13,    //mipi_dsi_generic_write -> mipi_dsi_device_transfer()
	MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM		= 0x23,     //mipi_dsi_generic_write -> mipi_dsi_device_transfer()

	MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM     = 0x04,     //mipi_dsi_generic_read -> mipi_dsi_device_transfer()
	MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM 	= 0x14,     //mipi_dsi_generic_read -> mipi_dsi_device_transfer()
	MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM 	= 0x24,     //mipi_dsi_generic_read -> mipi_dsi_device_transfer()

	MIPI_DSI_DCS_SHORT_WRITE 		= 0x05,       //mipi_dsi_dcs_write_buffer->mipi_dsi_device_transfer()
	MIPI_DSI_DCS_SHORT_WRITE_PARAM		= 0x15,        //mipi_dsi_dcs_write_buffer->mipi_dsi_device_transfer()

	MIPI_DSI_DCS_READ				= 0x06,
	MIPI_DSI_EXECUTE_QUEUE				= 0x16,

	MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE		= 0x37,  //mipi_dsi_set_maximum_return_packet_size()

	MIPI_DSI_NULL_PACKET				= 0x09,
	MIPI_DSI_BLANKING_PACKET			= 0x19,
	MIPI_DSI_GENERIC_LONG_WRITE		= 0x29,          //mipi_dsi_generic_write
	MIPI_DSI_DCS_LONG_WRITE			= 0x39,         // mipi_dsi_dcs_write_buffer

	MIPI_DSI_PICTURE_PARAMETER_SET            = 0x0a,  //mipi_dsi_picture_parameter_set()->pps정의 
	MIPI_DSI_COMPRESSED_PIXEL_STREAM		= 0x0b,

	MIPI_DSI_LOOSELY_PACKED_PIXEL_STREAM_YCBCR20	= 0x0c,
	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR24		= 0x1c,
	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16		= 0x2c,

	MIPI_DSI_PACKED_PIXEL_STREAM_30			= 0x0d,
	MIPI_DSI_PACKED_PIXEL_STREAM_36			= 0x1d,
	MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12		= 0x3d,

	MIPI_DSI_PACKED_PIXEL_STREAM_16			= 0x0e,
	MIPI_DSI_PACKED_PIXEL_STREAM_18			= 0x1e,
	MIPI_DSI_PIXEL_STREAM_3BYTE_18			= 0x2e,
	MIPI_DSI_PACKED_PIXEL_STREAM_24			= 0x3e,
};
Kernel (include/video/mipi_display.h)
상위값으로 Data ID 값을 확인 


1.3  DSI-DCS(Display Command Set) 

DCS를 비롯하여, 모든 Data는 상위 Long Packet 과 Short Packet 구조를 가지고 있으며, DCS도 아래와 같이 Long Packet / Short Packet으로 구분 

  • DCS(Display Command Set)
Data ID만 변경하면 Long Packet/ Short Packet 구분되어 Header 구성되며, Payload에 DCS가 전달되는 구조임  (아래그림참조)



  • DCS Command는 아래 참조 (Linux Kernel)
//include/video/mipi_display.h
/* MIPI DCS commands */
enum {
	MIPI_DCS_NOP			= 0x00,
	MIPI_DCS_SOFT_RESET		= 0x01,
	MIPI_DCS_GET_COMPRESSION_MODE	= 0x03,
	MIPI_DCS_GET_DISPLAY_ID		= 0x04,
	MIPI_DCS_GET_ERROR_COUNT_ON_DSI	= 0x05,
	MIPI_DCS_GET_RED_CHANNEL	= 0x06,
	MIPI_DCS_GET_GREEN_CHANNEL	= 0x07,
	MIPI_DCS_GET_BLUE_CHANNEL	= 0x08,
	MIPI_DCS_GET_DISPLAY_STATUS	= 0x09,
	MIPI_DCS_GET_POWER_MODE		= 0x0A,
	MIPI_DCS_GET_ADDRESS_MODE	= 0x0B,
	MIPI_DCS_GET_PIXEL_FORMAT	= 0x0C,
	MIPI_DCS_GET_DISPLAY_MODE	= 0x0D,
	MIPI_DCS_GET_SIGNAL_MODE	= 0x0E,
	MIPI_DCS_GET_DIAGNOSTIC_RESULT	= 0x0F,
	MIPI_DCS_ENTER_SLEEP_MODE	= 0x10,
	MIPI_DCS_EXIT_SLEEP_MODE	= 0x11,
	MIPI_DCS_ENTER_PARTIAL_MODE	= 0x12,
	MIPI_DCS_ENTER_NORMAL_MODE	= 0x13,
	MIPI_DCS_GET_IMAGE_CHECKSUM_RGB	= 0x14,
	MIPI_DCS_GET_IMAGE_CHECKSUM_CT	= 0x15,
	MIPI_DCS_EXIT_INVERT_MODE	= 0x20,
	MIPI_DCS_ENTER_INVERT_MODE	= 0x21,
	MIPI_DCS_SET_GAMMA_CURVE	= 0x26,
	MIPI_DCS_SET_DISPLAY_OFF	= 0x28,
	MIPI_DCS_SET_DISPLAY_ON		= 0x29,
	MIPI_DCS_SET_COLUMN_ADDRESS	= 0x2A,
	MIPI_DCS_SET_PAGE_ADDRESS	= 0x2B,
	MIPI_DCS_WRITE_MEMORY_START	= 0x2C,
	MIPI_DCS_WRITE_LUT		= 0x2D,
	MIPI_DCS_READ_MEMORY_START	= 0x2E,
	MIPI_DCS_SET_PARTIAL_ROWS	= 0x30,		/* MIPI DCS 1.02 - MIPI_DCS_SET_PARTIAL_AREA before that */
	MIPI_DCS_SET_PARTIAL_COLUMNS	= 0x31,
	MIPI_DCS_SET_SCROLL_AREA	= 0x33,
	MIPI_DCS_SET_TEAR_OFF		= 0x34,
	MIPI_DCS_SET_TEAR_ON		= 0x35,
	MIPI_DCS_SET_ADDRESS_MODE	= 0x36,
	MIPI_DCS_SET_SCROLL_START	= 0x37,
	MIPI_DCS_EXIT_IDLE_MODE		= 0x38,
	MIPI_DCS_ENTER_IDLE_MODE	= 0x39,
	MIPI_DCS_SET_PIXEL_FORMAT	= 0x3A,
	MIPI_DCS_WRITE_MEMORY_CONTINUE	= 0x3C,
	MIPI_DCS_SET_3D_CONTROL		= 0x3D,
	MIPI_DCS_READ_MEMORY_CONTINUE	= 0x3E,
	MIPI_DCS_GET_3D_CONTROL		= 0x3F,
	MIPI_DCS_SET_VSYNC_TIMING	= 0x40,
	MIPI_DCS_SET_TEAR_SCANLINE	= 0x44,
	MIPI_DCS_GET_SCANLINE		= 0x45,
	MIPI_DCS_SET_DISPLAY_BRIGHTNESS = 0x51,		/* MIPI DCS 1.3 */
	MIPI_DCS_GET_DISPLAY_BRIGHTNESS = 0x52,		/* MIPI DCS 1.3 */
	MIPI_DCS_WRITE_CONTROL_DISPLAY  = 0x53,		/* MIPI DCS 1.3 */
	MIPI_DCS_GET_CONTROL_DISPLAY	= 0x54,		/* MIPI DCS 1.3 */
	MIPI_DCS_WRITE_POWER_SAVE	= 0x55,		/* MIPI DCS 1.3 */
	MIPI_DCS_GET_POWER_SAVE		= 0x56,		/* MIPI DCS 1.3 */
	MIPI_DCS_SET_CABC_MIN_BRIGHTNESS = 0x5E,	/* MIPI DCS 1.3 */
	MIPI_DCS_GET_CABC_MIN_BRIGHTNESS = 0x5F,	/* MIPI DCS 1.3 */
	MIPI_DCS_READ_DDB_START		= 0xA1,
	MIPI_DCS_READ_PPS_START		= 0xA2,
	MIPI_DCS_READ_DDB_CONTINUE	= 0xA8,
	MIPI_DCS_READ_PPS_CONTINUE	= 0xA9,
};
  
  


  • DCS 로 제어는 아래의 함수이용  
  1. mipi_dsi_dcs_write
  2. mipi_dsi_dcs_write_buffer

 

1.4  일반적인 DSI Write

우선 LCD Initial Code는 이전에 병렬에서 맞춰주던 Hsync/Vsync를 비롯하여, LCD의 Data Format 및 기타 설정을 위해서 MIPI Interface로 설정을 해준다. 

  • 일반적인으로  DSI 사용되는 함수 
  1. mipi_dsi_generic_write
  2. mipi_dsi_generic_read 
상위 함수를 이용하여  자동으로 Long or Short 선택되어 Header가 구성되어 read/write 되지만, 상위 Data ID는 상위에 정해짐 


반드시 LCD Datasheet를 참조하여, Payload에 들어가는 Header에 Data ID도 확인가능하다며 확인하자.

본인이 LCD Spec에서 DCS Command 사용여부에  맞게 선택해서 함수도 맞게 넣어 개발하는 것이 맞을 것이라고 본다. 

  • 기타 MIPI-DSI Debug 관련내용 


2. GPU의 DRM (Direct Rendering Manager)

처음 DRM의 약자를 Digital Right Management로 착각했으며, 예전에 HDMI Device Driver 개발당시 HDCP와 유사한 기능이라고 착각했다.
DRM은 GPU기반으로 빠른 Rendering을 지원하기 위해서 제공해주는 기능이며, 이전에 Frame buffer Driver만 개발했던 나에게 다소 생소했는데, 
각 여러 Layer들을 쉽게 Rotate/Scale/Crop/Overlay되는 것을 보고 이 기능에 조금 놀라웠다. 

이전에 TI DSP기반으로했던, Davinci의 경우 Scale 과 Crop은 가능했던걸로 기억하지만, 많은 Layer들은 제어하지는 못했는데, DRM은 GPU를 통해서 다양한 기능을 제공한다.
한마디로 GPU에서 확장된 Frame Buffer라고 생각하면 될 것 같으며, Overlay 기능역시 GPU에 따라 다른 것 같다. 

  • FrameBuffer 와 DRM(Direct Rendering Manager) 비교 


Kernel DRM Driver 기본구조

Kernel GPU DRM-KMS(Kernel Mode Setting) 
상위 MIPI-DSI의 HW Dispaly 관련 출력설정 

TI사의 DSS와 DRM 부분 


2.2  Frame Buffer vs DRM 기반의 Pannel 

  • Frame Buffer LCD Initial Code 
Frame Buffer 기반으로 DCS Command 입력 후 Initial Code 입력 SPI/GPIO 기반으로 입력 

  • DRM 기반의 LCD Initial Code
DRM기반의 실제 Panel Driver들의 다양한 예제이며, SPI와 I2C 및 GPIO와도 연결되어 구성되므로 참고

DRM(Direct Rendering Manager)로 GPU기반으로 DBI (이전의 ST 칩의 DBI라고 생각하면됨)

mipi_dsi_dcs_xxx 함수들은 내부적으로 dcs command를 호출


  • i.MX 의 경우 i.MX6는 Framebuffer Driver
Table 64. MIPI DSI Driver Files  // Frame buffer 기반 Driver 와 DRM 기반 Driver들 
File Description
drveirs/video/fbdev/mxc/mipi_dsi.c                                        MIPI DSI IP Frame buffer driver source file
drivers/video/fbdev/mxc/mipi_dsi.h                                        MIPI DSI IP Frame bufferdriver header file
drivers/video/fbdev/mxc/mxcfb_hx8369_wvga.c                   MIPI DSI Frame bufferDisplay Panel driver source file
drivers/video/fbdev/mxc/mipi_dsi_samsung.c                       MIPI DSI Frame buffer Samsung source file
drivers/video/fbdev/mxc/mipi_dsi_northwest.c                      MIPI DSI Frame buffer Northwest source file
drivers/video/fbdev/mxc/mxcfb_hx8363_wvga.c                   i.MX 7 Frame buffer Truly WVGA Panel TFT3P5581E
drivers/video/fbdev/mxc/mxcfb_hx8369_wvga.c                   i.MX 6 Frame buffer Truly WVGA sync panel
drivers/video/fbdev/mxc/mxcfb_otm808b_wvga.c                 Truly Frame buffer WVGA Panel TFT3P5079E
  •  i.MX의 경우 i.MX 8은 DRM Driver  
drivers/gpu/drm/imx/sec_mipi_dsmi-imx.c Samsung            DRM driver
drivers/gpu/drm/imx/nwl_dsi-imx.c Northwest                        DRM driver



Device Tree 

12/18/2020

MIPI DSI(Display Serial Interface)

1. MIPI-DSI 구조 

MIPI(Mobile Industry Processor Interface)의 DSI는 LCD Interface를 고속 Serial Interface를 이용하는 예로 이번기회에 정리하고자 한다.  
세부내용들은 아래의 링크들에서 자세히 잘 설명해주고 있다. 

LCD Interface 관련내용

ST MIPI-DSI 관련내용 

MIPI(Mobile Industry Processor Interface)

MIPI-DSI(Display Serial Interface)

MIPI-PHY 관련내용 

LCD Pannel Spec


1.1 MIPI DSI 의 구조 

MIPI-DSI

  • MIPI DSI 의 기본구조
DSI Interface로 DCS로 Command로 구성이 되어져 이를 제어한다. 



  • MIPI의 D-PHY 구조 
  1. Clock Lane: One-way (단방향)
  2. Data Lane: One-way (단방향)
  3. Data Lane: Two-way (양방향)

One-way Clocl Lane/ Data Lane
Master: 
    


https://www.programmersought.com/article/42054062840/





2. NXP 사의 i.MX Series 구조 

i.MX6 과 8의  MIPI Interface를 비교하고 관련 부분을 간단히 비교해보자. 

2.1  NXP사의 MIPI-DSI (i.MX6) 

상위에서 기본적인 MIPI를 알았으니, 실제 AP인 i.MX의 경우를 보면 어떻게 세부적으로 동작하는지 알수 있을 것이다. 
두개다 D-PHY는 내부에 포함이 되어있으며, 동작구조가 유사하지만, 점점 변경되어가는 것을 볼 수 있다. 

  • i.MX6 MIPI DSI(Host Controller) 
상위 ST와 거의 유사하며, 별로 다르게 없다.  
  • i.MX6  DSI 내부구조 

i.MX6의 LVDS는 병렬 LCD제어에서 Bridge로 변경되어 제어됨 




2.2  NXP사의 MIPI-DSI (i.MX8) 

  • i.MX8의 MIPI-DSI or LVDS 
기존의 i.MX6와 다르게 MIPI-DSI 와 LVDS PHY를 합쳐서 사용하며, 외부 칩 제어를 위해 i2C 와 GPIO를 설정 (IO Expander 및 레귤레이터)  및 
Bakclight를 위한 PWM제어를 한 묶음으로 변경하여 보기쉽게 변경되었다.
 

아래의 구조는 쉽게 이해하고자 한다면, 이전에 ST 버전하고 거의 동일하다고 생각하면 될 것같다. 
DSI Controller (DSI Host) 로 LCD의 Device를 연결한다.   


12/16/2020

MIPI(Mobile Industry Processor Interface)

1. MIPI(Mobile Industry Processor Interface)

MIPI Aliance는 ARM, Intel, Nokia, Samsung, STMicroelectronics and Texas Instruments 회사들이 만든  Mobile 관련된 Interface로 2003년에 처음 생성되었다고 한다.
그리고, 위에서 보았듯이 Mobile용으로 탄생했기 때문에 초반에 대중적으로 많이 사용되어지지 않았다. 

주로 사용되는 곳들은 Display 와 Camera 와 Baseband 부분인 것으로 보이며, 이외 것들은 아래의 링크로만 해둔다. 

MIPI Aliacne의 Spec 확인 

MIPI-CSI

MIPI-DSI

MIPI-DPI

MIPI-SPMI

C-PHY
D-PHY
M-PHY


1.1 MIPI 의 기본용어 정리 및 기본이해 

  • MIPI LP/HS 동작 
  1. Low power transmitter: LP-TX
  2. Low power receiver: LP-RX
  3. High-speed transmitter: HS-TX
  4. High-speed receiver: HS-RX
  5. Low-power competition detector: LP-CD

  • MIPI의 Lane type
Clock lane 과 Data lane  구분해보면 되고 , Data Lane로 다시 두 가지로 나뉘어진다.

One-way clock lane: 단방향 clock lane 
  • Master:HS-TX, LP-TX
  • Slave:HS-RX, LP-RX
Two-way data lane (lane0): 양방향 Data lane
  • Master, Slave:HS-TX, LP-TX, HS-RX, LP-RX, LP-CD
One-way data lane (lane1-lane3): 단방향 Data lane
  • Master:HS-TX, LP-TX
  • Slave:HS-RX, LP-RX

  • Low power mode (Low-Power LP mode)
used for control: maximum 10MHz, only use data lane0 (clock is XOR from CP and CN).
LP Mode라고 부르며, 재미 있는 것은 data lane0을 사용을 하며, clock lane과 XOR를 하여 동작하며, 이 Data Lane은 differential 로 동작하지 않는다. 

  • High-speed mode (High-Speed ​​HS mode) 
high-speed data transmission: 80M-1Gbps/lane.
HS Mode라고 하며 differential 로 동작하며, Level로 다르다. 


https://www.programmersought.com/article/7481201221/


  • State of Lane
  1. LP-00, LP-01, LP-10, LP-11 (single-ended)
  2. HS-0, HS-1 (differential)
LP와 HS State는 아래의 값에의해 결정이 되며 이는 Lane의 상태와 Command라고 생각하면 되겠다. 

https://www.programmersought.com/article/7481201221/




1.2 MIPI Operation Mode   
 

  • Three operating modes of Data Lane 
  1. Escape mode, 
  2. High-Speed(Burst) mode
  3. Control mode
아래 그림을 보면 쉽게 이해가 감 

Possible events starting from the stop state of the control mode are:
Control Mode 상태가 종료되어 events가 가능한 상태이며, LP11를 이용하여 STOP 후 진행 
  1. Escape mode request (LP-11→LP-10→LP-00→LP-01→LP-00)
  2. High-Speed mode request (LP-11→LP-01→LP-00)
  3. Turnaround request (LP-11→LP-10→LP-00→LP-10→LP-00)

BTA: Bus Trunaround / Trunaround  의미 

  • Escape mode State 
Escape mode is a special operation of data Lane in LP state 
    - In this mode, you can enter some additional functions: LPDT, ULPS, Trigger

• Data Lane enters Escape mode through LP-11→LP-10→LP-00→LP-01→LP-00
• Once in Escape mode, the sender must send an 8-bit command in response to the requested action
• Escape mode uses Spaced-One-Hot Encoding

  • Ultra-Low Power State
  1. In this state, lines are empty (LP-00)
  2. The ultra-low power state of the clock Lane
  3. Clock Lane enters the ULPS state through LP-11→LP-10→LP-00
  4. Exit this state through LP-10 → TWAKEUP → LP-11, the minimum TWAKEUP time is 1ms

  • High-speed data transmission
  1. The act of sending high-speed serial data is called high-speed data transmission or burst
  2. All Lanes doors start synchronously, and the ending time may be different.
  3. The clock should be in high-speed mode

  • The transmission process under each mode of operation
  1. The process of entering Escape mode: LP-11→LP-10→LP-00→LP-01→LP-00→Entry Code → LPD (10MHz)
  2. The process of exiting Escape mode: LP-10→LP-11
  3. The process of entering high-speed mode: LP-11→LP-01→LP-00→SoT(00011101) → HSD (80Mbps ~ 1Gbps)
  4. The process of exiting high-speed mode: EoT→LP-11
  5. Control mode-BTA transmission process: LP-11→LP-10→LP-00→LP-10→LP-00
  6. Control mode-BTA receiving process: LP-00→LP-10→LP-11






8/27/2018

ST MIPI DSI(Display Serial Interface)

1. LCD Interface 확인 



ST LCD Interface 와 MIPI Interface 설명 

  • Intel8080/68K/SPI
이전에 설명했듯이 CPU/MPU Interface 와 SPI Interface이며, 주로 내부에 GRAM이 존재하여, 별도의 Fram Buffer가 필요가 없다. 

  • RGB Interface
아래 그림과 같이 SoC에 Frame Buffer가 존재하며, RGB Interface로 붙어 각 Timing을 설정해준다. 

1.1 LCD Interface 와 MIPI Interface의 이해 

ST기반의 LCD와 MIPI Interface를 이해해보자. 
  1. DBI (Display Bus Interface): CPU/MPU Interface 와 SPI Interface without Frame Buffer
  2. DPI(Display Pixel Interface): RGB Interface with Frame Buffer
  3. DCS(Display Command Set): MIPI-DBI Interface 지원하는 Command들 


  • DBI 구조 (CPU/SPI Interface로 Frame Buffer가 필요 없는 Type)



  • DPI 구조 (RGB Interface로 내부에 Frame Buffer가 존재)



  • MIPI-DSI Host 구조 
DPI 와 DBI 기반으로 MIPI DSI Host(Display Serial Interface) 구축하고, PPI(PHY Protocol Interface)를 이용하여 D-PHY와 통신하여,
이를 MIPI LCD에게 전달해준다.  


DPI와 상위 MIPI-DSI Interfce 

MIPI-DSI 를 보면 이전의 LCD Interface로 연결이 되어 이를 Host로 생성한 후 이를 MIPI-DSI로 연결하는 방식이다. 
어떻게 보면 예전의 LVDS와 다르지 않게 느껴진다. 

2. MIPI-DSI Host 기본구조 

MIPI(Mobile Industry Processor Interface)의 DSI는 LCD Interface를 고속 Serial Interface를  이번기회에 정리하고자 한다.  

MIPI(Mobile Industry Processor Interface)

MIPI-DSI(Display Serial Interface)

  • MIPI DSI Host 와 LCD Dispaly 구조 
Lane은 0~3도 가능하며, PHY는 중 1개의 Lane은 양방향통신을 진행한다.
  1. HS(High Speed) Mode
  2. LP(Low Power) Mode

상위 D-PHY기반의 PHY Protocol Interface (PPI) 말하며, 용어만 알아두도록하자. 
상위 Lane들을 구조를 좀 자세히 보면 3개 중 2개 HS Mode(단방향)만 사용하며, 나머지 1개만 HS Mode 와 LP 모드(양방향)형식으로 데이타 전송이 이루어 지고 있음을 알수 있다.  

즉 Host에서 상위 DCS(Display Command Set)을 LP 모드로 전송하고 DATA는 HS Mode로 전송함을 짐작할 수 있다. 


  • DPI 기반의 MIPI-DSI Host 구조 
아래의 경우는 상위 설명의 DPI(RGB Interface) 기반으로 동작되는 것을 MIPI-DSI Host로 연결한 구조이다. 


기존의 RGB Interface와 거의 유사하며, 다만 실제 영상데이타는 PPS(HS)로 전송되며 나머지는 LP로 되어지는 것으로 보인다. 


  1. HSA (Hsync active)
  2. HBP (horizontal back porch)
  3. HFP (horizontal front porch)
  4. VSA (Vsync active)
  5. VBP (Vertical back porch)
  6. VFP (Vertical front porch)
  7. VSS (Vsync Start)
  8. VSE (Vsync end)
  9. HSS (Hsync Start)
  10. HSE (Hsync end)
  11. PPS (Packed Pixel Stream)으로 16/24/32 등 RGB/YUV를 비롯하여 다양하다 

Tegra의 DRM 의  RGB Interface 설정 


2.1  MIPI 의 PHY의 동작방식  

상위그림은 현재 D-PHY를 사용하고 있으며, PHY 내부의 Protocol을 조금 더 알아보자.

  • PHY 의 모드와 속도 


  • DSI PHY Signal Mode에서는 두가지 모드로 통신 구성
  1. HS (High Speed) Mode: 빠른 모드로 최대 1.5Gb/s 라고 하며, 상위 글을 보면 각 PHY마다 다른것으로 파악 (200mV)
  2. LP (Low Power) Mode: 저전력모드로 아래 그림과 같이 differtial 이 아니며, Level과 속도도 10Mb/s 밖에 되지 않는다. (1.2V)


각 Lane의 각 HS 와 LP로 State Code가 존재하며, 이를 이 기반으로 통신을 진행한다. 


  • Data lane의 Operating Mode/ State Code 
  1. Control Mode: Reset 후 LP-11인 상태이며, 다른모드가 종료후 이모드임 
  2. HS Mode:  뒤에 설명 
  3. Escape Mode: 뒤에 설명  

2.2  Data lane 의 HS Mode

Control Mode 진입 후 HS Mode로 진입하여 데이타 통신을 진행하므로 반드시 알아야함
  • 일반적인 HS Mode 동작 

  • SoT (Start of Transmission) 
LP-11 (Stop), LP-01 (HS-Rqst), LP-00( Bridge) 받는 즉시 HS Mode로 진입하고 DSI Host는 HS-0과 함께 시작하며, 상위 Sync Sequence를 보낸다.

  • EoT(End of Transmission)
HS모드로 Data 전송후 Host는 Trailing sequence를 보내는데, 마지막 data의 반대 값 HS-0/1
LP-11모드로 진입



2개의 Lane사용시의 Data 전송되는 방식이며, 4개도 동일하다. 


2.3 Data lane의 Escape Mode

Escape Mode는 접해보지 못한것으로 아래의 Command들도 제공을 해주며, 이 부분 추후에 더 보강을 하자. 


Escape Mode Command 



3. PHY의 세부 동작 


  • 상위 Data Lane 중 양방향 통신방식을 보면 아래와 같이 동작 


  • Clock-lane의 Power Mode
  1. LP(Low Power) Mode
  2. HS(High Speed) Mode
  3. ULPS(Ultra-low-power state)


3. MIPI Spec


CCI