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

4/19/2018

Raspberry-Pi3 HDMI 관련 설정

일단 RASPBIAN OS를 설치한 후 /boot로 가서 설정들을 확인하자.
쉽게 설정하고자 한다면,

$ sudo raspi-config // 각 설정  



  • *.dtb : device tree
  • cmdline.txt : kernel command line 쉽게 변경 가능
  • config.txt :  raspberry pi 설정


$ cd /boot/ 
bcm2708-rpi-0-w.dtb     bcm2708-rpi-cm.dtb   bcm2710-rpi-3-b-plus.dtb  cmdline.txt    fixup_cd.dat  fixup_x.dat  kernel.img        overlays      start.elf
bcm2708-rpi-b.dtb       bcm2709-rpi-2-b.dtb  bcm2710-rpi-cm3.dtb       config.txt     fixup.dat     issue.txt    LICENCE.broadcom  start_cd.elf  start_x.elf
bcm2708-rpi-b-plus.dtb  bcm2710-rpi-3-b.dtb  bootcode.bin              COPYING.linux  fixup_db.dat  kernel7.img  LICENSE.oracle    start_db.elf


  • HDMI config.txt 설정 방법 

  https://wikidocs.net/7826
  https://wikidocs.net/3198



리모콘 기능을 위해서 아래와 같이 CEC관련 자료 수집

  • Raspberry PI Turn On HDMI CEC
  https://timleland.com/raspberry-pi-turn-tv-onoff-cec/
  https://www.youtube.com/watch?v=Z-KaPnAGPNQ


4/12/2017

AM437x-EVM-GP HDMI 설정

1. AM437x-EVM 관련정보

AM437x-EVM을 빌려서 , 집에서 가지고 놀게 되었지만, TI에서 제공되는 자료가 거의 오픈이 되어서 너무 좋고, 설정하기도 편하다.
역시 BeagleBone Board에 보다 성능이 좋다.

  • AM437x EVM 
  http://processors.wiki.ti.com/index.php/AM437X_EVM_Boards


1.1 AM437x-EVM 의 HDMI 설정 및 분석

AM437x인 경우 기본적으로 HDMI Host controller 가 존재하지 않아 Silicon Image사의Chip 인 Sil9022A을 이용하여
HDMI를 전송을 하고 있으며, 이를 설정하기 위해서는 Device Tree 설정파일인 DTB만 변경하면된다.



  • DSS( Display Subsystem)의 역할 
AM437x 에서 Video Display 관련부분의 Hardware Interface이며, Pin Description을 보면
기존에 사용하던 모든이 Hsync와 Vsync, Pixel Clock 및 Data0~23, En 로 기본구성이 되어있다.

많이 사용되어지고 있는 MIPI DSI는 구현이 되어있지 않다고 되어있다.
ERRATA에 보면 DSS에 많은 제약이 있음을 알게된다. (해상도 및 memory bandwidth )

관련자료
  http://www.ti.com/lit/ug/spruhl7f/spruhl7f.pdf

1.2 AM437x EVM  HDMI HW 관련 정보 
VIDEO는 현재 24bit가 아닌 16Bit만을 사용하고 있으며, AUDIO를 구조도 동일하다.
VIDEO 같은 경우는 LCD모드와 크게 별반 차이가 없다고 생각하면 되겠다.

  1. DSS, 영상 Data(AM437X_LCD_DATA0~15) -> Buffer Chip(SN74LVC32244ZKE,SN74LVC244A )  전압 3.3V변화 및 Buffer
  2. 변경된 DATA -> Sil9022A 연결 
  3. McASP -> Buffer Chip 전압 변경 
  4. 변경된 DATA -> Sil9022A 연결 

관련자료 
  http://processors.wiki.ti.com/images/9/95/Am437x_gp_evm_3k0006_schematic_rev1_4a.pdf
  http://processors.wiki.ti.com/index.php/AM437X_EVM_Boards



1.2 AM437x의 EVM Software 및 관련 설명서 
TI에서 EVM의 간단한 설명서 및 사용법 쉽게 파악가능하다
BSP를 Download 가능하며, Image를 가지고 쉽게 Write를 하여 SD Boot로 TEST 가능.

관련자료
  http://www.ti.com/tool/tmdsevm437x#descriptionArea

처음 회로도를 보고, LCD와 HDMI 동시 출력이 가능할 것이라고 생각을 했지만,
지원이 되지 않는다고 TI에서 명시를 해주고 있다. 이부분은 시간이 나면 다시 확인해봐야겠지만,
현재 시간이 없어 추후 회로도에서 TI Buffer chip 3개 부분을 다시 잘 보면 되겠다.

