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 

8/26/2018

JAVA와 JDK 관련지식

1. Java 

Java는 썬 마이크로 시스템즈가 개발한 객체지향 언어이며, 현재 썬 마이크로 시스템즈 오라클에 인수되어져 있다.

Java의 장점은 Source 코드를 중간코드(Java Bytecode)로 변환하여 JVM(Java Virtual Machine)에서 실행할수 있어 높은 호환성을 가지고 있다.
물론 다른 언어처럼 완전 Compiler 기능을 가지고 있지만 이를 이용시 JVM은 이용을 못한다.

  • Java의 Platform 분류 
  1. Java SE(Standard Edition) 
  2. Java EE(Enterprise Edition)
  3. Java ME(Micro Edition)
  4. 이외 

나의 관심은 Java SE으로만으로도 충분한 것 같어 더 자세한 내용은 JDK 에서 찾자.
아래의 Wiki에서 구글과 오라클 소송에 관한 이야기도 흥미로운것 같다.

  https://namu.wiki/w/Java
  https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)

1.1 Java Development Kit 의 구성 

JDK를 설치하면 아래의 사항들이 전부 설치가 되며, 각 구성의 용어를 알아보자.
  1. JDK(Java Development Kit) : 자바의 개발 도구 이며, JRE 와 JVM을 포함하고 있다. 
  2. JRE(Java Runtime Environment) : 자바의 실행환경이며, JVM과 관련 Library를 포함하고 있다고 한다. 
  3. JVM(Java Virtual Machine) :  Java Bytecode (*.class, *.jar)를 실행시간에 동작하는 interpreter 기능

아래의 정보에서 잘 설명해주고 있다.
  1. JDK = JRE + Development/debugging tools
  2. JRE = JVM + Java Packages Classes(like util, math, lang, awt,swing etc)+runtime libraries.
  3. JVM = Class loader system + runtime data area + Execution Engine.



출처
  https://www.quora.com/What-is-JDK

  • JDK SE 5.0 JDK 구조 




  • JAVA SE JDK 구조 

출처
  http://javacodedepot.com/java/java-jre-vs-jdk
  http://www.cs.mun.ca/java-api-1.5/
  https://stackoverflow.com/questions/1906445/what-is-the-difference-between-jdk-and-jre



상위의 Tools 정보를 보면 아래와 같이 볼수 있다.
  • Java의 개발 Tools 
  1. appletviewer: Run and debug applets without a web browser.
  2. extcheck: Utility to detect Jar conflicts.
  3. jar: Create and manage Java Archive (JAR) files.
  4. java: The launcher for Java applications.
  5. javac: The compiler for the Java programming language.
  6. javadoc: API documentation generator.
  7. javah: C header and stub generator. Used to write native methods.
  8. javap: Class file disassembler
  9. jdb: The Java Debugger.

