Hardkernel ODROID 공개자료

Embed Size (px)

Citation preview

  • 7/23/2019 Hardkernel ODROID

    1/192

    : 2011. 10. 14.: 2011. 10. 14.: 2011. 10. 14.: 2011. 10. 14.

    :::: ,,,, ,,,, ,,,, ,,,, ,,,, ,,,,

  • 7/23/2019 Hardkernel ODROID

    2/192

    Samsung S5P6450Samsung S5P6450Samsung S5P6450Samsung S5P6450 ODROIDODROIDODROIDODROID----EEEE PCBPCBPCBPCB

    Samsung S5P6450Samsung S5P6450Samsung S5P6450Samsung S5P6450 ODROIDODROIDODROIDODROID----EEEE

    Samsung S5P6450Samsung S5P6450Samsung S5P6450Samsung S5P6450 ODROIDODROIDODROIDODROID----E WinCE 6.0E WinCE 6.0E WinCE 6.0E WinCE 6.0

    Android Camera PortingAndroid Camera PortingAndroid Camera PortingAndroid Camera Porting

    Linux Server on ARMLinux Server on ARMLinux Server on ARMLinux Server on ARM

    Android Open AccessoryAndroid Open AccessoryAndroid Open AccessoryAndroid Open Accessory

  • 7/23/2019 Hardkernel ODROID

    3/192

    :

  • 7/23/2019 Hardkernel ODROID

    4/192

    ????

    (RAM / FLASH)(RAM / FLASH)(RAM / FLASH)(RAM / FLASH)

    Application ProcessorApplication ProcessorApplication ProcessorApplication Processor

    S5P6450S5P6450S5P6450S5P6450

  • 7/23/2019 Hardkernel ODROID

    5/192

    ????

    (WinCE, Linux, Qt, QNX)(WinCE, Linux, Qt, QNX)(WinCE, Linux, Qt, QNX)(WinCE, Linux, Qt, QNX)

    Connectivity

    3G/WiFi/Bluetooth/NFC/USB/MicroSD/Camera/OpenCV

    User Interface / MM

    OpengGL/SurfaceFligner/Stagefright

    (SDK)

    JAVA

    /

  • 7/23/2019 Hardkernel ODROID

    6/192

    Application ProcessorApplication ProcessorApplication ProcessorApplication Processor

    Cortex-A9 Dual core

    Exynos-4210/4220

    MSM8960 (S4)

    Tegra-2

    OMAP-4

    EMMA Mobile

    Spear 13xx

    i.MX6

    Cortex-A8

    Exynos-3110 (S5PC110)/C100

    i.MX53/51

    Sitara AM35/7/8

    ARMADA 600 Series

    Telechips/CoreLogic/ARMLogic/WonderMedia(VIA)

    ARM11 / ARM9 ( , 3D !)

    S5P6450S5P6450S5P6450S5P6450

  • 7/23/2019 Hardkernel ODROID

    7/192

    ? ?

    (RAM/FLASH)

    (USB 2.0 Host/Device, SDIO, UART, SPI, I2C, Static Bus )

    PMIC

    NFC ZigBee

    3G / LTE

    GPS

  • 7/23/2019 Hardkernel ODROID

    8/192

    (RAM / FLASH)(RAM / FLASH)(RAM / FLASH)(RAM / FLASH)

    RAM

    SDRAM DDR DDR2 DDR3 (PC )

    2010 SDRAM (2440 )

    mDDR LPDDR2 (2~3 LPDDR2 ?) SDRAM 256Mbit (x16) / $1 (12 ), SDRAM 512Mbit (x16) / 10

    DDR2 512Mbit (x16) / $1, DDR2 1Gbit (x16) / $1.5, DDR3 1Gbit (x16) / $1.3

    mDDR 512Mbit (x16) / $2, mDDR 1Gbit (x16) / $3, mDDR 2Gbit (x32) / $5

    FLASH

    NOR : OS/App

    NAND

    NAND () AP NAND eMMC (FTL / )

    iNAND/MoviNAND (//DDR-100Mhz-8bit[eMMC4.5])

    NAND Micro-SD / SDHC / MMC

    //

  • 7/23/2019 Hardkernel ODROID

    9/192

    S5P6450S5P6450S5P6450S5P6450

    24xx24xx24xx24xx , TI, TI, TI, TI SitaraSitaraSitaraSitara AM1xxxAM1xxxAM1xxxAM1xxx ,,,, FreescaleFreescaleFreescaleFreescale i.MX2xi.MX2xi.MX2xi.MX2x

    - 5~7$ ARM9 200~400Mhz

    - PND e-book

    - POS / / PDA / /

    Samsung S5P6450 2~32~32~32~3

    3D3D3D3D //// UIUIUIUI

    USB 2.0 High speed HostUSB 2.0 High speed HostUSB 2.0 High speed HostUSB 2.0 High speed Host

    800Mhz800Mhz800Mhz800Mhz

    MigrationMigrationMigrationMigration

  • 7/23/2019 Hardkernel ODROID

    10/192

    S5P6450S5P6450S5P6450S5P6450

    SpecificationSpecificationSpecificationSpecification- ARM1176JZF-S based CPU system and Memory Mapping Unit (MMU).

    - Manufactured with the 45nm process for low power and low cost.

    - Package is 409 pin FBGA type and dimension is 14.0 x 14.0 mm with 0.65mm pitch.

    - 16KB I-cache and 16KB D-cache CPU memories.

    - 64-/32-bit 166MHz AMBA 3.0 AXI bus structure.- 32-bit Mobile DDR and DDR2 Interface.- Embedded 64kByte SRAM and 64kByte ROM on AXI.- 8-bit 5 Megapixel (MP) capable Camera Interface- 24-bit 3x I2S and 16-bit 3x PCM Interface

    - 5xUART / 2xSPI / 2xI2C / 3xSDIO interface

    - On-chip USB 2.0 OTG - USB HOST 2.0

    - Hardware Rotator- Transport Stream Interface- GPS baseband (Option)- Security SubSystem (SSS)- Mali400 3D engine- 13-ch/12bit ADC (TSADC)- MPEG2/4, H.263 Video decoder(D1)

    - Muxed RGB and Bus interface

    X: No GPS, None Secure Booting

    S: No GPS, Secure Booting

    G: GPS, None Secure Booting

    533/667/800Mhz

  • 7/23/2019 Hardkernel ODROID

    11/192

    :

  • 7/23/2019 Hardkernel ODROID

    12/192

    Hardware StructureHardware StructureHardware StructureHardware Structure

    High speedHigh speedHigh speedHigh speed Return Path, Crosstalk ,,,ETCReturn Path, Crosstalk ,,,ETCReturn Path, Crosstalk ,,,ETCReturn Path, Crosstalk ,,,ETC

    Knee FrequencyKnee FrequencyKnee FrequencyKnee Frequency

    Calculation ofCalculation ofCalculation ofCalculation of DecapDecapDecapDecap

    Characteristic Impedance of PCBCharacteristic Impedance of PCBCharacteristic Impedance of PCBCharacteristic Impedance of PCBStrip line and Micro stripStrip line and Micro stripStrip line and Micro stripStrip line and Micro strip

    PCB Design recommendPCB Design recommendPCB Design recommendPCB Design recommend

    Lower Power DDRLower Power DDRLower Power DDRLower Power DDR

    PCB Case StudyPCB Case StudyPCB Case StudyPCB Case Study

    PMIC SpecPMIC SpecPMIC SpecPMIC Spec

  • 7/23/2019 Hardkernel ODROID

    13/192

    S5P6450S5P6450S5P6450S5P6450

    4 LCD

    BCM4329Ant

    24bpp RGB

    UART

    SDIO

    WIFI /BT

    RN5T614

    Boot

    DCJACK MAX98095I2S

    MIC

    HP

    SPK

    TouchI2C 3M CAMERA

    Cam I/F

    T-FLSH

    PMIC

    SD/MMC

    BMA150I2C

    MotorDriver LRA

    I2C

    TTA20USB, UART, JTAG

    Codec

    Battery

    1500mAH@ 3.7V

    MAX17040

    I2C

    Hardware Structure of ODROIDHardware Structure of ODROIDHardware Structure of ODROIDHardware Structure of ODROID----EEEE

  • 7/23/2019 Hardkernel ODROID

    14/192

    Defining High SpeedDefining High SpeedDefining High SpeedDefining High Speed

    Digital Signal Edge Rates are the determining factor

    Higher clock frequencies mandate faster edge rates, thereby

    inferring high speed signaling issues

    Simply operating high speed ICs at a lower clock frequency

    does not eliminate the high speed integrity issues

    Think signal bandwidth not clock frequency... Digital Signal Bandwith the relationship between signal rise

    time, and its bandwith

  • 7/23/2019 Hardkernel ODROID

    15/192

    Digital Signaling FundamentalsDigital Signaling FundamentalsDigital Signaling FundamentalsDigital Signaling Fundamentals

    PCB Trace characteristic impedance ( )

    A function of dielectric constant, trace width, trace thickness,and trace height above return plane(s)

    PCB Trace propagation velocity

    Microstrip (surface) layers: prop delay ~150 psec/inch

    Magnetic field propagating thru: FR4 blew, solder

    mask,then air above Internal stripline layers: prop delay ~165 psec/inch

    Magnetic field propagating thru: FR4 above and blew

    0Z

    Er

    c

    v =

  • 7/23/2019 Hardkernel ODROID

    16/192

    High frequency signal return pathsHigh frequency signal return pathsHigh frequency signal return pathsHigh frequency signal return paths

    Kirchhoff Current Law: Sum of the currents entering and

    leaving a node is zero

    Low frequency (sine wave < 10 MHz) return: path of least

    resistance

    High frequency return : path of least inductanceHigh frequency return : path of least inductanceHigh frequency return : path of least inductanceHigh frequency return : path of least inductance

    The smallest physical loop area always provides lowest inductance

    Return current density in reference plane falls off with the square of the

    distance

  • 7/23/2019 Hardkernel ODROID

    17/192

    Signal Return PathSignal Return PathSignal Return PathSignal Return Path Signal Layer ChangeSignal Layer ChangeSignal Layer ChangeSignal Layer Change

    Three general cases:

    1. The(2) trace layers straddle

    the same reference plane2. The(2) trace layers reference

    different planes, both planes

    at same potential, e,g. GND

    3. The(2) trace layers referencedifferent planes, planes at

    different DC potential

    Implications to PCB stack

    up and trace routing rules Case 2 apply a GND

    shoting via grid across

    entire(x,y) PCB surface

  • 7/23/2019 Hardkernel ODROID

    18/192

    Return pathReturn pathReturn pathReturn path Common Design IssueCommon Design IssueCommon Design IssueCommon Design Issue

    Signal trace routing directly over a split (or other

    discontinuity) in its reference plane

    Closely spaced adjacent Vias anti-pad induced slots

    O ( )

    C

    C EMI

    D ( )

  • 7/23/2019 Hardkernel ODROID

    19/192

    Signal Return PathSignal Return PathSignal Return PathSignal Return Path Signal Layer ChangeSignal Layer ChangeSignal Layer ChangeSignal Layer Change

    C 3.) T (2) DC .T . T .

    T () :

    5 () / ()

    S (

  • 7/23/2019 Hardkernel ODROID

    20/192

    Frequency /time relationFrequency /time relationFrequency /time relationFrequency /time relation

    Basic facts and tools for the analysis of the edge of a clock

    Rise time (Tr) = time to rise from 10% to 90% of the signal.

    10%

    90%

    TrA slowrising edge

    A fast falling edge

    V

    t

  • 7/23/2019 Hardkernel ODROID

    21/192

    Knee frequencyKnee frequencyKnee frequencyKnee frequency

    Tror

    TrFknee

    5.035.0=

    TrTrTrTr is the 10is the 10is the 10is the 10----90% edge rate of the signal90% edge rate of the signal90% edge rate of the signal90% edge rate of the signal

    This is the frequency at which most energy is blewThis is the frequency at which most energy is blewThis is the frequency at which most energy is blewThis is the frequency at which most energy is blew

    EX)EX)EX)EX) TrTrTrTr =5ns, what is the equivalent frequency.=5ns, what is the equivalent frequency.=5ns, what is the equivalent frequency.=5ns, what is the equivalent frequency.

    MHzns

    Fknee 1005

    5.0==

    Period/2=Tr

    Period of the equivalent signal

  • 7/23/2019 Hardkernel ODROID

    22/192

    ReflectionReflectionReflectionReflection

    ReflectionReflectionReflectionReflection ????

    DeviceDeviceDeviceDevice DeviceDeviceDeviceDevice DeviceDeviceDeviceDevice DeviceDeviceDeviceDevice

    ....

    ReflectionReflectionReflectionReflection

    Overshoot/UndershootOvershoot/UndershootOvershoot/UndershootOvershoot/Undershoot Fast Rising/Falling Time, ReductionFast Rising/Falling Time, ReductionFast Rising/Falling Time, ReductionFast Rising/Falling Time, ReductionNoise MarginNoise MarginNoise MarginNoise Margin

    (Harmonics)(Harmonics)(Harmonics)(Harmonics) Radiation/Conduction EMI NoiseRadiation/Conduction EMI NoiseRadiation/Conduction EMI NoiseRadiation/Conduction EMI Noise

    Tr

    V

    t

    Tf Tr

    V

    Tf

    OvershootOvershootOvershootOvershoot

    UndershootUndershootUndershootUndershoot

  • 7/23/2019 Hardkernel ODROID

    23/192

    CROSSTALKCROSSTALKCROSSTALKCROSSTALK

    (Capacitance Coupling)

    .

    ZsZsZsZs

    ZoZoZoZo

    ZoZoZoZo

    ZoZoZoZo

    CCCCmmmm

    nearnearnearnear

    farfarfarfar

    ZsZsZsZs

    ZoZoZoZo

    ZoZoZoZo

    ZoZoZoZo

    Mutual CapacitanceMutual CapacitanceMutual CapacitanceMutual Capacitance, C, C, C, Cmmmm Mutual InductanceMutual InductanceMutual InductanceMutual Inductance, L, L, L, Lmmmm

    ZsZsZsZs

    ZoZoZoZo

    ZoZoZoZo

    ZoZoZoZo

    CCCCmmmm

    LLLLmmmm

    nearnearnearnear

    farfarfarfar

    nearnearnearnear

    farfarfarfar

  • 7/23/2019 Hardkernel ODROID

    24/192

    CROSSTALKCROSSTALKCROSSTALKCROSSTALK PCBPCBPCBPCB

    Driver Aggressor

    Buffer

    Shielding

    90

    Rising Time

    Ground Plane Signal Layer

  • 7/23/2019 Hardkernel ODROID

    25/192

    Calculation of Decoupling CapacitorsCalculation of Decoupling CapacitorsCalculation of Decoupling CapacitorsCalculation of Decoupling Capacitors

    dv

    dtI

    dv

    Qc

    ==

    The amount of current needed for switching an output fromlow to high(I), the time required for the capacitor to chargethe supply line (dt), and the drop in the supply voltage that

    can be tolerated (dV), must be known for computation ofdecoupling capacitor value.

    For example, consider a buffer with switching outputs. With

    dV = 0.1V, dt = 3ns, and I = 352mAC = [352mA x 3ns] / 0.1V > C = 0.01056uF

  • 7/23/2019 Hardkernel ODROID

    26/192

    Decoupling CapacitorsDecoupling CapacitorsDecoupling CapacitorsDecoupling Capacitors

    Low ESR and ESL capacitor Recommend

    Selecting the Package for the Decap

    Sizing Decap

    The large value handles the lower frequencies and highcurrent issues while the smaller value handles the lowerfrequencies

    ()0603 400

    1005 550

    1608 7002012 800

    3216 1250

    Package Series Inductances Capacitor impedance vs. frequency

  • 7/23/2019 Hardkernel ODROID

    27/192

    High Frequency Ceramic CapacitorHigh Frequency Ceramic CapacitorHigh Frequency Ceramic CapacitorHigh Frequency Ceramic Capacitor

    NPONPONPONPO capacitors have the lowest ESR and best temperaturelowest ESR and best temperaturelowest ESR and best temperaturelowest ESR and best temperatureand voltage propertiesand voltage propertiesand voltage propertiesand voltage properties, but are only available up to a fewonly available up to a fewonly available up to a fewonly available up to a few nFnFnFnF

    X7RX7RX7RX7R capacitors have reasonable voltage and temperature

    coefficients and are available from severalavailable from severalavailable from severalavailable from several nFnFnFnF to severalto severalto severalto several uFuFuFuF X5RX5RX5RX5R is similar to X7R,similar to X7R,similar to X7R,similar to X7R, but with reduced reliabilityreduced reliabilityreduced reliabilityreduced reliability and are

    being extended to 100uFextended to 100uFextended to 100uFextended to 100uF

    Y5VY5VY5VY5V dielectric is used to achieve high capacitance values,,,, but

    has very poor voltage and temperature characteristicsvery poor voltage and temperature characteristicsvery poor voltage and temperature characteristicsvery poor voltage and temperature characteristics

    1pF 10pF 100pF 1nF 10nF 100nF1pF 10pF 100pF 1nF 10nF 100nF1pF 10pF 100pF 1nF 10nF 100nF1pF 10pF 100pF 1nF 10nF 100nF 1uF 10uF 100uF1uF 10uF 100uF1uF 10uF 100uF1uF 10uF 100uF

    CODE: 1R0 100CODE: 1R0 100CODE: 1R0 100CODE: 1R0 100 101 102 103 104 105 106101 102 103 104 105 106101 102 103 104 105 106101 102 103 104 105 106 107107107107

    NPONPONPONPOX7RX7RX7RX7R

    X5RX5RX5RX5RY5VY5VY5VY5V

  • 7/23/2019 Hardkernel ODROID

    28/192

    Decoupling Capacitors RoutingDecoupling Capacitors RoutingDecoupling Capacitors RoutingDecoupling Capacitors Routing

    DO NOT have vias between DECAP and active device Visualize the high frequency current flow!!

    Ensure DECAP are on same layer as active component for

    best results Route vias into DECAP and then into the active component

    The more vias the better

    The wider the traces the better

    The closer the better ( < 5mm)

    Length to width not exceed 3:1

  • 7/23/2019 Hardkernel ODROID

    29/192

    PCB traces as Transmission LinesPCB traces as Transmission LinesPCB traces as Transmission LinesPCB traces as Transmission Lines

    Signal wavelength approaches component size

    Dielectric Loss (G)

    Trace Copper Loss(R)Trace series inductance(L)

    Trace capacitance(C)RRRR

    LLLL

    CCCC GGGG

  • 7/23/2019 Hardkernel ODROID

    30/192

    Characteristic ImpedanceCharacteristic ImpedanceCharacteristic ImpedanceCharacteristic Impedance

    Line impedance in terms of R,L,C and G

    Line Impedance for Lossless line

    )(

    )(0

    CjG

    LjRZ

    +

    +=

    CLZ =0

  • 7/23/2019 Hardkernel ODROID

    31/192

    Control impedance of PCBControl impedance of PCBControl impedance of PCBControl impedance of PCB

    Impedance Determined By

    Topology

    Dielectric constant of PCB material

    Dielectric height

    Conductor width

    Conductor thickness (small effect)

    Impedance Control

    Delivering max power to load

    Maintaining signal intergrity

    Prevent excessive driver loading

  • 7/23/2019 Hardkernel ODROID

    32/192

    I/FI/FI/FI/F PCB ImpedancePCB ImpedancePCB ImpedancePCB Impedance

    USB - Differential 90 ohm

    Memory Port 0

    Line 50 ohmMemory Port 1

    mDDR(LPDDR)

    1.DQS, DQM,DATA,ADDR, Control Signals Line 50 ohm

    2.Clock Differential 80 ohm

    MIPI Differential 100 ohm

    MMC/SD Line 50 ohm

  • 7/23/2019 Hardkernel ODROID

    33/192

    StriplineStriplineStriplineStripline MicrostripMicrostripMicrostripMicrostrip

    Cross Section of Above PCBCross Section of Above PCBCross Section of Above PCBCross Section of Above PCB

    TTTT

    Signal (Signal (Signal (Signal (microstripmicrostripmicrostripmicrostrip))))Ground/PowerGround/PowerGround/PowerGround/Power

    Signal (Signal (Signal (Signal (striplinestriplinestriplinestripline))))

    Signal (Signal (Signal (Signal (striplinestriplinestriplinestripline))))

    Ground/PowerGround/PowerGround/PowerGround/Power

    Signal (Signal (Signal (Signal (microstripmicrostripmicrostripmicrostrip))))

    Copper TraceCopper TraceCopper TraceCopper Trace

    Copper PlaneCopper PlaneCopper PlaneCopper Plane

    FR4 DielectricFR4 DielectricFR4 DielectricFR4 Dielectric

    WWWW

    Stripline

    Cross Section of Above PCBCross Section of Above PCBCross Section of Above PCBCross Section of Above PCB

    TTTT

    Signal (Signal (Signal (Signal (microstripmicrostripmicrostripmicrostrip))))Ground/PowerGround/PowerGround/PowerGround/Power

    Signal (Signal (Signal (Signal (striplinestriplinestriplinestripline))))

    Signal (Signal (Signal (Signal (striplinestriplinestriplinestripline))))

    Ground/PowerGround/PowerGround/PowerGround/Power

    Signal (Signal (Signal (Signal (microstripmicrostripmicrostripmicrostrip))))

    Copper TraceCopper TraceCopper TraceCopper Trace

    Copper PlaneCopper PlaneCopper PlaneCopper Plane

    FR4 DielectricFR4 DielectricFR4 DielectricFR4 Dielectric

    WWWW

    MicroMicroMicroMicro----StripStripStripStrip

    Stripline

  • 7/23/2019 Hardkernel ODROID

    34/192

    Micro StripMicro StripMicro StripMicro Strip

    Parallel Plate Assumptions +

    Large ground plane with zerothickness

    To accurately predict micro-stripimpedance, you must calculate the

    effectiveeffectiveeffectiveeffectiveeffectiveeffectiveeffectiveeffectivedielectric constant.

    ++

    CC

    D

    r TWTZ

    8.098.5ln

    41.1870

    ( )DC

    Cr

    C

    D

    rre

    TW

    TF

    WT

    1217.0

    1212

    1

    2

    1+

    +

    +

    +=

    From Hall, Hall & McCall:From Hall, Hall & McCall:From Hall, Hall & McCall:From Hall, Hall & McCall:

    Valid when:

    0.1 < WC/TD < 2.0 and 1 < er < 15

    ( )2

    1102.0

    D

    Cr

    T

    W

    =F

    1

    D

    C

    T

    W

    for

    TD

    TC

    WC

  • 7/23/2019 Hardkernel ODROID

    35/192

    StriplineStriplineStriplineStripline

    Same assumptions as used formicrostrip apply here

    From Hall, Hall & McCall:From Hall, Hall & McCall:From Hall, Hall & McCall:From Hall, Hall & McCall:

    Symmetric (balanced)Symmetric (balanced)Symmetric (balanced)Symmetric (balanced) StriplineStriplineStriplineStripline Case TCase TCase TCase TD1D1D1D1 = T= T= T= TD2D2D2D2

    +

    +

    )8.0(67.0)(4ln60 110

    CC

    DD

    r

    sym

    TWTTZ

    Valid when WC/(TD1+TD2) < 0.35 and TC/(TD1+TD2) < 0.25

    Offset (unbalanced)Offset (unbalanced)Offset (unbalanced)Offset (unbalanced) StriplineStriplineStriplineStripline Case TCase TCase TCase TD1D1D1D1 > T> T> T> TD2D2D2D2

    ),,,2(),,,2(

    ),,,2(),,,2(2

    00

    000

    rCCsymrCCsym

    rCCsymrCCsymoffset

    TWBZTWAZ

    TWBZTWAZZ

    +

    TD2

    TC

    WC

    TD1

  • 7/23/2019 Hardkernel ODROID

    36/192

    S5P6450 PCBS5P6450 PCBS5P6450 PCBS5P6450 PCB

    PCB (Layer Stack)

  • 7/23/2019 Hardkernel ODROID

    37/192

    PCBPCBPCBPCB

    3W rule

    20H rule

    Clock Line EMI .

    .

    T .

    Return Path .

    Clock Driver, OSC

    90

    GND Plane .

    LineLineLineLine ViaViaViaVia

  • 7/23/2019 Hardkernel ODROID

    38/192

    AntennaAntennaAntennaAntenna

    GND

    Monopole GND

    plastic

    Low-Q ,

    PCB track ,

    /4 Board

  • 7/23/2019 Hardkernel ODROID

    39/192

    LPDDRLPDDRLPDDRLPDDR DDRDDRDDRDDR

    Initialization

    VDD VDDQ

    Command

    Input/output

    2.5V -> 1.8V

    Clocking(CAS latency)

    Temperature-compensated self refresh(TCSR)

    Partial-array self refresh(PASR)

    Deep power down(DPD)

    Clock stop mode

  • 7/23/2019 Hardkernel ODROID

    40/192

    Lower Power DDRLower Power DDRLower Power DDRLower Power DDR----1111

    Data (DQ)/ DQS Signals

    Single ended nets

    Data Strobe(DQS) time delay . Byte lane(8 bit groups)

    50 ohm

    For WRITE cycles, the DQS waveform would

    be shifted a half pulse to the right, asshown by green arrow and dotted edge

  • 7/23/2019 Hardkernel ODROID

    41/192

    Lower Power DDRLower Power DDRLower Power DDRLower Power DDR----2222

    Address/Command/Control Signals

    Single ended nets

    Memory Clock

    Clock Positive edge

    Memory Clock

    50 ohm

    Clock

    Differential Signals

    80 ohm

    S SSS SSS SSS SS 1 81 81 81 8

  • 7/23/2019 Hardkernel ODROID

    42/192

    DDR Signaling SSTLDDR Signaling SSTLDDR Signaling SSTLDDR Signaling SSTL----1.81.81.81.8

    1.025V1.025V1.025V1.025V

    0.9V0.9V0.9V0.9V

    1.150V1.150V1.150V1.150V

    VVVVSSSSSSSSQQQQ

    Transmitter

    Receiver

    0.775V0.775V0.775V0.775V

    0.650V0.650V0.650V0.650V

    VVVVOLOLOLOL (MAX)(MAX)(MAX)(MAX)

    VVVVOHOHOHOH(MIN)(MIN)(MIN)(MIN)

    VVVVILILILIL

    VVVVIHIHIHIH

    VVVVIHIHIHIHACACACAC

    ACACACAC

    VVVVI LI LI LI L DCDCDCDC

    DCDCDCDC

    VVVVDDDDDDDDQ (1.8V nominal)Q (1.8V nominal)Q (1.8V nominal)Q (1.8V nominal)

    LPDDR DC/AC ti ditiLPDDR DC/AC i di iLPDDR DC/AC i di iLPDDR DC/AC ti diti

  • 7/23/2019 Hardkernel ODROID

    43/192

    LPDDR DC/AC operating conditionsLPDDR DC/AC operating conditionsLPDDR DC/AC operating conditionsLPDDR DC/AC operating conditions

    PCB C St d (S5P6450) : ODROIDPCB C St d (S5P6450) : ODROIDPCB C St d (S5P6450) : ODROIDPCB C St d (S5P6450) : ODROID E4/7E4/7E4/7E4/7

  • 7/23/2019 Hardkernel ODROID

    44/192

    PCB Case Study(S5P6450) : ODROIDPCB Case Study(S5P6450) : ODROIDPCB Case Study(S5P6450) : ODROIDPCB Case Study(S5P6450) : ODROID----E4/7E4/7E4/7E4/7

    VIA

    0.4 /0.2mm(LAND/ DRILL)

    (Clearance) 0.1mm / 0.075mm

    PCB

    0.8mm

    6 Layers

    S5P6450S5P6450S5P6450S5P6450 - 0.65mm Pitch BGA PAD

    NSMD PAD : 0.25mm / 0.26mm

    (LAND/ Solder MASK)

    Dog-bones Fan out MLB(Multi Layer Board)

    PCB C St d (SP5C100) : ODROIDPCB C St d (SP5C100) : ODROIDPCB C St d (SP5C100) : ODROIDPCB C St d (SP5C100) : ODROID

  • 7/23/2019 Hardkernel ODROID

    45/192

    PCB Case Study(SP5C100) : ODROIDPCB Case Study(SP5C100) : ODROIDPCB Case Study(SP5C100) : ODROIDPCB Case Study(SP5C100) : ODROID

    VIA

    PTH,IVH 0.45 /0.2mm

    BVH 0.5/0.1mm

    (Clearance)

    0.1mm / 0.075mm

    PCB

    1mm

    Buildup 12 Layers

    SP5C100SP5C100SP5C100SP5C100 - 0.5mm Pitch BGA PAD 521 pin

    NSMD PAD : 0.25mm / 0.3mm

    PCB Case Study(SP5C110) : ODROIDPCB Case Study(SP5C110) : ODROIDPCB Case Study(SP5C110) : ODROIDPCB Case Study(SP5C110) : ODROID S/T/7S/T/7S/T/7S/T/7

  • 7/23/2019 Hardkernel ODROID

    46/192

    PCB Case Study(SP5C110) : ODROIDPCB Case Study(SP5C110) : ODROIDPCB Case Study(SP5C110) : ODROIDPCB Case Study(SP5C110) : ODROID----S/T/7S/T/7S/T/7S/T/7

    VIA

    PTH,IVH 0.45 /0.2mm

    BVH 1-2 0.275/0.1mm

    BVH 1-3 0.285/0.1mm

    (Clearance)

    0.1mm / 0.075mm

    PCB

    0.8mm

    Buildup 8 Layers D type

    SP5C110SP5C110SP5C110SP5C110 - 0.5mm Pitch BGA PAD - 596pin

    NSMD PAD : 0.275mm / 0.375mm

    (LAND/ Solder MASK)

    PCB Case Study(Exynos4210) : ODROIDPCB Case Study(Exynos4210) : ODROIDPCB Case Study(Exynos4210) : ODROIDPCB Case Study(Exynos4210) : ODROID AAAA

  • 7/23/2019 Hardkernel ODROID

    47/192

    PCB Case Study(Exynos4210) : ODROIDPCB Case Study(Exynos4210) : ODROIDPCB Case Study(Exynos4210) : ODROIDPCB Case Study(Exynos4210) : ODROID----AAAA

    VIA

    PTH,IVH 0.45 /0.2mm

    BVH 1-2 0.25/0.1mm

    BVH 1-3 0.25/0.1mm

    (Clearance) 0.1mm / 0.075mm

    PCB

    0.8mm

    Buildup 10 Layers D type

    Exynos4210Exynos4210Exynos4210Exynos4210 - 0.45mm Pitch BGA PAD - 756pin

    SMD PAD : 0.25mm / 0.23mm

    PMICPMICPMICPMIC----1(Ricoh RN5T614E)1(Ricoh RN5T614E)1(Ricoh RN5T614E)1(Ricoh RN5T614E)

  • 7/23/2019 Hardkernel ODROID

    48/192

    PMICPMICPMICPMIC 1(Ricoh RN5T614E)1(Ricoh RN5T614E)1(Ricoh RN5T614E)1(Ricoh RN5T614E)

    High Efficiency Step-down DC/DC Converters

    1. DC/DC1: 1.20V (0.9V to 1.5V/12.5mV steps) @1200mA with RAMP control (For

    Core)

    2. DC/DC2: 1.15V (0.9V to 1.5V/12.5mV steps and 1.8V) @1000mA with RAMPcontrol (For Logic)

    3. DC/DC3: 1.8V (1.8V to 3.3V by external resistors) @500mA (For Memory)

    4. DC/DC on/off control pin for DC/DC1 and DC/DC2

    Low Drop Voltage Regulators LDO1:3.0V (Always-on) @10mA

    LDO2:1.2V (0.9V/1.0V/1.1V/1.2V/1.3V) @30mA

    LDO3:1.2V (0.9V/1.0V/1.1V/1.2V/1.3V) @30mA

    LDO4:3.3V (1.8V/2.5V/2.6V/2.8V/2.85V/3.0V/3.3V) @300mA LDO5:1.8V (1.8V/2.5V/2.6V/2.8V/2.85V/3.0V/3.3V) @300mA

    LDO6:2.6V (1.2V/1.8V/2.5V/2.6V/2.8V/2.85V/3.0V/3.3V) @150mA

    LDO7:3.0V (1.2V/1.8V/2.5V/2.6V/2.8V/2.85V/3.0V/3.3V) @150mA

    LDO8:3.3V (1.8V/2.5V/2.6V/2.8V/2.85V/3.0V/3.3V) @150mA

    PMICPMICPMICPMIC----2(Ricoh RN5T614E)2(Ricoh RN5T614E)2(Ricoh RN5T614E)2(Ricoh RN5T614E)

  • 7/23/2019 Hardkernel ODROID

    49/192

    PMICPMICPMICPMIC 2(Ricoh RN5T614E)2(Ricoh RN5T614E)2(Ricoh RN5T614E)2(Ricoh RN5T614E)

    Li-ion Battery Charger1. Support AC adapter charging

    2. With the current limit protection and charge current control, the limited power can beefficiently

    3. supplied to the system and the battery.

    4. The system can power on even when Li-ion Battery is low voltage or open.

    5. The device can withstand up to 6.5V on VCHG pin. However, it can withstand highvoltage by

    6. combining a high voltage protection IC (up to 28V by using BD6040 of ROHM).

    7. Rapid timer and Trickle timer integrated.

    8. Monitor for the battery thermistor built in.

    9. No external MOSFET required.

    10. If system loads over AC adapter current rating, the battery will supply the current tothe system.

    11. Chip temperature detection circuit for over temperature protection integrated.

    1.Package1. QFN48 pin 6x6mm

    2.Low price about 1.2$

  • 7/23/2019 Hardkernel ODROID

    50/192

    :

  • 7/23/2019 Hardkernel ODROID

    51/192

    (Uboot 1.3.4)

    (2.3.35.7)

    (Gingerbread 2.3.5)

  • 7/23/2019 Hardkernel ODROID

    52/192

    UUUU----Boot Source TreeBoot Source TreeBoot Source TreeBoot Source Tree

  • 7/23/2019 Hardkernel ODROID

    53/192

    UUUU oot Sou ce eeBoot Source TreeBoot Source Treeoot Sou ce ee

    ////ubootubootubootuboot

    /board/board/board/board/include/include/include/include

    ////configsconfigsconfigsconfigs ////samsungsamsungsamsungsamsung

    /smdk6450/smdk6450/smdk6450/smdk6450

    lowlevel_init.slowlevel_init.slowlevel_init.slowlevel_init.s

    ////cpucpucpucpu

    /s5p645x/s5p645x/s5p645x/s5p645x

    /s5p6450/s5p6450/s5p6450/s5p6450

    cpu_init.scpu_init.scpu_init.scpu_init.s

    /common/common/common/common

    smdk6450.hsmdk6450.hsmdk6450.hsmdk6450.h

    System clock Debug Port Default

    A/M PLL

    DMC

    DMC Memory control

    DMC Timing control

    Fastboot partition

    SYSTEM (256MB)

    DATA (512MB)

    CACHE (256MB)

    fastboot.cfastboot.cfastboot.cfastboot.c

    USB PHY Clock

    Clock frequency

    Clock source

    cmd_mmc_disk.ccmd_mmc_disk.ccmd_mmc_disk.ccmd_mmc_disk.c

    usbdusbdusbdusbd----otgotgotgotg----hs.chs.chs.chs.c

    UUUU----Boot BuildBoot BuildBoot BuildBoot Build

  • 7/23/2019 Hardkernel ODROID

    54/192

    make clean

    object, config .

    make smdk6450_config

    \include\configs\smdk6450.h u-boot config .

    make j10

    u-boot.bin

    UUUU----Boot FusingBoot FusingBoot FusingBoot Fusing ---- 1111

  • 7/23/2019 Hardkernel ODROID

    55/192

    gggg

    JTAG

    H/W JTAG Port MDS(Trace32) .

    MDS Tool Script H/W Clock

    Memory(DDR) .

    Memory(DDR) Uboot.bin .

    Uboot fusing.

    fastboot

    movi write uboot 20008000

    Host-PC

    fastboot flash uboot uboot.bin

    UUUU----Boot FusingBoot FusingBoot FusingBoot Fusing ---- 2222

  • 7/23/2019 Hardkernel ODROID

    56/192

    BL1ChecksumBL1ChecksumBL1ChecksumBL1Checksum

    ST.ST.ST.ST.

    SectorSectorSectorSector

    Partition NamePartition NamePartition NamePartition Name SizeSizeSizeSize

    Normal

    Partition

    User Data (VFAT)

    CACHE (Ext4) 256MB

    DATA (Ext4) 512MB

    SYSTEM (Ext4) 256MB

    Lowlevel

    Partition

    (10MB)

    13377 Reserved

    9281 Ramdisk 2MB

    1089 Kernel 4MB

    65 BL2 (u-boot.bin) 512KB

    33 UBOOT config 16KB

    1 BL1 (u-boot_bl1.bin) 16KB

    0 MBR 512B

    T-Flash Map(include/movi.h)

    Uboot/cpu/s5p645x/movi.c

    void movi_write_bl1(ulong addr,member_t *image){

    int i;ulong checksum;ulong src;ulong tmp;

    src = addr;

    for(i = 0, checksum = 0;i < (14 * 1024) - 4;i++)

    checksum += *(u8*)addr++;

    tmp = *(ulong*)addr;*(ulong*)addr = checksum;

    movi_write(image[1].start_blk,image[1].used_blk,src);

    *(ulong*)addr = tmp;}

    UBOOT BL1UBOOT BL1UBOOT BL1UBOOT BL1

    u-boot.bin

    u-boot_bl1.bin (14K 4 bytes) Checksum(4bytes)

    14K bytes

    sudo dd iflag=dsync oflag=dsync if=./u-boot_bl1.bin of=/dev/sdb seek=1sudo dd iflag=dsync oflag=dsync if=./u-boot.bin of=/dev/sdb seek=65

    BootloaderBootloaderBootloaderBootloader fusing (Linux console)fusing (Linux console)fusing (Linux console)fusing (Linux console)

    UUUU----BootBootBootBoot

  • 7/23/2019 Hardkernel ODROID

    57/192

    UUUU----Boot DebuggingBoot DebuggingBoot DebuggingBoot Debugging

  • 7/23/2019 Hardkernel ODROID

    58/192

    Debug consoleDebug consoleDebug consoleDebug console Check H/WCheck H/WCheck H/WCheck H/W Check S/WCheck S/WCheck S/WCheck S/W

    .

    Main Clock .

    Boot mode, Boot Device .

    SD/MMC Port .

    Debug port .

    BL1 checksum .

    OK . DRAM .

    DRAM Bus . Memory Configuration .

    Debug Message . Main Clock . A/M PLL .

    Kernel DriverKernel DriverKernel DriverKernel Driver

  • 7/23/2019 Hardkernel ODROID

    59/192

    Device

    Device Driver

    Makefile Kconfig file

    Platform device driver

    LCD 480X800(WVGA)(LMS397KF04)

    Touchscreen(AIMS902)

    Keypad(GPIO)

    Accelerometor(BMA150)

    Vibrator(AUDX1001)

    Regulator

    (RN5T614)

    Sound Codec(MAX98095)

    Battery Monitor(MAX17040)

    WiFi / BT(BCM4329)

    3M Camera

    (S5K5CAGX)

    GPIOGPIOGPIOGPIO

    IICIICIICIIC

    IICIICIICIIC

    IICIICIICIIC

    LCD I/FLCD I/FLCD I/FLCD I/F SPISPISPISPI

    HSHSHSHS----MMC/SD/SDIOMMC/SD/SDIOMMC/SD/SDIOMMC/SD/SDIO

    IICIICIICIIC

    IICIICIICIIC

    IICIICIICIIC

    IISIISIISIISCAM I/FCAM I/FCAM I/FCAM I/F IICIICIICIIC

    S5P6450S5P6450S5P6450S5P6450

    ODROIDODROIDODROIDODROID----E DeviceE DeviceE DeviceE Device

    Kernel Porting

    UARTUARTUARTUART

    Kernel Source TreeKernel Source TreeKernel Source TreeKernel Source Tree

  • 7/23/2019 Hardkernel ODROID

    60/192

    /drivers

    /input /video /misc/regulator/media

    /soc/sound

    /touchscreen

    /keyboard

    /samsung

    /accelerometor

    /codec

    /s3c24xx

    /aim902.c/aim902-i2c.c/aim902-sysfs.c/aim902-update.c/Kconfig/Makefile

    /odroide_keypad.c/Kconfig/Makefile

    /s3cfb_lms397kf04.c/Kconfig/Makefile

    /axxx1001.c/Kconfig/Makefile

    /yas_acc_kernel_driver.c/yas_acc_driver-bma150.c

    /Kconfig/Makefile

    /rn5t614.c/Kconfig/Makefile

    /video

    /s5k5cagx.c/Kconfig/Makefile

    /max98095.c/max98095_mixer.c/Kconfig/Makefile

    /hkdk6450-max98095.c/Kconfig/Makefile

    /arm/arch /mach-s5p6450 /mach-hkdk6450.c/Kconfig/Makefile

    KconfigKconfigKconfigKconfig ,,,, MakefileMakefileMakefileMakefile

  • 7/23/2019 Hardkernel ODROID

    61/192

    Kconfig file

    -- drivers/input/touchscreen/Kconfig --

    config TOUCHSCREEN_TPS6507X

    tristate "TPS6507x based touchscreens"

    depends on I2Chelp

    Say Y here if you have a TPS6507x based touchscreen controller.

    If unsure, say N.

    To compile this driver as a module, choose M here: the module will be called tps6507x_ts.

    config TOUCHSCREEN_AIM902

    bool "ODROID-E4 AIM902 based touchscreens"

    depends on I2C

    ---help---Say Y here if you have a touchscreen interface using the AIM902 controller, and your board-specific initialization

    code includes that.

    This enables support for ODROTD-E WVGA(480X800) Touch panel

    Makefile

    -- drivers/input/touchscreen/Makefile --

    obj-$(CONFIG_TOUCHSCREEN_W90X900) += w90p910_ts.o

    obj-$(CONFIG_TOUCHSCREEN_AIM902) += aim902.o aim902-i2c.o aim902-sysfs.o aim902-update.o

    obj-$(CONFIG_TOUCHSCREEN_TPS6507X) += tps6507x-ts.o

    Platform devicePlatform devicePlatform devicePlatform device

  • 7/23/2019 Hardkernel ODROID

    62/192

    -- /arch/arm/mach-s5p6450/mach-hkdk6450.c --

    //----------------------------------------------------------------------------------------

    // I2C_5 GPIO interface (AIMS902 Touchscreen)

    //----------------------------------------------------------------------------------------

    #define GPIO_I2C5_SDA S5P6450_GPD(6)

    #define GPIO_I2C5_SCL S5P6450_GPD(7)

    static struct i2c_gpio_platform_data i2c5_platdata = {

    .sda_pin = GPIO_I2C5_SDA, // gpio number

    .scl_pin = GPIO_I2C5_SCL,

    .udelay = 1,

    .sda_is_open_drain = 0,

    .scl_is_open_drain = 0,

    .scl_is_output_only = 0

    };

    static struct platform_device hkdk6450_i2c5 = {

    .name = "i2c-gpio",

    .id = 5, // adapter number

    .dev.platform_data = &i2c5_platdata,

    };

    static struct i2c_board_info i2c_devs5[] __initdata = {

    #if defined(CONFIG_TOUCHSCREEN_AIM902)

    { I2C_BOARD_INFO("aim902", 0x28), },

    #endif

    };

    //----------------------------------------------------------------------------------------

    static struct platform_device *hkdk6450_devices[] __initdata = {

    &s3c_device_i2c0,

    &s3c_device_i2c1,

    #if defined(CONFIG_TOUCHSCREEN_AIM902)

    &hkdk6450_i2c5,

    #endif

    }

    //----------------------------------------------------------------------------------------

    Kernel BuildKernel BuildKernel BuildKernel Build ---- 1111

  • 7/23/2019 Hardkernel ODROID

    63/192

    make distclean

    object, config .

    make smdk6450_android_defconfig

    config file .

    Kernel BuildKernel BuildKernel BuildKernel Build ---- 2222

  • 7/23/2019 Hardkernel ODROID

    64/192

    make menuconfig

    Platform device driver .

    device driver .

    Kernel BuildKernel BuildKernel BuildKernel Build ---- 3333

  • 7/23/2019 Hardkernel ODROID

    65/192

    make j10

    Kernel image driver module (*.ko) .

    Kernel .config configs

    cp .config arch/arm/configs/odroid_e_defconfig

    Kernel Image output

    arch/arm/boot/zImage .

    Kernel FusingKernel FusingKernel FusingKernel Fusing

  • 7/23/2019 Hardkernel ODROID

    66/192

    Uboot fastboot

    Host PC :

    sudo fastboot flash kernel zImage

    T-Flash Reader

    Host PC :

    sudo dd iflag=dsync oflag=dsync if=./zImage of=/dev/sdb seek=1089

    AndroidAndroidAndroidAndroid

  • 7/23/2019 Hardkernel ODROID

    67/192

    Android DeviceAndroid DeviceAndroid DeviceAndroid Device

    /device

    /hardkernel

    /odroide4

    /product

    /proprietary

    /conf

    BoardConfig.mkbuild_android.shdevice.mk

    init.product.rcinit.rcueventd.product.rcvold.fstab

    AndroidProduct.mkodroide4.mk

    /bin

    /keychars

    /libcameraE4

    /libsensor

    Key-layout file (kcm, klfile)

    Camera interface file

    Sensor interface file

    Touch FirmwareWiFi / BT Firmware

    /common

    /google

    /sec

    /

    device_common.mk

    DeviceDeviceDeviceDevice productproductproductproduct BoardConfig.mkBoardConfig.mkBoardConfig.mkBoardConfig.mk init.rcinit.rcinit.rcinit.rc device.mkdevice.mkdevice.mkdevice.mk vold.fstabvold.fstabvold.fstabvold.fstab WiFiWiFiWiFiWiFi / Bluetooth/ Bluetooth/ Bluetooth/ Bluetooth Sensor /Sensor /Sensor /Sensor / CarmeraCarmeraCarmeraCarmera librarylibrarylibrarylibrary

    Android Porting

    BoardConfig.mkBoardConfig.mkBoardConfig.mkBoardConfig.mk ---- 1111

  • 7/23/2019 Hardkernel ODROID

    68/192

    #--------------------------------------------------------------------------

    # Sound option

    #--------------------------------------------------------------------------

    BOARD_USES_GENERIC_AUDIO := false

    BOARD_USES_LIBSECRIL_STUB := true

    BOARD_NO_PAGE_FLIPPING := false

    #--------------------------------------------------------------------------

    # bosh(bma150) accelerometer sensor

    #--------------------------------------------------------------------------

    BOARD_HAVE_BMA150_SENSORS := true

    #--------------------------------------------------------------------------

    # Wifi Config

    #--------------------------------------------------------------------------

    WPA_BUILD_SUPPLICANT := true

    CONFIG_CTRL_IFACE := y

    BOARD_WPA_SUPPLICANT_DRIVER := WEXT

    WPA_SUPPLICANT_VERSION := VER_0_6_X

    BOARD_WLAN_DEVICE := bcm4329

    WIFI_DRIVER_MODULE_PATH := "/system/lib/modules/bcm4329.ko

    WIFI_DRIVER_MODULE_ARG := "iface_name=wlan firmware_path=/system/etc/firmware/fw_bcm4329.binnvram_path=/system/etc/firmware/nvram"

    WIFI_DRIVER_MODULE_NAME := "bcm4329

    BoardConfig.mkBoardConfig.mkBoardConfig.mkBoardConfig.mk ---- 2222

  • 7/23/2019 Hardkernel ODROID

    69/192

    #--------------------------------------------------------------------------

    # Camera

    #--------------------------------------------------------------------------

    USE_CAMERA_STUB := false

    ifeq ($(USE_CAMERA_STUB),false)

    BOARD_CAMERA_LIBRARIES := libhkcamera_odroide

    endif

    #--------------------------------------------------------------------------

    # Bluetooth config

    #--------------------------------------------------------------------------

    BOARD_HAVE_BLUETOOTH := true

    BOARD_HAVE_BLUETOOTH_BCM := true

    #--------------------------------------------------------------------------

    # GPS

    #--------------------------------------------------------------------------

    BOARD_HAVE_HARDWARE_GPS := false

    #--------------------------------------------------------------------------

    # Chip H/W Config

    #--------------------------------------------------------------------------

    BOARD_USES_OVERLAY := trueBOARD_USES_HW_DECODER := true

    BOARD_USE_JPEG := false

    init.rcinit.rcinit.rcinit.rc ---- 1111

  • 7/23/2019 Hardkernel ODROID

    70/192

    write /dev/cpuctl/bg_non_interactive/cpu.shares 52

    on fs

    # mount mtd partitions

    # Mount /system rw first to give the filesystem a chance to save a checkpoint

    mount ext4 /dev/block/mmcblk0p2 /system

    mount ext4 /dev/block/mmcblk0p3 /data wait nosuid nodev noatime

    mount ext4 /dev/block/mmcblk0p4 /cache /cache nosuid nodevon post-fs

    # once everything is setup, no need to modify /

    mount rootfs rootfs / ro remount

    on boot

    chown system system /sys/kernel/ipv4/tcp_rmem_def

    chown system system /sys/kernel/ipv4/tcp_rmem_max

    chown root radio /proc/cmdline

    #################################################

    # Sensors interface node

    #################################################

    chown system input /sys/class/input/input0/enable

    chown system input /sys/class/input/input0/delaychown system input /sys/class/input/input0/wake

    init.rcinit.rcinit.rcinit.rc ---- 2222

  • 7/23/2019 Hardkernel ODROID

    71/192

    #

    # bluetooth interface

    #

    chown bluetooth bluetooth /dev/s3c2410_serial0

    chmod 0666 /dev/s3c2410_serial0

    #

    # bluetooth Mac address

    #

    chown bluetooth bluetooth /system/etc/bluetooth

    chmod 755 /system/etc/bluetooth

    # Define TCP buffer sizes for various networks

    # ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,

    setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208

    setprop net.tcp.buffersize.wifi 4095,87380,110208,4096,16384,110208

    setprop net.tcp.buffersize.umts 4094,87380,110208,4096,16384,110208

    setprop net.tcp.buffersize.edge 4093,26280,35040,4096,16384,35040

    setprop net.tcp.buffersize.gprs 4092,8760,11680,4096,8760,11680

    init.rcinit.rcinit.rcinit.rc ---- 3333

  • 7/23/2019 Hardkernel ODROID

    72/192

    class_start default

    service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -c /data/misc/wifi/wpa_supplicant.conf dd

    group system wifi inet

    disabledoneshot

    #===================================================================

    # baudrate change 115200 to 921600(Bluetooth)

    #===================================================================

    service hciattach /system/bin/hciattach -n -f /system/etc/firmware/bcm4329.hcd /dev/s3c2410_serial0 bcmbt 921600flow

    user bluetooth

    group bluetooth net_bt_admin misc

    disabled

    service hfag /system/bin/sdptool add --channel=10 HFAG

    user bluetooth

    group bluetooth net_bt_admin

    disabled

    oneshot

    device.mkdevice.mkdevice.mkdevice.mk ---- 1111

  • 7/23/2019 Hardkernel ODROID

    73/192

    include $(LOCAL_PATH)/BoardConfig.mk

    # --------------------------------------------------------------------------

    # Prebuilt kl keymaps

    # --------------------------------------------------------------------------

    PRODUCT_COPY_FILES += \

    device/hardkernel/proprietary/keychars/hkc1xx-keypad.kl:system/usr/keylayout/hkc1xx-keypad.kl

    # --------------------------------------------------------------------------

    # Generated kcm keymaps

    # --------------------------------------------------------------------------

    PRODUCT_PACKAGES := \

    hkc1xx-keypad.kcm

    # --------------------------------------------------------------------------

    # These are the hardware-specific configuration files

    # --------------------------------------------------------------------------

    PRODUCT_COPY_FILES += \

    $(LOCAL_PATH)/conf/init.rc:root/init.rc \

    $(LOCAL_PATH)/conf/vold.fstab:system/etc/vold.fstab

    device.mkdevice.mkdevice.mkdevice.mk ---- 2222

  • 7/23/2019 Hardkernel ODROID

    74/192

    # --------------------------------------------------------------------------

    # WIFI firmware

    # --------------------------------------------------------------------------

    PRODUCT_COPY_FILES += \

    device/hardkernel/proprietary/bin/fw_bcm4329.bin:system/etc/firmware/fw_bcm4329.bin \

    device/hardkernel/proprietary/bin/nvram:system/etc/firmware/nvram \

    device/hardkernel/proprietary/bin/bcm4329_e4.ko:system/lib/modules/bcm4329.ko \

    device/hardkernel/proprietary/bin/bcm4329.hcd:system/etc/firmware/bcm4329.hcd

    # --------------------------------------------------------------------------

    # Init files

    # --------------------------------------------------------------------------

    PRODUCT_COPY_FILES += \

    $(LOCAL_PATH)/conf/init.product.rc:root/init.odroide4.rc \$(LOCAL_PATH)/conf/ueventd.product.rc:root/ueventd.odroide4.rc

    vold.fstabvold.fstabvold.fstabvold.fstab liblibliblib

  • 7/23/2019 Hardkernel ODROID

    75/192

    vold.fstab #######################

    ## Regular device mount

    ##

    ## Format: dev_mount

    ## label - Label for the volume

    ## mount_point - Where the volume will be mounted

    ## part - Partition # (1 based), or 'auto' for first usable partition.

    ## - List of sysfs paths to source devices

    ######################

    dev_mount sdcard /mnt/sdcard auto /devices/platform/s3c-sdhci.1/mmc_host/mmc1

    WiFi / Bluetooth

    hardware/libhardware_legacy/wifi/wifi.c

    system/bluetooth/bluedroid/bluetooth.c

    Sensor / Carmera library device/hardkernel/proprietary/libsensor/

    device/hardkernel/proprietary/libcameraE4/

    Android BuildAndroid BuildAndroid BuildAndroid Build

  • 7/23/2019 Hardkernel ODROID

    76/192

    make clean

    object .

    Android system build(build_android.sh )

    /device/hardkernel/odroide4/build_android.sh Android root soft-link .

    ln s ./device/hardkernel/odroide4/build_android.sh ./odroide4_build.sh

    Android build, ramdisk-uboot.img . System ramdisk file $PRODUCT_-img(odroide4-img) folder .

    Android FusingAndroid FusingAndroid FusingAndroid Fusing

  • 7/23/2019 Hardkernel ODROID

    77/192

    Android system file

    Host PC (T-Flash Reader):sudo umount /dev/sdb* all partition unmount

    sudo mkfs.ext4 /dev/sdb2 system partition

    sudo mount /dev/sdb2 /media/sd

    sudo cp a ./odroide4-img/system/* /media/sd

    sudo umount /dev/sdb2

    Android ramdisk-uboot.img

    Host PC (uboot fastboot) :sudo fastboot flash ramdisk ramdisk-uboot.img

    Host PC (T-Flash Reader) :

    sudo dd iflag=dsync oflag=dsync if=./ramdisk-uboot.img of=/dev/sdb seek=9281

    Android BootingAndroid BootingAndroid BootingAndroid Booting

  • 7/23/2019 Hardkernel ODROID

    78/192

    Q & A

    www.hardkernel.com .

  • 7/23/2019 Hardkernel ODROID

    79/192

    :

  • 7/23/2019 Hardkernel ODROID

    80/192

    WinCE 6.0 Build

    WinCE Display Driver

    Uboot Multi-Boot (/WinCE)

    Build toolBuild toolBuild toolBuild tool BSPBSPBSPBSP

  • 7/23/2019 Hardkernel ODROID

    81/192

    ODROID-E(S5P6450) WinCE 6.0 Microsoft Visual Studio 2005

    Microsoft Visual Studio 2005 Service Pack 1

    Microsoft Windows Embedded CE 6.0 Platform builder

    Microsoft Windows Embedded CE 6.0 Platform builder Service Pack 1

    Microsoft Windows Embedded CE 6.0 R2

    Microsoft Windows Embedded CE 6.0 R3

    Microsoft Windows Embedded CE 6.0 Cumulative Product Update Rollup Package(2010/12/31)

    Latest Microsoft Windows Embedded CE 6.0 Monthly Update(Recommended)

    BSP(SMDK6450_BSP)

    BSP Copy

    %WINCEROOT%\PLATFORM\SMDK6450

    %WINCEROOT%\PLATFORM\COMMON

    ODROIDODROIDODROIDODROID----E OS DesignE OS DesignE OS DesignE OS Design ----1111

  • 7/23/2019 Hardkernel ODROID

    82/192

    File -> New -> Project

    Project Name ODROIDE

    OK

    ODROIDODROIDODROIDODROID----E OS DesignE OS DesignE OS DesignE OS Design ----2222

  • 7/23/2019 Hardkernel ODROID

    83/192

    Board Support Packages (SMDK6450 )

    ODROIDODROIDODROIDODROID----E OS DesignE OS DesignE OS DesignE OS Design ----3333

  • 7/23/2019 Hardkernel ODROID

    84/192

    Design Templete (PDA Device)

    ODROIDODROIDODROIDODROID----E OS DesignE OS DesignE OS DesignE OS Design ----4444

  • 7/23/2019 Hardkernel ODROID

    85/192

    Design Templete (Mobile Handheld)

    ODROIDODROIDODROIDODROID----E OS DesignE OS DesignE OS DesignE OS Design ----5555

  • 7/23/2019 Hardkernel ODROID

    86/192

    Applications Media feature (Internet Explorer 6.0, Windows Media Audio/MP3)

    ODROIDODROIDODROIDODROID----E OS DesignE OS DesignE OS DesignE OS Design ----6666

  • 7/23/2019 Hardkernel ODROID

    87/192

    ODROIDE OS Design Visual Studio Solution Explorer . Build Option Release .

    Public ComponentPublic ComponentPublic ComponentPublic Component ----1111

    C t l It Vi (C OS >CEBASE >Fil S t d D t St )

  • 7/23/2019 Hardkernel ODROID

    88/192

    Catalog Item View (Core OS->CEBASE->File Systems and Data Store)

    Public ComponentPublic ComponentPublic ComponentPublic Component ----2222

    C t l It Vi (C OS >CEBASE >G hi d M lti di T h l i )

  • 7/23/2019 Hardkernel ODROID

    89/192

    Catalog Item View (Core OS->CEBASE->Graphics and Multimedia Technologies)

    Public ComponentPublic ComponentPublic ComponentPublic Component ----3333

    Catalog Item View (Core OS >Device Drivers)

  • 7/23/2019 Hardkernel ODROID

    90/192

    Catalog Item View (Core OS->Device Drivers)

    Public ComponentPublic ComponentPublic ComponentPublic Component ----4444

    Catalog Item View (Core OS >CEBASE >Applications and Services Development)

  • 7/23/2019 Hardkernel ODROID

    91/192

    Catalog Item View (Core OS->CEBASE->Applications and Services Development)

    Project Build OptionProject Build OptionProject Build OptionProject Build Option----1111

    Visual Studio->Project->ODROIDE Properties

  • 7/23/2019 Hardkernel ODROID

    92/192

    Visual Studio >Project >ODROIDE Properties... ODROIDE Property Pages -> Configuration Properties -> Locale

    Clear All -> ()

    Project Build OptionProject Build OptionProject Build OptionProject Build Option----2222

    Visual Studio->Project->ODROIDE Properties

  • 7/23/2019 Hardkernel ODROID

    93/192

    Visual Studio >Project >ODROIDE Properties... ODROIDE Property Pages -> Configuration Properties -> Build Options

    Enable KITL (no IMGNOKITL=1)

    Build SolutionBuild SolutionBuild SolutionBuild Solution

    Visual Studio->File->Save All

  • 7/23/2019 Hardkernel ODROID

    94/192

    Visual Studio >File >Save All Visual Studio->Build->Build solution

  • 7/23/2019 Hardkernel ODROID

    95/192

    WinCE Source TreeWinCE Source TreeWinCE Source TreeWinCE Source Tree

  • 7/23/2019 Hardkernel ODROID

    96/192

    WINCE600WINCE600WINCE600WINCE600\\\\PLATFORMPLATFORMPLATFORMPLATFORM\\\\

    SMDK6450\COMMON\

    SRC\SOC\ SRC\

    config.bib *.bib filesplatform.reg *.reg files dll files

    S5P6450_SEC_V1

    BOOTLOADER\

    FILES\ CATALOG\ SDK\ ETC\

    BSP Catalog Itemfiles

    USB DriverDownload Tool

    JTAG Script file

    MPVD Driver(Multi Purpose Video Decoder)

    COMMON\ DRIVERS\ INC\ KITL\OAL\

    OAL Booting Device EBOOT

    ,

    Architecture SOC HW

    Public Driver

    BSP Include file KITL

    CESYSGEN\ - Build process Makefile

    ODROIDODROIDODROIDODROID----E HW Clock, MEME HW Clock, MEME HW Clock, MEME HW Clock, MEM configconfigconfigconfig

  • 7/23/2019 Hardkernel ODROID

    97/192

    ODROID-E(S5P6450) Clock configuration

    \PLATFORM\COMMON\SRC\SOC\S5P6450_SEC_V1\OAL\INC\soc_cfg.h file

    #define TARGET_CLK CLK_800_166MHz

    //#define TARGET_CLK CLK_667_166MHz

    //#define TARGET_CLK CLK_533_133MHz

    \PLATFORM\COMMON\SRC\SOC\S5P6450_SEC_V1\OAL\INC\S5P6450.inc file

    TARGET_CLK SETA CLK_800_166MHz

    ;TARGET_CLK SETA CLK_667_166MHz

    ;TARGET_CLK SETA CLK_533_133MHz

    ODROID-E(S5P6450) MEM configuration

    \PLATFORM\COMMON\SRC\SOC\S5P6450_SEC_V1\OAL\INC\soc_cfg.h file

    #define DRAM_TYPE LPDDR

    //#define DRAM_TYPE DDR2

    \PLATFORM\COMMON\SRC\SOC\S5P6450_SEC_V1\OAL\INC\S5P6450.inc file

    DRAM_TYPE SETA LPDDR

    ;DRAM_TYPE SETA DDR2

    Debug Port, Booting deviceDebug Port, Booting deviceDebug Port, Booting deviceDebug Port, Booting device

  • 7/23/2019 Hardkernel ODROID

    98/192

    ODROID-E(S5P6450) Debug Serial init

    \PLATFORM\SMDK6450\SMDK6450.bat file

    @REM set BSP_DEBUGPORT=SERIAL_UART0

    @REM set BSP_DEBUGPORT=SERIAL_UART1

    set BSP_DEBUGPORT=SERIAL_UART2 @REM set BSP_DEBUGPORT=SERIAL_UART3

    \PLATFORM\SMDK6450\SRC\Inc\bsp_cfg.h

    #define DEBUG_UART3 (3)

    #define DEBUG_BAUDRATE (115200)

    ODROID-E(S5P6450) Booting Device Init (SD_BOOT, HSMMC1)

    \PLATFORM\SMDK6450\SMDK6450.bat file

    set BOOTLOADER_OPTION=SDBOOT

    set BSP_NONANDFS=1

    set BSP_NOHSMMC_CH0=1

    set BSP_NOHSMMC_CH1=

    set BSP_NOHSMMC_CH3=1

    ODROIDODROIDODROIDODROID----E HWE HWE HWE HW

  • 7/23/2019 Hardkernel ODROID

    99/192

    ODROID-E(S5P6450) HW

    \PLATFORM\SMDK6450\SMDK6450.bat file

    set BSP_NOI2C=

    set BSP_NOSPI=1

    @REM ----- CAMERAFILTER Device Driver Configuration -------------

    @REM CAMERA FILTER/I2C Device Driver

    set BSP_NOCAMERA=1

    @REM ----- GPS Driver Configuration -------------

    set BSP_NOGPS=1

    ODROIDODROIDODROIDODROID----E Display DriverE Display DriverE Display DriverE Display Driver

    ODROIDODROIDODROIDODROID E Di l HW I t fE Di l HW I t fE Di l HW I t fE Di l HW I t f

  • 7/23/2019 Hardkernel ODROID

    100/192

    Backlight Driver

    LCD Controller Init

    LCD I/F Timing

    LCD 480X800(WVGA)(LMS397KF04)

    PWM_1PWM_1PWM_1PWM_1

    LCD I/FLCD I/FLCD I/FLCD I/F

    SPISPISPISPIS5P6450S5P6450S5P6450S5P6450

    ODROIDODROIDODROIDODROID----E Display HW InterfaceE Display HW InterfaceE Display HW InterfaceE Display HW Interface

    LCD I/FLCD I/FLCD I/FLCD I/F

    BacklightBacklightBacklightBacklightBacklightHW Driver

    ODROIDODROIDODROIDODROID----E Backlight driverE Backlight driverE Backlight driverE Backlight driver

  • 7/23/2019 Hardkernel ODROID

    101/192

    ODROID-E(S5P6450) LCD Backlight driver

    \PLATFORM\SMDK6450\SRC\DRIVERS\BACKLIGHT\PDD\backlight_pdd.cpp file

    PWM_1 Driver PWM_0

    void BL_InitPWM() function

    GPF14 pin_function PWM_0

    - Timer0

    void BL_Set(BOOL bOn) function

    PWM_0 On/Off

    - HW Backlight driver enable/disable

    void BL_SetBrightness(DWORD dwValue)

    PWM_0 Frequency (Timer0 )

    - PWM_0 Duty_rate

    DWORD BacklightInit(LPCTSTR pContext, LPCVOID lpvBusContext, CEDEVICE_POWER_STATE*pDeviceState)

    - GPF14 Pull-up/down disabled

    ODROIDODROIDODROIDODROID----E LCD driverE LCD driverE LCD driverE LCD driver ----1111

    ODROID-E(S5P6450) LCD LMS397KF04 define\PLATFORM\SMDK6450\SRC\INC\b f h fil

  • 7/23/2019 Hardkernel ODROID

    102/192

    \PLATFORM\SMDK6450\SRC\INC\bsp_cfg.h file

    #define LCD_MODULE_LTP700 (8) // Landscape 7" WVGA RGB24

    #define LCD_MODULE_LMS397KF04 (9) // Portrait 3.97" WVGA RGB24

    //#define SMDK6450_LCD_MODULE (LCD_MODULE_LTE480)

    #define SMDK6450_LCD_MODULE (LCD_MODULE_LMS397KF04)

    #elif (SMDK6450_LCD_MODULE == LCD_MODULE_LMS397KF04)

    #define LCD_WIDTH 480

    #define LCD_HEIGHT 800

    #define LCD_BPP 32 // rgb888 XRGB

    #define LCD_TYPE LCD_TYPE_PORTRAIT

    \PLATFORM\SMDK6450\SRC\DRIVERS\DISPLAY\INC\ldi.h file

    typedef enum

    {

    LDI_LTE480WV_RGB, // 4.8" WVGA 800*480 in SMDK6450

    LDI_LMS397KF04_RGB, // 3.97" WVGA 480*800 in ODROIDE

    LDI_HT101HD1_RGB, // 1376*768 in SMDK6450

    static void LDI_LMS397KF04_RGB_port_initialize(void);

    static LDI_ERROR LDI_LMS397KF04_RGB_power_on(void);

    static LDI_ERROR LDI_LMS397KF04_RGB_power_off(void);

    static LDI_ERROR LDI_LMS397KF04_RGB_initialize(void);

    ODROIDODROIDODROIDODROID----E LCD driverE LCD driverE LCD driverE LCD driver ----2222

    ODROID-E(S5P6450) LCD LMS397KF04 define

  • 7/23/2019 Hardkernel ODROID

    103/192

    ( )

    \PLATFORM\SMDK6450\SRC\DRIVERS\DISPLAY\DISPLAY_DRV\sources file

    \PLATFORM\SMDK6450\SRC\DRIVERS\DISPLAY\DISPLAY_DRV\i2c_pmic.h file add

    \PLATFORM\SMDK6450\SRC\DRIVERS\DISPLAY\DISPLAY_DRV\i2c_pmic.cpp file add

    PMIC(RN5T614) LDO(VDD_LCD) I2C Interface add

    \PLATFORM\SMDK6450\SRC\DRIVERS\DISPLAY\DISPLAY_DRV\display_main.cpp file

    PMIC LDO(VDD_LCD) Enable

    #if (SMDK6450_LCD_MODULE == LCD_MODULE_LTE480)

    LDI_set_LCD_module_type(LDI_LTE480WV_RGB);

    #elif (SMDK6450_LCD_MODULE == LCD_MODULE_LMS397KF04)

    LDI_set_LCD_module_type(LDI_LMS397KF04_RGB);

    \PLATFORM\SMDK6450\SRC\DRIVERS\DISPLAY\LDI_LIB\LDI\ldi.c file

    SPI interface function add (GPIO Bit-Bang)

    LCD

    - static void LDI_LMS397KF04_RGB_port_initialize(void);

    - static LDI_ERROR LDI_LMS397KF04_RGB_power_on(void);- static LDI_ERROR LDI_LMS397KF04_RGB_power_off(void);

    - static LDI_ERROR LDI_LMS397KF04_RGB_initialize(void);

    LCD Interface Timing

    - case LDI_LTE480WV_RGB:

    - case LDI_LMS397KF04_RGB

    Build OS Image &Build OS Image &Build OS Image &Build OS Image & config.bibconfig.bibconfig.bibconfig.bib

  • 7/23/2019 Hardkernel ODROID

    104/192

    Visual Studio->File->Save All

    Visual Studio->Build->Build solution

    New OS Image NK.NB0 Start Address

    \PLATFORM\SMDK6450\FILES\config.bib

    #define NKSTART 80100000

    #define NKLEN 01F00000 ; 31 MB

    CONFIG

    ROMSTART = $(NKSTART)

    ROMSIZE = $(NKLEN)

    NK.NB0 Load Address 8010_0000

    \PLATFORM\SMDK6450\SRC\INC\oemaddrtab_cfg.inc

    g_oalAddressTable

    DCD 0x80000000, 0x20000000, 128 ; 128 MB DRAM

    NK.NB0 Load Virtual Address 2010_0000

    Download OS Image & RunDownload OS Image & RunDownload OS Image & RunDownload OS Image & Run

    Target

    B ti Ub t

  • 7/23/2019 Hardkernel ODROID

    105/192

    Booting on Uboot

    - dnw [Load address]

    Download OS Image & RunDownload OS Image & RunDownload OS Image & RunDownload OS Image & Run

    Host PC USB NK.NB0

    USB : PLATFORM\SMDK6450\ETC\SMDK6450 USB Dri er

  • 7/23/2019 Hardkernel ODROID

    106/192

    USB : PLATFORM\SMDK6450\ETC\SMDK6450 USB Driver

    PLATFORM\SMDK6450\ETC\DNW v0.60C\dnw.exe

    USB NK.NB0 download

    Dnw.exe->USB_Port->Transmit->Transmit -> File open dialog -> NK.NB0

    NK.NB0 : OSDesigns\ODROID\ODROID\RelDir\SMDK6450_ARMV4I_Release\NK.NB0

    Target

    go 20100000

    - WinCE OS Image Booting

    WinCE OS Image FusingWinCE OS Image FusingWinCE OS Image FusingWinCE OS Image Fusing

  • 7/23/2019 Hardkernel ODROID

    107/192

    ST.ST.ST.ST.

    SectorSectorSectorSector

    Partition NamePartition NamePartition NamePartition Name SizeSizeSizeSize

    Normal

    Partition

    User Data (VFAT)

    CACHE (Ext4) 256MB

    DATA (Ext4) 512MB

    SYSTEM (Ext4) 256MB

    79313 Reserved

    LowlevelPartition

    (10MB)

    13377 WinCE OS Image 32MB

    9281 Ramdisk 2MB

    1089 Kernel 4MB

    65 BL2 512KB

    33 UBOOT config 16KB

    1 BL1 16KB

    0 MBR 512B

    TTTT----Flash Memory MapFlash Memory MapFlash Memory MapFlash Memory Map

    ODROID-EWinCE OS Image

    (Size 32MB)

    T-Flash raw-Image

    Movi R/W command

    Filesystem MBR

    Bootcmd, ext_env

    Multi-Boot

    TTTT----Flash Raw ImageFlash Raw ImageFlash Raw ImageFlash Raw Image

    T-Flash raw-image

    $ $

  • 7/23/2019 Hardkernel ODROID

    108/192

    $uboot$/include/movi.h file

    #define PART_SIZE_WINCE (32 * 1024 * 1024)

    $uboot$/common/cmd_movi.c file

    int init_raw_area_table (block_dev_desc_t * dev_desc)- wince 32MB

    int do_movi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])

    - movi write wince command

    - mmc raw area write command

    T-Flash Filesystem partition table $uboot$/common/cmd_mmc_fdisk.c

    Filesystem block start address : 0 64MB

    Bootcmd , EXT_ENV

    $uboot$/include/configs/smdk6450.h

    dnw_ce : dnw 20100000;movi write wince 20100000 Android_boot : movi read kernel 20008000;movi read rootfs 20A00000 200000;bootm

    20008000 20A00000

    wince_boot : movi read wince 20100000;go 20100000

    wince_dl : dnw 20100000;go 20100000

    TTTT----Flash Fusing & Standalone bootFlash Fusing & Standalone bootFlash Fusing & Standalone bootFlash Fusing & Standalone boot

    Target Uboot Booting -> dnw 20100000

    Host PC - dnw exe NK NB0

  • 7/23/2019 Hardkernel ODROID

    109/192

    Host PC dnw.exe NK.NB0

    Target movi write wince 20100000

    Target run wince_boot (EXT_ARGS)

    Multi BootMulti BootMulti BootMulti Boot

    ODROID-E VolumeUp Key Multi-Boot

    $ boot$/board/sams ng/smdk6450/smdk6450 c file

  • 7/23/2019 Hardkernel ODROID

    110/192

    $uboot$/board/samsung/smdk6450/smdk6450.c file

    /* --------------------------------------------------------- */

    #define GPNCON (*(unsigned long *)(ELFIN_GPIO_BASE + GPNCON_OFFSET))

    #define GPNDAT (*(unsigned long *)(ELFIN_GPIO_BASE + GPNDAT_OFFSET))

    #define GPNPUD (*(unsigned long *)(ELFIN_GPIO_BASE + GPNPUD_OFFSET))

    void check_bootmode(void)

    {

    char run_cmd[100];

    unsigned long data=0;

    GPNCON = (GPNCON & ~(0x3

  • 7/23/2019 Hardkernel ODROID

    111/192

    :

  • 7/23/2019 Hardkernel ODROID

    112/192

    framework

    APP Touch-to-focus

  • 7/23/2019 Hardkernel ODROID

    113/192

    55

    1.3MP

    12801024

    M 15 @ SXGA

    55

    3MP

    20481536

    F @15,

    VGA @30

    MIPI CSI2( )

    JPEG

    54

    5MP

    25921944

    F @15

    MIPI CSI2( )

    JPEG

  • 7/23/2019 Hardkernel ODROID

    114/192

    I2C

    ID

    AFM

    I

    Mclk

    4210 /

  • 7/23/2019 Hardkernel ODROID

    115/192

    **** Parallel(CCIRParallel(CCIRParallel(CCIRParallel(CCIR) 2 port) 2 port) 2 port) 2 port* MIPI 2 port* MIPI 2 port* MIPI 2 port* MIPI 2 port(2 Lane, 4 Lane)(2 Lane, 4 Lane)(2 Lane, 4 Lane)(2 Lane, 4 Lane)

  • 7/23/2019 Hardkernel ODROID

    116/192

    R

    F

    ODROIDA C S .

  • 7/23/2019 Hardkernel ODROID

    117/192

    N S !!

    CPU MC

    3M RC

    1.3M FC

    ( )

    ///55., 55.

    C I ()

  • 7/23/2019 Hardkernel ODROID

    118/192

    C I 55()...

    C S : , , , ,,

    M :

    V4L2 () VIDIOCGCTRL 55()

    VIDIOCSCTRL 55()

    VIDIOCSFMT 55()

    VIDIOCGPARM 55()

    VIDIOCSPARM 55()

    ...

    I2C

    ////

    . ( )

  • 7/23/2019 Hardkernel ODROID

    119/192

    (//0)

    V4L2

    42. V4L2 .

    V4L2 .

    ////42*

    .

    M, C P O/O

    42() 55()

    .

    ,, .

    LCD

    . H/W

    FIMC(Fully Interactive Mobile Camera

    Interface )

    Post Processor, Scaler, Rotator,input/output DMA Driver

    //0

  • 7/23/2019 Hardkernel ODROID

    120/192

    /dev/video0

    V4L2

    FC

    FO

    FO

    U A

    A

    YUV,RGB,JPEG,RAW

    open(/dev/video0)

    YUV422sp, Jpeg

    ()

    RGB32

    Scaler

    Rotator

    ColorSpace Conversion

    V4L2

    N, I2

    MC M

    static struct i2c_board_info s5k5cagx_i2c_info = {

    I2C_BOARD_INFO("S5K5CAGX", 0x3c),.platform_data = &s5k5cagx_plat,};static struct s3c_platform_camera s5k5cagxs5k5cagxs5k5cagxs5k5cagx = {

    id CAMERA PAR A

  • 7/23/2019 Hardkernel ODROID

    121/192

    MC 24M (.)

    P O/O RESET, STBY

    .id = CAMERA_PAR_A,

    .type = CAM_TYPE_ITU,fmt = ITU_601_YCBCR422_8BIT,

    .order422 = CAM_ORDER422_8BIT_YCBYCR,

    .i2c_busnum = 1,

    .info = &s5k5cagx_i2c_info,

    .pixelformat= V4L2_PIX_FMT_YUYV,

    .srclk_name = "xusbxti",

    .clk_name = "sclk_cam0",

    .clk_rate = 24000000,

    .line_length = 480,

    .width = 640,

    .height = 480,

    .window = {

    .left = 0,

    .top = 0,

    .width = 640,

    .height = 480,},

    /* Polarity */.inv_pclk = 0,.inv_vsync = 1,

    .inv_href = 0,.inv_hsync = 0,

    .initialized = 0,

    .cam_power = hkdkc210_cam0_power,};

    void cam0_s5k5cagx_reset(int power_up){...}

    static int hkdkc210_cam0_power(int onoff){...}

    /* Interface setting */static struct s3c_platform_fimc fimc_platfimc_platfimc_platfimc_plat = {

    .default_cam = CAMERA_PAR_A,

    .camera = {&s5k5cagxs5k5cagxs5k5cagxs5k5cagx, // rear cam&s5k5aafa, // front cam

    },.hw_ver = 0x51,

    };

    //5310/210.

    42

    ., .(://42..)

    LCD

    V4L2 ) = ( VIDIOC QUERYCAP &);

  • 7/23/2019 Hardkernel ODROID

    122/192

    V4L2 . ) = (, VIDIOCQUERYCAP, &);

    VIDIOCQUERYCAP

    VIDIOCSFMT

    VIDIOCDQBUF

    VIDIOCQUERYBUF

    VIDIOCQBUF

    VIDIOCREQBUFS

    VIDIOCSTREAMON

    VIDIOCSTREAMOFF

    VIDIOCQBUF

    VIDIOCDQBUF

    (//0)

    ()

    V4L2_CAP_VIDEO_CAPTURE

    V4L2_CAP_VIDEO_OUTPUT

    V4L2_CAP_VIDEO_OVERLAYV4L2_CAP_STREAMING

    Width, Height, pixel format setting

    Exchange a

    buffer with

    the driver

    Query device capabilities

    ON

    OFF

    /////

    R

  • 7/23/2019 Hardkernel ODROID

    123/192

    E : FC.

    //// SCHWI.

    SCHWI.

    SC.

    SC.

    Porting

    (//0)

    .

    JNIJNI

  • 7/23/2019 Hardkernel ODROID

    124/192

    open()close()getCameraInfo()setParameters()

    TakePicture()

    startPreview()stopPreview()...

    JNIJNI(Java Native Interface)(Java Native Interface)

    APP P T F .

  • 7/23/2019 Hardkernel ODROID

    125/192

    CISD D

    Focus X,YFocus X,YFocus X,YFocus X,Y

    Touch event

    JAVA A L L K

    2

    ///////C. C C.P

    P

    // P

  • 7/23/2019 Hardkernel ODROID

    126/192

    // P .

    S KEYPREVIEWSIE = "";

    S KEYPREVIEWFORMAT = "";

    S KEYPREVIEWFRAMERATE = "";

    ...

    S KEYFOCUSLOCATION = "";

    /////CP.

    // P .

    CP::KEYPREVIEWSIE = "";

    CP::KEYSUPPORTEDPREVIEWSIES = "";

    CP::KEYPREVIEWFORMAT = "";

    CP::KEYPREVIEWFRAMERATE = "";

    ... CP::KEYFOCUSLOCATION = "";

    $

    2 ()

    android/packages/apps/Camera/android/packages/apps/Camera/android/packages/apps/Camera/android/packages/apps/Camera/src/com/android/camera/Camera.javasrc/com/android/camera/Camera.javasrc/com/android/camera/Camera.javasrc/com/android/camera/Camera.javaprivate int touch_old_x;private int touch_old_y;

  • 7/23/2019 Hardkernel ODROID

    127/192

    @Overridepublic boolean onTouchEvent(MotionEvent event) {

    int touchX = (int) event.getX(); // touch

    int touchY = (int) event.getY();

    if((touch_old_x - touchX > 50) || (touch_old_x - touchX < -50)||(touch_old_y - touchY > 50) || (touch_old_y - touchY < -50) ) {

    touch_old_x=touchX;touch_old_y=touchY;

    mParameters.setFocusLocation(touchX+","+ touchY);mCameraDevice.setParameters(mParameters);

    Log.v(TAG,"touch "+touchX + ", "+ touchY );}

    return true;}

    android/frameworks/base/core/java/android/hardware/Camera.java

    public void setFocusLocation(String value) {set(KEY_FOCUS_LOCATION, value);

    }

    100,200

    P

    ..

    SCHWI.SC.

    S55.

    Parameters

    2 (++)

    /////SCHWI.int CameraHardwareSec::get_focus_location(const CameraParameters& params){

    int fx,fy;

    fx = fy = -1;

    // G t th t t i if it d 't i t l th 1 1

    P

  • 7/23/2019 Hardkernel ODROID

    128/192

    // Get the current string, if it doesn't exist, leave the -1x-1

    const char *p = params.get(CameraParameters::KEY_FOCUS_LOCATION);

    if (p == 0) return -1;

    parse_pair(p, &fx, &fy, ',');mSecCamera->setFocusLocation(fx,fy );

    return 0;

    }

    /////SC.

    int SecCamera::setFocusLocation(int lx, int ly){int ret;

    unsigned int val;

    val = lx

  • 7/23/2019 Hardkernel ODROID

    129/192

    (>)

    = (, , );

    ;

    /////42.

    ( *, *, 42 *)

    (> != NULL)

    = (, );

    ...

    /////.

    ( *, 42 *)

    (>) ...

    : (FIMC2 != >)

    = (, , , );

    ;

    ;

    S55.

    V4L2V4L2

    subdev_callsubdev_callsubdev_callsubdev_call()()()()

    2

    K/ /S55.static ints5k5cagx_s_ctrs5k5cagx_s_ctrll(struct v4l2_subdev *sd, struct v4l2_control *ctrl){

    ...

  • 7/23/2019 Hardkernel ODROID

    130/192

    switch (ctrl->id) {

    caseV4L2_CID_CAM_FOCUS_LOCATION:

    int x1= ctrl->value >> 16;

    int y1= ctrl->value & 0xffff

    err=s5k5cagx_set_focus_location(sd,x1,x2); // set focus position to CIS

    err=s5k5cagx_write_array(sd,

    s5k5cagx_regs_focus[1],S5K5CAGX_FOCUS); // Change Mode to focus fixed

    break;

    ...

    }

    ...

    }

    C.

    SCHWI.SC.

    ..

    static const struct v4l2_subdev_core_ops s5k5cagx_core_ops ={

    .init = s5k5cagx_init, /* initializing API */.s_config = s5k5cagx_s_config,/* Fetch platform data */

    .queryctrl = s5k5cagx_queryctrl,

    .querymenu = s5k5cagx_querymenu,

    .g_ctrl = s5k5cagx_g_ctrl,

    .s_ctrls_ctrl = s5k5cagx_s_ctrl,};

    CIS W

  • 7/23/2019 Hardkernel ODROID

    131/192

    :

    11.10(Beta 2)

    - ()

  • 7/23/2019 Hardkernel ODROID

    132/192

    - rootstock command

    - fdisk & - wifi

    - booting

    WWW Service APM(Apache, Php, Mysql)

    WWW Service

    1. 11.10(Beta 2)

    -

  • 7/23/2019 Hardkernel ODROID

    133/192

    : uboot Kernel Ubuntu(Root File System)

    1) uboot : kernel .

    uboot T-Flash Card (MBR) , uboot .

    -() :

    () .

    2) kernel : , , OS .

    (2.6.35.7) VFAT /boot .

    3) ubuntu(rootfs) : Root File System(EXT4)

  • 7/23/2019 Hardkernel ODROID

    134/192

    3) ubuntu(rootfs) : Root File System(EXT4)

    root file system /sbin/init (Process) [kthreadd]

    . /sbin/init PID 1, [kthreadd] PID 2 , . fork() exec() system call kernel_thread()

    daemonize() .

    $ ps -ef

    (11.10 oneiric beta2) .

    1 0 0 13:20 ? 00:00:01 //

    2 0 0 13:20 ? 00:00:00

    360 1 0 13:20 ? 00:00:00

    586 360 0 13:20 ? 00:00:00 791 2 0 13:20 ? 00:00:00 0

    uboot

  • 7/23/2019 Hardkernel ODROID

    135/192

    kernel

  • 7/23/2019 Hardkernel ODROID

    136/192

    fdiskfdiskfdiskfdisk

    - fdisk: T-flash partition

  • 7/23/2019 Hardkernel ODROID

    137/192

    -

    $ sudo mkfs.vfat /dev/sdc2 n vfat

    $ sudo mkswap /dev/sdc3

    $ sudo mkfs.ext4 /dev/sdc4 L rootfs

    Root file systemRoot file systemRoot file systemRoot file system

    - root file systemroot file systemroot file systemroot file system

  • 7/23/2019 Hardkernel ODROID

    138/192

    WifiWifiWifiWifi ---- 1111

    ---- Network :Network :Network :Network : wifiwifiwifiwifi : bcm4329 wireless lan power on

    . Wi-Fi on

  • 7/23/2019 Hardkernel ODROID

    139/192

    , .

    kernel wifi on .

    [$KERNEL/arch/arm/mach-s5pv310/hkc1xx-sysfs.c]

    WifiWifiWifiWifi ---- 2222

    ----

    $$$$ sudosudosudosudo mkdirmkdirmkdirmkdir ----p /system/etc/firmwarep /system/etc/firmwarep /system/etc/firmwarep /system/etc/firmware

    ==> copy fw_bcm4329.bin,==> copy fw_bcm4329.bin,==> copy fw_bcm4329.bin,==> copy fw_bcm4329.bin, nvramnvramnvramnvram files into /system/etc/firmware directory.files into /system/etc/firmware directory.files into /system/etc/firmware directory.files into /system/etc/firmware directory.

  • 7/23/2019 Hardkernel ODROID

    140/192

    $$$$ sudosudosudosudo mkdirmkdirmkdirmkdir /lib/modules/2.6.35.7/kernel/lib/lib/modules/2.6.35.7/kernel/lib/lib/modules/2.6.35.7/kernel/lib/lib/modules/2.6.35.7/kernel/lib==> copy bcm4329.ko file into /lib/modules/2.6.35.7/kernel/lib/==> copy bcm4329.ko file into /lib/modules/2.6.35.7/kernel/lib/==> copy bcm4329.ko file into /lib/modules/2.6.35.7/kernel/lib/==> copy bcm4329.ko file into /lib/modules/2.6.35.7/kernel/lib/ directory.directory.directory.directory.

    $$$$ sudosudosudosudo vi /lib/modules/2.6.35.7/modules.depvi /lib/modules/2.6.35.7/modules.depvi /lib/modules/2.6.35.7/modules.depvi /lib/modules/2.6.35.7/modules.dep

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------

    kernel/lib/bcm4329.ko:

  • 7/23/2019 Hardkernel ODROID

    141/192

    auto eth0auto eth0auto eth0auto eth0

    ifaceifaceifaceiface eth0eth0eth0eth0 inetinetinetinet dhcpdhcpdhcpdhcp

    address 192.168.0.204

  • 7/23/2019 Hardkernel ODROID

    142/192

    SsidSsidSsidSsid="test="test="test="test

    ####pskpskpskpsk="12345678="12345678="12345678="12345678pskpskpskpsk=fe727aa8b64ac9b3f54c72432da14faed933ea511ecab1 5bbc6c52e7522f70=fe727aa8b64ac9b3f54c72432da14faed933ea511ecab1 5bbc6c52e7522f70=fe727aa8b64ac9b3f54c72432da14faed933ea511ecab1 5bbc6c52e7522f70=fe727aa8b64ac9b3f54c72432da14faed933ea511ecab1 5bbc6c52e7522f709a9a9a9a

  • 7/23/2019 Hardkernel ODROID

    143/192

    BootingBootingBootingBooting ---- 2222

    - Booting

  • 7/23/2019 Hardkernel ODROID

    144/192

    APMAPMAPMAPM

    2. WWW Service APM(Apache, Php, Mysql)

    $$$$ sudosudosudosudo aptaptaptapt----get updateget updateget updateget update

    ::::

  • 7/23/2019 Hardkernel ODROID

    145/192

    :::: ....

    ---- ApacheApacheApacheApache

    $$$$ sudosudosudosudo aptaptaptapt----get install apache2get install apache2get install apache2get install apache2

    ---- mysqlmysqlmysqlmysql mysqlmysqlmysqlmysql

    $$$$ sudosudosudosudo aptaptaptapt----get install libapache2get install libapache2get install libapache2get install libapache2----modmodmodmod----authauthauthauth----mysqlmysqlmysqlmysql

    $$$$ sudosudosudosudo aptaptaptapt----get installget installget installget install mysqlmysqlmysqlmysql----serverserverserverserver mysqlmysqlmysqlmysql----clientclientclientclient

    ---- php5php5php5php5 mysqlmysqlmysqlmysql

    $$$$ sudosudosudosudo aptaptaptapt----get install php5get install php5get install php5get install php5----common php5 libapache2common php5 libapache2common php5 libapache2common php5 libapache2----modmodmodmod----php5php5php5php5

    $$$$ sudosudosudosudo aptaptaptapt----get install php5get install php5get install php5get install php5----mysqlmysqlmysqlmysql

    ---- sudosudosudosudo /etc/init.d/apache2 restart/etc/init.d/apache2 restart/etc/init.d/apache2 restart/etc/init.d/apache2 restart

    WWW ServiceWWW ServiceWWW ServiceWWW Service ---- 1111

    3. WWW Service : apache configuration file DocumentRoot php .

    - /etc/apache2/sites-available/default DocumentRoot /var/www.

  • 7/23/2019 Hardkernel ODROID

    146/192

    /etc/apache2/sites available/default DocumentRoot /var/www.

    $ cat /var/www/odroid.php


    WWW ServiceWWW ServiceWWW ServiceWWW Service ---- 2222

    - WWW Service

  • 7/23/2019 Hardkernel ODROID

    147/192

  • 7/23/2019 Hardkernel ODROID

    148/192

    : /

    Android Open AccessoryAndroid Open AccessoryAndroid Open AccessoryAndroid Open Accessory

    /

    USB Host / Device

    Google ADK Reference

  • 7/23/2019 Hardkernel ODROID

    149/192

    Goog e e e e ce

    Open Accessory solution ODROID-ADK

    Thermal

    Framework

    Gadget

    Open Accessory Library

    Thermal Printer Application

    Google Open AccessoryGoogle Open AccessoryGoogle Open AccessoryGoogle Open Accessory

    Android Honeycomb 3.1 / Gingerbread 2.3.4 ( )

    USB Device port (100% ?)

    MCU USB Host

  • 7/23/2019 Hardkernel ODROID

    150/192

    ( )

    (USB 2.0 HS)

    Google ADK ReferenceGoogle ADK ReferenceGoogle ADK ReferenceGoogle ADK Reference

    Maxim MAX3421 USB Host controller Atmel ATMEGA2560

    Arduino compatible

    Shi ld b d (I/O )

  • 7/23/2019 Hardkernel ODROID

    151/192

    Shield board (I/O test)

    Open Accessory solutionOpen Accessory solutionOpen Accessory solutionOpen Accessory solution

    MAX3421 USB Host controller + Atmel ATMEGA2560 , ($ ?)

    ( A d i )

  • 7/23/2019 Hardkernel ODROID

    152/192

    ( Arduino )

    FTDI Vinculum-II (VNC2)

    16-bit MCU core with built-in USB Host, 256KB Flash / 16KB RAM($ ?)

    Firmware source / Application source

    I/O Bus Analog/I2C

    Microchip PIC24/PIC32

    16bit/32bit, , ,

    Firmware source / Application source

    I/O

    ODROIDODROIDODROIDODROID----ADKADKADKADK

    PIC24FPIC24FPIC24FPIC24F

    Lithium PolymerLithium PolymerLithium PolymerLithium PolymerBattery ChargerBattery ChargerBattery ChargerBattery Charger

    Temperature SensorTemperature SensorTemperature SensorTemperature Sensor

  • 7/23/2019 Hardkernel ODROID

    153/192

    PIC24FPIC24FPIC24FPIC24F16Bit/Lower Power16Bit/Lower Power16Bit/Lower Power16Bit/Lower Power

    MCUMCUMCUMCU++++

    EmbeddedEmbeddedEmbeddedEmbedded

    USB HostUSB HostUSB HostUSB Host

    LDO 3.3 VoltLDO 3.3 VoltLDO 3.3 VoltLDO 3.3 Volt

    5Volt output5Volt output5Volt output5Volt outputStepStepStepStep----up DC/DCup DC/DCup DC/DCup DC/DC

    ConverterConverterConverterConverter

    (For USB Host )(For USB Host )(For USB Host )(For USB Host )

    LiLiLiLi----PolymerPolymerPolymerPolymerRechargeableRechargeableRechargeableRechargeable

    BatteryBatteryBatteryBattery

    Pressure(AltitudePressure(AltitudePressure(AltitudePressure(Altitude))))

    SensorSensorSensorSensor

    I/O PortsI/O PortsI/O PortsI/O PortsPWMPWMPWMPWMADCADCADCADCI2CI2CI2CI2C

    GPIOGPIOGPIOGPIO

    ODROIDODROIDODROIDODROID----ADKADKADKADK

    PIC24FJ64GB002

    (?) /

    /

  • 7/23/2019 Hardkernel ODROID

    154/192

    USB ( BaB )

    /

    (I/O Kit )

    ODROIDODROIDODROIDODROID----ADKADKADKADK Thermal printer InterfaceThermal printer InterfaceThermal printer InterfaceThermal printer Interface

    Firmware Library Architecture

    Configuring the LibraryConfiguring the LibraryConfiguring the LibraryConfiguring the LibraryUSB_ApplicationEventHandler callbacks ( )HardwareProfile.h ("HardwareProfile - PIC24FJ64GB002 HK.h" , UART , )usb_config.h (USB : Host/Device, BULK , NAK , VBUS )usb_config.c (VID/PID filter , )

    Initialization (ANDROID_ACCESSORY_INFORMATIONInitialization (ANDROID_ACCESSORY_INFORMATIONInitialization (ANDROID_ACCESSORY_INFORMATIONInitialization (ANDROID_ACCESSORY_INFORMATION myDeviceInfomyDeviceInfomyDeviceInfomyDeviceInfo))))

  • 7/23/2019 Hardkernel ODROID

    155/192

    USB/12MbpsUSB/12MbpsUSB/12MbpsUSB/12Mbps

    UART / 9600bpsUART / 9600bpsUART / 9600bpsUART / 9600bps

    384 x 24 matrix384 x 24 matrix384 x 24 matrix384 x 24 matrix

    ( _ _( _ _( _ _( _ _ yyyy ))))static char description[] = "ODROID-ADK1";

    static char manufacturer[] = "Hardkernel Co., Ltd.";static char model[] = "ODROID Accessory Demo";static char uri[] = "http://www.hardkernel.com";static char version[] = "1.1";static char serial[] = "N/A";

    Keeping the Stack RunningKeeping the Stack RunningKeeping the Stack RunningKeeping the Stack Runningmain() while(1) USBTask()

    Detecting a Connection/Disconnection to an Android DeviceDetecting a Connection/Disconnection to an Android DeviceDetecting a Connection/Disconnection to an Android DeviceDetecting a Connection/Disconnection to an Android DeviceUSB_ApplicationEventHandler() Callback device_attached == FALSE/TRUE

    Sending DataSending DataSending DataSending DataAndroidAppIsWriteComplete()Check to see if the last write to the Android device was completedAndroidAppWrite()Sends data to the Android device specified by the passed in handle.

    Receiving DataReceiving DataReceiving DataReceiving DataAndroidAppIsReadComplete()Check to see if the last read to the Android device was completedAndroidAppRead()Attempts to read information from the specified Android device

    * Microchip's Accessory Framework for AndroidMicrochip's Accessory Framework for AndroidMicrochip's Accessory Framework for AndroidMicrochip's Accessory Framework for Android

    ODROIDODROIDODROIDODROID----ADKADKADKADK

    USBUSBUSBUSB

    Firmware source code downloadFirmware source code downloadFirmware source code downloadFirmware source code downloadSVN server ( )http://dev.odroid.com/projects/accessory/src

    1. # svn checkout --username anonsvn http://dev.odroid.com/svn/accessory

    * The password is 'anonsvn'

    2. SDK eclipse http://dev.odroid.com/projects/accessory/wiki/BaseProjectAndEclipseSetting

    ADBADBADBADBADBADBADBADB WiFiWiFiWiFiWiFiWiFiWiFiWiFiWiFi

  • 7/23/2019 Hardkernel ODROID

    156/192

    ToolchainToolchainToolchainToolchain (Compiler)(Compiler)(Compiler)(Compiler)1. MPLAB IDE (Windows)

    -c30 gcc 2. MPLAB-X (Linux/Mac/Windows)

    -ODROID-ADK/BaB import - - Android C30-coff.a Android C30-elf.a )

    Lite /

    Programmer (Programmer (Programmer (Programmer (In Circuit Emulator)In Circuit Emulator)In Circuit Emulator)In Circuit Emulator)PICKIT3 (ProgramPICKIT3 (ProgramPICKIT3 (ProgramPICKIT3 (Program ))))-US$ 45 ( 60,000)-US$ 25 (Clone )PICKIT2 (ProgramPICKIT2 (ProgramPICKIT2 (ProgramPICKIT2 (Program ))))- US$ 35 /18

    * MicrochipMicrochipMicrochipMicrochip Development Tools Main PageDevelopment Tools Main PageDevelopment Tools Main PageDevelopment Tools Main Page

  • 7/23/2019 Hardkernel ODROID

    157/192

    :

    USB is an asymmetric protocol

    Host Controls the entire bus

  • 7/23/2019 Hardkernel ODROID

    158/192

    Controls the entire bus Keeps track of all attached devices and hubs(enumeration) Initiates communication with the device Is a power source

    Devices Communicates only with the host through endpoints Describes its capabilities to the host during

    enumeration Implements standard or vendor specific functions

  • 7/23/2019 Hardkernel ODROID

    159/192

    Android phone USBaccessory(device) ...

  • 7/23/2019 Hardkernel ODROID

    160/192

    USB host mode android phone?

    Android phone

    device(Accessory) .

  • 7/23/2019 Hardkernel ODROID

    161/192

    ADK BoardADK BoardADK BoardADK BoardPC(ADB orPC(ADB orPC(ADB orPC(ADB orMass Storage)Mass Storage)Mass Storage)Mass Storage)

    OdroidOdroidOdroidOdroid

    OdroidOdroidOdroidOdroid

    ()

  • 7/23/2019 Hardkernel ODROID

    162/192

  • 7/23/2019 Hardkernel ODROID

    163/192

  • 7/23/2019 Hardkernel ODROID

    164/192

  • 7/23/2019 Hardkernel ODROID

    165/192

    AndroidAndroidAndroidAndroidDeviceDeviceDeviceDevice

    ADK BoardADK BoardADK BoardADK Board

    Device

  • 7/23/2019 Hardkernel ODROID

    166/192

    Accessory mode

    USB vendor ID, product ID

    USB vendor ID, product ID Checkvendor ID :Google(0x18D1),Product ID :Accessory mode(0x2D00)

    Request 51(Protocol Ver)

    Protocol ver (1)

    Request 52(Information)

    Request 53(startup)

    Accessoy mode try...

    Establish communication

    Establish communication with thedevice

  • 7/23/2019 Hardkernel ODROID

    167/192

    If an Android device in accessory mode isdected, query devices interface and endpointdescriptor Find first bulk IN & OUT endpoints Set the devices configuration to 1 Now ready for communication

    kernel/include/linux/usb/f_accessory.hkernel/drivers/usb/gadget/f_accessory.c

  • 7/23/2019 Hardkernel ODROID

    168/192

    21 /* Use Google Vendor ID when in accessory mode */22 #define USB_ACCESSORY_VENDOR_ID 0x18D123

    2425 /* Product ID to use when in accessory mode */26 #define USB_ACCESSORY_PRODUCT_ID 0x2D0027

    28 /* Product ID to use when in accessory mode and adb isenabled */29 #define USB_ACCESSORY_ADB_PRODUCT_ID 0x2D01

    f_accessory.c Communicate with usb accessory designed for android device Define usb descriptor (interface, endpoint) Process android accessory protocol if accessory function is

  • 7/23/2019 Hardkernel ODROID

    169/192

    disabled(Android device side)

    GET PROTOCOL Provide protocol version for usb accessory

    Currently version number is 1 SEND STRING Receive strings from usb accessory(Manufacture, Model, Description, Version, URI, Serial)

    ACCESSORY_START change Google accessory mode enable accessory file interface

    usb_accessory device file interface UsbService use it to communicate with usb accessory

    kernel/drivers/usb/gadget/f_accessory.c

  • 7/23/2019 Hardkernel ODROID

    170/192

    2.3.4

    S5PC110, S5PV210 ODROID-7

    S5PC210(Exynos4210), S5PV310 ODROID-A

  • 7/23/2019 Hardkernel ODROID

    171/192

    Kernel(Nexus S ), Android(git merge)

    kernel/arch/arm/configs/odroida_android_defconfigkernel/arch/arm/plat-s5p/devs.c

    kernel/drivers/usb/gadget/composite.ckernel/drivers/usb/gadget/f_mass_storage.ckernel/drivers/usb/gadget/f_accessor