Memory bandwidth 제한으로 인하여 HD급 영상만 720p@60 재생이 되며,
AM437x 현재 Sigle output으로  LCD or HDMI 를 동시에 출력이 불가능하다고 한다.


  • 일반적인 HDMI 설정변경

 Device Tree인 *.dtb를 이용하여 변경을 하면된다고 한다.

관련자료
  http://processors.wiki.ti.com/index.php/Linux_Core_DSS_User%27s_Guide#AM4_Boards


1.3 AM437x EVM GP HDMI 설정 

위에서 설명했듯이 기본으로 제공해주는 Device Tree 인 파일인 DTB 파일을 찾아 변경을 해주면된다.

  • prebuilt-Image 의 Device Tree 설정확인 
    아래의 두개의 Device Tree 설정을 쉽게 확인가능, 이를 적용하자

$ ./board-support/prebuilt-images
$ ls 
MLO-am437x-evm          am437x-gp-evm.dtb  am43x-epos-evm-hdmi.dtb  u-boot-am437x-evm.img      uEnv.txt
am437x-gp-evm-hdmi.dtb  am437x-sk-evm.dtb  am43x-epos-evm.dtb       u-boot-spl.bin-am437x-evm  zImage-am437x-evm.bin


  • Kernel Device Tree 설정 확인 
     Device Tree 좀 더 변경하고자 한다면 아래에서 확인

$ cd ./board-support/linux*
$ vi arch/arm/boot/dts/am437x-gp-evm-hdmi.dts // device tree 설정확인 
....


  • AM437x Device Tree 관련내용 
  AM437x Device Tree MMC BOOT관련내용. (UBoot의 환경설정에서 변경)

Uboot Script 과 Kernel Device Tree
  http://ahyuo79.blogspot.kr/2015/08/am437x-kernel-device-tree.html


2. UBOOT 설정 변경

현재 AM437x는 bootz라는 command를 이용하여 zImage와 *.dtb 을 booting한다.
uboot에서 findfdt 에서 fdtfile을 직접 변경하거나, board_name을 변경한다면
dtb 설정이 변경이 된다.

이 부분은 상위  device tree 부분을 참조


3. Sys File 변경 및 Uboot 설정변경


$ fbset  // display 해상도 확인 
$ fbset -i // display 해상도 확인 


  http://e2e.ti.com/support/arm/sitara_arm/f/791/p/551865/2017650
  http://processors.wiki.ti.com/index.php/Matrix_Users_Guide#I_don.27t_want_Matrix_to_run_on_boot_up
  https://e2e.ti.com/support/arm/sitara_arm/f/791/p/358458/1258352#1258352
  http://processors.wiki.ti.com/index.php/DSS2_SYSFS_Examples#SYSFS_Entries_for_FB


4. AM437x EVM Devic 확인사항 

 ....
omap_i2c 44e0b000.i2c: bus 0 rev0.12 at 100 kHz  // 아래 driver 는 I2C로 설정 
sii9022 1-003b: sil9022 HDMI Chip version = b0
....

12/10/2016

HDMI 및 VPSS 설정

1. HDMI 와 VPSS 설정

아래설정은 기본적으로 DM8148로 SDK기준으로 작성했기때문에, TI BSP에 따라
달라질수 있겠다.
  • HDMI (DM816x AM389x DM814x AM387x)
  1. HDMI Kernel 설정 및  모듈
  2. sysfs 설정방법
  http://processors.wiki.ti.com/index.php/TI81XX_PSP_HDMI_Driver_User_Guide

  • VPSS (HDVPSS) (DM814X AM387X)  관련사항 설정
  HDVPSS의 경우 VIDEO IN/OUT을 담당해주는 Device로 현재 두개까지 지원이 가능하다.
  만약 Display0 or 1 ( VOUTx) 변경하고 싶다면, 아래와 같이 sysfs을 이용하여, 변경해주자.
  sysfs : display0
  아래와 같이 shell program을 수정을하여, LCD or HDMI Mode로 수정을 하자.

$ vi dm8148/targetfs/etc/rc5.d/S01load-hd-firmware.sh
#!/bin/sh
#
# manage HDVICP2 and HDVPSS Engine firmware

PATH=$PATH:/usr/share/ti/ti-media-controller-utils
HDVICP2_ID=1
HDVPSS_ID=2

configure_lcd()
{
    echo "Configuring fb0 to LCD"
    echo 1:dvo2 > /sys/devices/platform/vpss/graphics0/nodes
    echo 0 > /sys/devices/platform/vpss/display1/enabled
    echo 33500,800/164/89/10,480/10/23/10,1 > /sys/devices/platform/vpss/display1/timings
    echo triplediscrete,rgb888 > /sys/devices/platform/vpss/display1/output
    echo 1 > /sys/devices/platform/vpss/display1/enabled
    fbset -xres 800 -yres 480 -vxres 800 -vyres 480
}