JDK 1.7.0의 구조
  https://programmingmitra.blogspot.com/2016/05/jdk-and-jre-file-structure.html
  http://www.tech-faq.com/jdk.html

  • 일반적인 JAVA 사용법  
  1. 개발툴 java : *.java -> *.class (Java byte code)
  2. 개발툴 jar   :  *.class -> *.jar (생성)
  3. JVM에서  *.class/*.jar  실행 

Bytecode
  https://en.wikipedia.org/wiki/Bytecode

JAR(Java ARchive)
  https://en.wikipedia.org/wiki/JAR_(file_format)

  • Oracle JDK vs Open JDK
이전에는 Sun JDK이었으나, Oracle이 Sun을 인수 했기에  Oracle 과 Open JDK로 구분되어지겠다.

Oracle JDK
  https://www.oracle.com/technetwork/java/javase/downloads/index.html

Open JDK
  https://openjdk.java.net/projects/jdk/11/
  https://openjdk.java.net/projects/jdk7/
  http://openjdk.java.net/projects/jdk6/



1.2 Ubuntu 에서 JDK 의 Version 별 관리 

Ubuntu에서 아래와 같이 여러 Version JDK를 설치 후 각 Tool을 Version별로 설정하여 사용이 가능하다. 


$ sudo apt-get install openjdk-6-jdk 
$ sudo apt-get install openjdk-7-jdk

$ sudo update-alternatives --list java   // 설치확인 

$ sudo update-alternatives --config java   // Android Version에 따라 변경 
대체 항목 java에 대해 (/usr/bin/java 제공) 2개 선택이 있습니다.

  선택       경로                                          우선순ꡬ태
------------------------------------------------------------
* 0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      자동 모드
  1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      수동 모드
  2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      수동 모드

$ sudo update-alternatives --config javac   // Android Version에 따라 변경 
대체 항목 javac에 대해 (/usr/bin/javac 제공) 2개 선택이 있습니다.

  선택       경로                                       우선순ꡬ태
------------------------------------------------------------
* 0            /usr/lib/jvm/java-7-openjdk-amd64/bin/javac   1071      자동 모드
  1            /usr/lib/jvm/java-6-openjdk-amd64/bin/javac   1061      수동 모드
  2            /usr/lib/jvm/java-7-openjdk-amd64/bin/javac   1071      수동 모드

$ sudo update-alternatives --config jar  // Android Version에 따라 변경 
대체 항목 jar에 대해 (/usr/bin/jar 제공) 3개 선택이 있습니다.

  선택       경로                                     우선순ꡬ태
------------------------------------------------------------
* 0            /usr/lib/jvm/java-7-openjdk-amd64/bin/jar   1071      자동 모드
  1            /usr/bin/fastjar                            100       수동 모드
  2            /usr/lib/jvm/java-6-openjdk-amd64/bin/jar   1061      수동 모드
  3            /usr/lib/jvm/java-7-openjdk-amd64/bin/jar   1071      수동 모드

$ sudo update-alternatives --config javah    // Android Version에 따라 변경 
대체 항목 javah에 대해 (/usr/bin/javah 제공) 2개 선택이 있습니다.

  선택       경로                                       우선순ꡬ태
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/bin/javah   1071      자동 모드
* 1            /usr/lib/jvm/java-6-openjdk-amd64/bin/javah   1061      수동 모드
  2            /usr/lib/jvm/java-7-openjdk-amd64/bin/javah   1071      수동 모드



2. Android의 Java 와 VM(Virtual Machine) 

Google에서는 라이센스 문제로 JVM을 사용하지 못하고 대신에 DVM(Dalvik Virtual Machine)을 사용한다. 흔히 Dalvik이라고 말한다.
하지만 Android의 Virtual Machine 인 Dalvik은 Android 5.0 "Lollipop" 부터 DVM 대신  ART(Android_Runtime)만 사용하고 있다고 한다.

ART(Android_Runtime)는 Dalvik 이후로 나온 Android의 Virtual Machine이며, 실행시간에 dex file을 실행할수있으나, Dalvik 에서 동작하는 일부 기술은 ART에서 동작이 되지 않는 다고 한다.


  • DEX(Dalvik Executable)
Android에서는 독자적인 Virtual Machine을 가지고 있어서 Java의 기존 *.class(bytecode) 사용할수 없기 때문에 독자적인 파일 포맷을 가지고 있다.
  1. .dex  ( Dalvik EXecutable ) 
  2. .odex ( Optimized Dalvik EXecutable ) 

Dalvik 관련자료

ART and Dalvik


  • Android JAVA 사용법 
  1. 개발툴 java : *.java -> *.class (Java byte code)
  2. 개발툴 jar   :  *.class -> *.jar (생성)
  3. dx             :  *.jar/*.class -> *.dex
  4. VM            : *.class/*.jar  실행 
Android에서 JAVA 사용법은 dx라는 tool을 이용하여 한단계가 더 걸치고 dx tool은 Java의 *.class file을 *.dex file로 변환을 한다고 한다. (상위 wiki 설명)


1.1 File CLASS 와 File DEX

안드로이드에서 dx를 통하여 File format *.class를  *.dex로 변경된 후 간단히 비교해보자. 참고로 File format Class와 OOP의 Class를 혼동하지 말자.



세부내역은 아래의 사이트에서 확인

CLASS 와 DEX 구조
  https://xsolve.software/blog/differences-between-class-and-dex-files-in-java-android/

CLASS (Java bytecode)의 구조
  https://en.wikipedia.org/wiki/Java_class_file

DEX FORMAT
  https://source.android.com/devices/tech/dalvik/dex-format


1.2 File APK의 구성 

Android의 Package 구성이며, 이를 기존의 Java Archive인 JAR와 비교를 해보자.

  • JAR의 구성 vs APK의 구성 
일반적은 JAR를 보면 *.class file로 구성된 Java Archive 파일이며, APK에 내에는 1개의 Dex가 존재한다.
1개의 Dex 크기에 제한 64K로 제한이 되어있어 만약 사이즈가 문제가 된다면 MultiDex를 지원한다고 한다.


출처
  https://stackoverflow.com/questions/8210173/what-is-the-difference-between-class-and-dex-files

MultiDex지원 (64K 이상의 Dex file)
  https://developer.android.com/studio/build/multidex?hl=ko

JIT
  https://source.android.com/devices/tech/dalvik/jit-compiler

Packetyzer

Wireshark(이전 Ethereal)을 주욱 사용해오다가, 한번 다른 윈도우 스니퍼 프로그램 발견하여 이를 설치해보고 테스트를 해보는 중이지만,
아쉽게도 나의 Window WIFI Network Adapter를 인식못하지만 유선랜과 나의 Virtual Box Network 부분은 인식한다.

추후 이 부분을 다시 테스트 할 기회가 있다면 해보도록 하자.


Packetyzer
  https://sourceforge.net/projects/packetyzer/files/


아직 밑에 있는 프로그램은 설치를 해보지 못했다.

  • NetworkMiner packet analyzer

  https://sourceforge.net/projects/networkminer/