Hardkernel ODROID 공개자료
-
Upload
joseph-kymm -
Category
Documents
-
view
342 -
download
4
Transcript of Hardkernel ODROID 공개자료
-
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