case "$1" in
    start)
        echo "Loading HDVICP2 Firmware" 
        prcm_config_app s
        depmod -a
        modprobe syslink
        until [[ -e /dev/syslinkipc_ProcMgr && -e /dev/syslinkipc_ClientNotifyMgr ]]
        do
            sleep 0.5
        done
        firmware_loader $HDVICP2_ID /usr/share/ti/ti-media-controller-utils/dm814x_hdvicp.xem3 start
        echo "Loading HDVPSS Firmware"
        firmware_loader $HDVPSS_ID /usr/share/ti/ti-media-controller-utils/dm814x_hdvpss.xem3 start
        modprobe vpss sbufaddr=0xBFB00000 mode=hdmi:1080p-60 i2c_mode=1
        #modprobe vpss sbufaddr=0xBFB00000 mode=hdmi:720p-60 i2c_mode=1
        modprobe ti81xxfb vram=0:24M,1:16M,2:6M
        modprobe ti81xxhdmi
        modprobe tlc59108
      ;;
    stop)
        echo "Unloading HDVICP2 Firmware"
        firmware_loader $HDVICP2_ID /usr/share/ti/ti-media-controller-utils/dm814x_hdvicp.xem3 stop
        echo "Unloading HDVPSS Firmware"
        rmmod tlc59108
        rmmod ti81xxhdmi
        rmmod ti81xxfb
        rmmod vpss
        firmware_loader $HDVPSS_ID /usr/share/ti/ti-media-controller-utils/dm814x_hdvpss.xem3 stop
        rm /tmp/firmware.$HDVPSS_ID
        rmmod syslink
      ;;
    *)
        echo "Usage: /etc/init.d/load-hd-firmware.sh {start|stop}"
        exit 1
        ;;
esac

exit 0


  • 실제 수정 및 TEST
아래와 같이 HDVICP와 HDVPSS의 Firmware도 변경이 가능하며, HDMI 설정가능

$ cd etc/rc5.d
$ vi S01load-hd-firmware.sh

PATH=$PATH:/usr/share/ti/ti-media-controller-utils                              
HDVICP2_ID=1                                                                    
HDVPSS_ID=2 
....

case "$1" in                                                                    
   
    start)
 depmod -a
        echo "Loading HDVICP2 Firmware"
        prcm_config_app s
        depmod -a 
        modprobe syslink
        until [[ -e /dev/syslinkipc_ProcMgr && -e /dev/syslinkipc_ClientNotifyMgr ]]
        do                                                
            sleep 0.5
        done
        #firmware_loader $HDVICP2_ID /usr/share/ti/ti-media-controller-utils/dm814x_hdvicp.xem3 start
        firmware_loader $HDVICP2_ID /usr/share/ti/ti-media-controller-utils/dm814xbm_m3video_whole_program_debug.xem3 start
        echo "Loading HDVPSS Firmware"
        #firmware_loader $HDVPSS_ID /usr/share/ti/ti-media-controller-utils/dm814x_hdvpss.xem3 start
        firmware_loader $HDVPSS_ID /usr/share/ti/ti-media-controller-utils/dm814xbm_m3vpss_whole_program_debug.xem3 start
        #modprobe vpss sbufaddr=0xBFB00000 mode=hdmi:1080p-60 i2c_mode=1
        modprobe vpss sbufaddr=0xBFB00000 mode=hdmi:720p-60 i2c_mode=1
        modprobe ti81xxfb vram=0:24M,1:16M,2:6M
        modprobe ti81xxhdmi
      ;;
    stop)
        ....
    *)
        echo "Usage: /etc/init.d/load-hd-firmware.sh {start|stop}"
        exit 1
        ;;
esac


$ ls
S01load-hd-firmware.sh  S10telnetd              S99rmnologin
S02dbus-1               S20syslog
S10dropbear             S99gplv3-notice

/etc/rc5.d# ls -al
drwxr-sr-x    2 root     root          672 Dec 30  2015 .
drwxr-sr-x   35 root     root         5504 Dec 30  2015 ..
lrwxrwxrwx    1 root     root           29 Dec 31 05:23 S01load-hd-firmware.sh -> ../init.d/load-hd-firmware.sh
lrwxrwxrwx    1 root     root           16 Dec 30  2015 S02dbus-1 -> ../init.d/dbus-1
lrwxrwxrwx    1 root     root           18 Dec 31 05:23 S10dropbear -> ../init.d/dropbear
lrwxrwxrwx    1 root     root           17 Dec 31 05:22 S10telnetd -> ../init.d/telnetd
lrwxrwxrwx    1 root     root           16 Dec 31 05:23 S20syslog -> ../init.d/syslog
lrwxrwxrwx    1 root     root           22 Dec 31 05:22 S99gplv3-notice -> ../init.d/gplv3-notice
lrwxrwxrwx    1 root     root           19 Dec 31 05:22 S99rmnologin -> ../init.d/rmnologin


~/dm8148/targetfs/etc/rc5.d$ ll
합계 8
drwxr-sr-x  2 jhlee jhlee 4096 12월 15 16:27 ./
drwxr-sr-x 35 jhlee jhlee 4096 12월 15 14:47 ../
lrwxrwxrwx  1 jhlee jhlee   29 12월 31  2012 S01load-hd-firmware.sh -> ../init.d/load-hd-firmware.sh*
lrwxrwxrwx  1 root  jhlee   16 12월 13 14:42 S02dbus-1 -> ../init.d/dbus-1*
lrwxrwxrwx  1 jhlee jhlee   18 12월 31  2012 S10dropbear -> ../init.d/dropbear*
lrwxrwxrwx  1 jhlee jhlee   17 12월 31  2012 S10telnetd -> ../init.d/telnetd*
lrwxrwxrwx  1 jhlee jhlee   17 12월 31  2012 S20netperf -> ../init.d/netperf*
lrwxrwxrwx  1 jhlee jhlee   16 12월 31  2012 S20syslog -> ../init.d/syslog*
lrwxrwxrwx  1 jhlee jhlee   16 12월 31  2012 S20thttpd -> ../init.d/thttpd*
lrwxrwxrwx  1 jhlee jhlee   18 12월 31  2012 S30pvr-init -> ../init.d/pvr-init*
lrwxrwxrwx  1 jhlee jhlee   22 12월 31  2012 S99gplv3-notice -> ../init.d/gplv3-notice*
lrwxrwxrwx  1 jhlee jhlee   22 12월 31  2012 S99matrix-gui-e -> ../init.d/matrix-gui-e*
lrwxrwxrwx  1 jhlee jhlee   19 12월 31  2012 S99rmnologin -> ../init.d/rmnologin*

  • VPSS 설정방법
Video in/out 설정방법

  http://processors.wiki.ti.com/index.php/DM814X_AM387X_VPSS_Video_Driver_User_Guide_PSP_04.01.00.05#SYSFS_Software_Interfaces

  • VPSS와 VICP Firmware
VPSS와 VICP는 OS즉, BIOS6으로 기반으로한 Firmware를 사용한다.
다만, TI DSP가 C6xx 이 아닌 ARM의 Cortex-M3을 사용하여 TI용으로 별도로 Build 한 다음 Linux Booting 후에 이부분을 Loading 하는 방식으로 동작이 된다.

  http://processors.wiki.ti.com/index.php/EZSDK_Reducing_Size_Of_Media_Controller_Firmware
  • HDMI EDID 분석 
Device에서 아래와 같이 EDID를 분석을 하여 영상의 정보를 확인하자.

$ cat /sys/devices/platform/vpss/display0/edid

  https://en.wikipedia.org/wiki/Extended_Display_Identification_Data#Enhanced_EDID_.28E-EDID.29

  • HDMI 기본 VIDEO TEST 
아래 프로그램을 이용하여 frame buffer를 TEST 해보자.
이제 제대로 설정이 되었다면, /dev/fb0, /dev/fb1 /dev/fb2 test

/home/root/dm814x-evm/usr/share/ti/ti-psp-examples/saFbdevDisplayPan를 이용하여 TEST


$ cd ~/dm8148/targetfs   // device targetfs 이동 
$ cd home/root/dm814x-evm/usr/share/ti/ti-psp-examples
$ ls
ReadMe        minimal_capture   saFbdevDisplay     saFbdevHdmiDisplay    saFbdevScalingDisplay  saLoopBackFbdev  saMmapDisplay     saWatchdog
edma_test.ko  minimal_playback  saFbdevDisplayPan  saFbdevMovingDisplay  saLoopBack             saLoopBackScale  saUserptrDisplay

나머지 기능을 프로그램을 이용하여 다양한 TEST도 해보자.


2. DM8167 관련 경우

RDK 관련사항 수정

$ vi ./dvr_rdk/mcfw/src_linux/mcfw_api/ti_vdis.c
....
                enableConfigExtVideoEncoder = TRUE;
....


1/22/2016

HDMI - TMDS Coding 과 Channel 구성

1. TMDS(Transition Minimized Differential Signaling)

TMDS(Transition Minimized Differential Signaling) Silicon Image에서 개발되어졌으며,
차분신호의 한 종류이며 영상과 음성 및 부가 데이터를 고속 전송을 위해서
HDMI와 DVI에서 현재 사용하고 있다.
차분신호는 일반적으로 고속신호에 이용이되며, Noise 문제에 있어 강점이 존재한다.

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

1.1 TMDS Coding 

기본 Encoding 방식은 8b/10b encoding 기반으로 하지만, 2가지 절차 (2-Stage process)를 추가하여, 이를 보안하였다.

  • 1st Stage process 
  1. 8 bit input을 10 bit code와 함께  변경한다 
  2. 1st bit는 변경이 안되고, 각 다음 bit들은 XOR or XNOR 값을 선택 (이전 bit의 반대로 선택) 
  3. encoder는 XOR 와 XNOR 사이에서 가장 적은 변화를 하는 것을 선택하는 것을 지향
  4. 9st bit는 encode가 되며 이는 운영(operaton)에 사용된다. 

  • 2nd Stage Process
  https://en.wikipedia.org/wiki/8b/10b_encoding


참고사항
  https://en.wikipedia.org/wiki/Transition-minimized_differential_signaling
  https://ko.wikipedia.org/wiki/%EB%B3%80%ED%99%94_%EC%B5%9C%EC%86%8C%ED%99%94_%EC%B0%A8%EB%B6%84_%EC%8B%A0%ED%98%B8


1.2 TMDS Channel

TMDS를 보면, 구성이 Channel 3개와 Clock으로 구성이 되며, 이를 어떻게 사용하는지가 중요하다.

아래를 정확히 이해를 하려면, Transmitter Chip의 구성을 이해해야하며, Parallel Interface to Serial interface 역할을 HDMI가 한다고 생각하면된다.

만약 Video로 RGB로 보낸다고 한다면 이를 간단히 분석해보자

  1. Pixel Component (RGB) : 8 x 3 = 24 Pin
  2. H,VSYNC            : 2 Pin
  3. Pixel Clock         :  1 Pin  

만약 Auxiliary Data(Audio)가 추가된다면 아래의 Audio Pin 구성을 보면되겠다.




이번에는 SiI9022A의 Chip의 구성이며 상위와 비교해서 이를 보자.

  1. RGB D[0-23]  ( 상위가 RGB 구성이지만 RGB가 아닐수도 있다)
  2. HS, VS 
  3. IDCLK 


Audio 는 별도이다.

이제 Video의 SDTV 경우 로 720x480을 보낸다고 가정한다면, (858x525)
Vertical/horizontal Blanking Line에 의해 실제 영상이 보인다.
사실 경우에 따라 704로 변경 될수 도 있다.



위와 같은 Video Lin을 아래와 같이 다시 분석해보면 아래와 같다.
상위 CTL0~3PIN의 보자.


다시 좀더 자세히 Channel 0~3의 Pixel Component를  CTL Pin의 Data Type에 따라 자세히 분석해보자.

CTL Period : 상위 CTL Pin에 의해 Preamble이 결정이 되어 Data Period Type 결정


상위 실제 Pixel Data을 보내기 전에 Header와 Packet을 보낸다.
이 정보에 Audio 정보 및 Mpeg 관련정보 다른 Data가 들어간다. 이부분은 Spec을 보자.


1/28/2015

HDMI 와 DVI PIN 구성 및 비교

1. HDMI Pin 구성 

  • DVI와 HDMI PIN의 호환성 
HDMI와 DVI에서 PIN 을 보면 TMDS를 사용하는데 이 PIN을 를 Mapping 할 경우
호환이 된다
그래서 사실 Pinmap으로 보면 크게 다르지 않다.

  • USB와 HDMI의 호환성  
MHL(Mobile High Definition Link)를 이용하여, HDMI와 MicroUSB B type과 호환이 된다.
이부분은 MHL이 정확하게 어떻게 동작이 되는지 알아야 하는데, 이부분은 아직 이해를 하지 못했다. 


1.1 HDMI Type A Pin out 

Pin out
A diagram of the 19 pins of a type A receptacle HDMI connector showing 10 pins on the top row and 9 pins on the bottom row.
HDMI Type A 소켓
핀 1TMDS Data2+
핀 2TMDS Data2 Shield
핀 3TMDS Data2–
핀 4TMDS Data1+
핀 5TMDS Data1 Shield
핀 6TMDS Data1–
핀 7TMDS Data0+
핀 8TMDS Data0 Shield
핀 9TMDS Data0–
핀 10TMDS Clock+
핀 11TMDS Clock Shield
핀 12TMDS Clock–
핀 13CEC
핀 14보류 (HDMI 1.0 ~ 1.3c), Utility/HEAC+ (선택적, 오디오 리턴 채널과 이더넷이 달린 HDMI 1.4+)
핀 15SCL (DDC를 위한 I²C Serial Clock)
핀 16SDA (DDC를 위한 I²C Serial Data Line )
핀 17DDC/CEC/HEC Ground
핀 18+5 V 전원 (최대 50 mA)
핀 19핫 플러그 감지 (모든 버전), HEAC- (선택적, 오디오 리턴 채널과 이더넷이 달린 HDMI 1.4+)

  아래에서 HDMI Type의 구성을 살펴보자
  http://kcchao.wikidot.com/hdmi

1.2 DVI-I Pin Out




Pin 1TMDS data 2−Digital red− (link 1)
Pin 2TMDS data 2+Digital red+ (link 1)
Pin 3TMDS data 2/4 shield
Pin 4TMDS data 4−Digital green− (link 2)
Pin 5TMDS data 4+Digital green+ (link 2)
Pin 6DDC clock
Pin 7DDC data
Pin 8Analog vertical sync
Pin 9TMDS data 1−Digital green− (link 1)
Pin 10TMDS data 1+Digital green+ (link 1)
Pin 11TMDS data 1/3 shield
Pin 12TMDS data 3−Digital blue− (link 2)
Pin 13TMDS data 3+Digital blue+ (link 2)
Pin 14+5 VPower for monitor when in standby
Pin 15GroundReturn for pin 14 and analog sync
Pin 16Hot plug detect
Pin 17TMDS data 0−Digital blue− (link 1) and digital sync
Pin 18TMDS data 0+Digital blue+ (link 1) and digital sync
Pin 19TMDS data 0/5 shield
Pin 20TMDS data 5−Digital red− (link 2)
Pin 21TMDS data 5+Digital red+ (link 2)
Pin 22TMDS clock shield
Pin 23TMDS clock+Digital clock+ (links 1 and 2)
Pin 24TMDS clock−Digital clock− (links 1 and 2)
C1Analog red
C2Analog green
C3Analog blue
C4Analog horizontal sync
C5Analog groundReturn for R, G, and B signals

  • DVI 관련 내용
PC에서 DVI Cable로 잘 알려져 있으며, Video를 전송하는 Cable이다.
DVI-Cable 종류는 Type A, B, C, D, E 로 나뉘며, 아래의 사이트에 자세한 Cable 정보를 알수 있다.
  https://ko.wikipedia.org/wiki/%EB%94%94%EC%A7%80%ED%84%B8_%EB%B9%84%EC%A3%BC%EC%96%BC_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4
  https://en.wikipedia.org/wiki/Digital_Visual_Interface

1/19/2015

HDMI 와 DVI 기본정리

1. HDMI 


HDMI (High Definition Multimedia Interface) 는 기본적으로 DVI 에서 발전하여, Video , Audio Data를 전송하기 위해서 만들어진 Interface이다.
기본적으로 DVI 기반이므로, 이는 항상 DVI 알고 있어야 한다.
HDMI를 기술을 만든 회사들은 Sony , Silicon Image 등 협력하여 이 Interface를 만들었다.
HDMI Main 기술은 거의 Silicon Image일 것라고 생각되어진다. 
현재 SOC에서 HDMI Interface를 기본적으로 가지고 있는 것들을 보면, 사용이 편하고 설정도 편하여 다시 한번 정리하고자 한다.


2. HDMI 기본 구성 


          Host (Source)                                                    Display (Sink)
http://kcchao.wikidot.com/hdmi


HDMI는 기본적으로 BUS구조가 아니며, 1:1 Mapping 형식으로 Source와 Sink가 붙어야한다.
USB일 경우는 BUS구조이기 때문에, 여러 Port가 연결이 가능하지만, HDMI는 다르다.



  • HDMI 기본구성 용어 설명 
  1. Source  : Device에서 Data를 보내는 곳 (HDMI Output) ,             HW : Transmitter 
  2. Sink     : Device에서 Data를 받는곳    (HDMI Input, e.g Display )  HW : Receiver 
  3. Repeater : HDMI의 신호를 멀리 보내기 위해서 사용되어지는것이다.   
  4. CEC :    Consumer Electronics Control 약어로 Sink를 Control하기 위해서 사용 
  5. HPD :    Hot plug  (Pin 19)
  6. DDC :    I2C로 통신하며, Display의 EDID 값을 읽는다. (Pin 15,16)       

  • HDMI 관련내용 
  HDMI Version 과 각각의 기능별 설명을 자세히 해주고 있다.
  역시 영문 wiki와 정확한 spec을 보는것이 가장 현명한 것 같으며, 한글보다는 영문이 더 정확한 것 같다.

  http://kcchao.wikidot.com/hdmi
  https://en.wikipedia.org/wiki/HDMI


  • 아래의 정보는 이상하여 Link를 걸어놓았다. (참고하지 마시길)

  https://ko.wikipedia.org/wiki/%EA%B3%A0%EC%84%A0%EB%AA%85_%EB%A9%80%ED%8B%B0%EB%AF%B8%EB%94%94%EC%96%B4_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4 (고선명_멀티미디어_인터페이스)


  • HDMI Spec
  현재 간단히 구할수 있는 Spec을 구했으며, 간단히 구성을 보자.
  http://www.microprocessor.org/HDMISpecification13a.pdf
  http://www.evernew.com.tw/HDMISpecification13a.pdf


  • ESD 보호 회로 (ESD protection chip)
HDMI 기술문서를 보면 항상 ESD 보호회로가 나오며, 이는 요구되어진다고 한다.
보통 Chip 형태로 나오며, HW로 구성을 하면된다.
ESD(Electro Static Discharge) 영문해석해서 두개의 전하를 가진 물체가 접촉 or 쇼트에 발생하는 것을 말하며, 이는 spark를 발생한다고 쉽게 설명해서 정전기 라고 생각하면되겠다.

  https://en.wikipedia.org/wiki/Electrostatic_discharge
  http://tsecl.com/board/index.asp?kind=view&madalli=freeboard&num=9
  http://www.ti.com/lit/sg/sszb130b/sszb130b.pdf


3. HDMI의 설정관련기술 

예를 들면, HMDI Switch , HDMI repeater, 등으로 구성이 될 경우 아래와 같은 상황이 될수 있다.
TMDS일 경우 1:1일지만, DDC이는 I2C로 버스이다. CEC의 경우도 아래와 같이 연결이 된다고 하는데, 이부분은 확인해봐야겠다.






3.1. DDC (I2C로 연결)

기본적으로, PIN15,16을 이용하여, Source에서 I2C로 접근하여 EDID ROM 정보를 읽어간다.
정확히 이해해야하는 것은 EDID는 ROM이며, Source, 즉 HOST가 이 정보를 읽어가는것이다. Host에서 Device들의 정보를 쉽게 파악이 가능하고 이를 기반으로 통신하다.
EDID 1.3인 경우, 128 byte로 구성이 되어있으며, DDC의 I2C를 이용하여 Data를 읽고,
이정보를 바탕으로 Sink 즉 연결된 Device의 정보 Feedback을 받을수 있다.
그리고, 관련내용을 아래에서 보자.


  • DDC관련 내용
  http://en.wikipedia.org/wiki/Display_Data_Channel


  • EDID ROM 관련내용 
EDID 제품의정보 및 Display 해상도 그리고, Timing 정보 , Audio 정보 , Audio Format 정보
만약 자세히 HDMI를 다룬다면 아래부분은 자세히 봐야한다.

  http://en.wikipedia.org/wiki/Extended_display_identification_data
  http://read.pudn.com/downloads110/ebook/456020/E-EDID%20Standard.pdf


3.2 HDMI-CEC

CEC는Consumer Electronics Control)로 Source, 즉 Host에서 Command 주어 HDMI Device를 Control, 즉 제어를 한다는 개념이다.

대표적인 예인것이 remocon이며, 예를 들면, TV or set-top box, PVR/DVR 연결이 되어 있
을 때, 이를 Device on/off 하고 제어하는 것이다. 자세한내용은 Spec을 보자.
Set-Top box 인 경우를 예를 들자면, 이 기능을 이용하여 TV에게 Command를 주어 Display를 변경하고, Remocon 기능을 줄수 있다.

양방향 통신 opcode 형식으로 제어를 한다 그러므로 HOST가 일방적인 제어가 아니 ACK가 있다. 

다음은 Spec의 operand들의 각종의 예제 CEC 17 Operand Descriptions 
CEC 13.10 OSD Display로 TV의 OSD에 자막등을 제어가 가능하다고 하는 이부분은 흥미롭다. Spec을 한번보자.

  https://en.wikipedia.org/wiki/Consumer_Electronics_Control
  https://github.com/JeonghunLee/CEC/blob/master/extras/CEC_Specs.pdf

Linux CEC 관련
  http://elinux.org/CEC_(Consumer_Electronics_Control)_over_HDMI

3.3 Hotplug 기능

HPD 기술은 생략

아래를 참조를 하면 될 것 같다.
  http://wellplay.tistory.com/entry/HDMI-Hot-Plug-Detect-PinHPD-and-5V-Pin


4. HDCP

HDCP(High-bandwidth Digital Content Protection)는 디지털영상보호기능으로, 정확히 말해 Digital Contents를 보호하기 위해 암호화 및 인증을 통해 영상을 출력을 하는 기능이다.
구현만 하지 사실 많이 사용이 되어지는 것 같지는 않다.

본인도 예전에 HDCP 1.1 기능을 사용하여 HDMI를 개발을 한적이 있는데 현재 이 기술이 많이 발전하여 점점 더 변경이 되어가고 있지만, 지속적으로 지켜봐야겠다.
아래를 보면 이 기술은 인텔에서 개발이 되었다고 한다.

HDCP 버전지원하는 인터페이스
1.0DVI
1.1DVIHDMI
1.2DVI, HDMI
1.3DVI, HDMI, UDIGVIFDP

  http://www.avkorea.com/catalog/extron/HDCP.pdf
  http://ko.wikipedia.org/wiki/%EA%B3%A0%EB%8C%80%EC%97%AD_%EB%94%94%EC%A7%80%ED%84%B8_%EC%BD%98%ED%85%90%EC%B8%A0_%EB%B3%B4%ED%98%B8


5. Source의 Transmitter

Silicon image 사에서 제공하는 HDMI 관련 칩으로, Transmitter 기능을 가진 칩이다.
기본 구성은 아래의 내용을 보면 쉽게 이해가능하다.
HDMI와 SPDIF 연결이 가능하다.

기본구성
  https://www.semiconductorstore.com/pdf/newsite/siliconimage/9030_PB.pdf
  https://www.semiconductorstore.com/pdf/newsite/siliconimage/SiI9022a_pb.pdf


Silicon Image의 문서는 비공개문서이며, 아래의 사이트에 참조

Flowchart
         Configuration Flowchart            ( 전체 Flowchart     ,Page 7)
         Display Discovery Flow chart     ( Display 연결관련   ,Page 11)
         HDMI Transmitter Initialization     ( HDMI Init            ,Page 14)
         Setting Video Mode Flow chart    ( Video Mode setting ,Page 16)


Ref.
SiI-AN-0117-A_9030     (HDMI Transmitter Application Note)
  http://wenku.baidu.com/view/969089d280eb6294dd886c81.html



SiI-PR-0003-B00_9030   (HDMI Transmitter Programmer's Reference)
  http://wenku.baidu.com/view/4553e074f46527d3240ce0c4.html


1/05/2015

HDMI 관련 프로젝트 관련정리

본인도 오래전에 TI Chip(DM646x)을 가지고 Silicon Image사의 Sil9030 Chip Linux Device Driver를 개발해보고, 
HDMI의 HDCP기능 구현과 TEST Program 과  Audio Multi-Channel 을 AC3(5.1) Format을 이용하여 HDMI로 통해 전송하여
SPIDF 로 AC(5.1Channel)재생을 하도록 수정하고 개발해봤다.
물론 이때는 Silicon Image사 Window CE Driver 와 Spec만 제공해주어서, 
Window Deivce Driver를 리버스 엔지니어링로 분석 후 Linux Device Driver를 개발했다. 

최근 HDMI 관련자료를 보니, 좀 이상하여, 다시 정리하려고만, 하며, 
솔직히 말해 너무 오래전일이라 지금 데이타 시트를 보고 간단히만 정리하려고 한다.
추후에 다시 HDMI Device Driver 설정 변경할 기회가 있을 때 세부적으로 기술하도록 하자. 

  • SII9030의 전체구성 


SiI9030의 기본특징은 다음과 같다.

• HDMI 1.0
• DVI 1.0
• EIA/CEA-861B
• HDCP 1.1



  • Digital Video Output

• Integrated PanelLink® core
• Supports DTV (480i/576i/480p/576p/720p/1080i/1080p) and PC(VGA/XGA/SXGA/WSXGA) resolutions
• Flexible video interface supports DVD and HD MPEG decoders
- 12/24-bit RGB YCbCr 4:4:4
- 16/20/24-bit YCbCr 4:2:2
- 8/10/12-bit YCbCr 4:2:2 (ITU-R BT.601 & BT.656)
• Integrated YCbCr <—> RGB color space conversion
• 4:2:2<—> 4:4:4 up-converter
• Programmable Data Enable (DE) generator


  • Digital Audio Output

• DVD-Audio support thru 4xI2S inputs
• Supports 2-channel 192kHz or 8-channel 96kHz
• Supports IEC60958 2-channel PCM or IEC61937 compressed audio (Dolby Digital, DTS, etc.)
• Industry-standard S/PDIF input