스마트단말기_MCP포팅_20120601.
Download
Report
Transcript 스마트단말기_MCP포팅_20120601.
MCP 메모리 포팅
CPU
MEMORY
U-Boot
Kernel
Android
:
:
:
:
:
S5PV210 @1000MHz
MT29C8G96MAYAPDJA-5IT (512MB LPDDR + 1GB NAND)
U-Boot 1.3.4
Kernel 2.6.35
Android 2.3
[변경전 SD/MMC 부팅 + DDR2 메모리]
SD/MMC 메모리에 부팅 파일시스템이 Write 되어있고, U-Boot 코드도 Micro SD Card 에서 시작하
며 NAND 플래시는 없는 상태.
[변경후 NAND 부팅 + LPDDR 메모리]
LPDDR + SD/MMC 메모리 부팅에서 LPDDR이 정상 동작이 이루어지면, NAND 플래시에 루트 파일
시스템을 저장할 계획.
[현재 문제점] Main 메모리를 MCP로 교체하면서 부팅 자체의 동작이상
(2012년 5월 31일)
기존 DDR2대신 MCP(LPDDR+NAND) 메모리로 변경되면서, 메인 DRAM 메모리인 DDR2가 타입이 다른
LPDDR로 교체 되면서 메인 메모리 사용에 문제가 생겨, 부팅이 진행 되지 않는 상황.
데이터시트를 참조로 부트로더 소스 수정을 하여 현재 U-BOOT 부팅까지는 가능하나, 다음단계인 kernel
부팅에서 진행이 안되고 멈춤.
DRAM 동작이상으로 Kernel 부팅이 진행되더라도, FRAMEBUFFER(디스플레이)나 SOUND구동 시 메모리
동작 이상로 인해 많은 문제가 예상됨.
기존 목표였던 NAND메모리로 Root Filesystem을 옮기는 작업은 DRAM 부팅이 이루어지고 나서야 작업
진행이 가능.
메인 MEMORY 회로변경사항
DDR2 메모리
MCP LPDDR메모리
1Gbit 메모리 4개를 DMC0, DMC1에 인터페이스
MCP의 LPDDR 메모리를 DMC0에 인터페이스
DMC1은 사용하지 않음
CPU
DMC0
DDR2
128
MB
DDR2
128
MB
CPU
DMC1
DDR2
128
MB
DDR2
128
MB
DMC0
DMC1
LPDDR
512 MB
NAND
FLASH
MCP
MCP - LPDDR 메모리 포팅 과정
[메모리 회로 XDDR2SEL 콘피스설정 LPDDR로 변경]
R36을 NC한 후 R37을 연결하여 Pull Down으로 셋팅
MCP - LPDDR 메모리 포팅 과정
[S5PV210 User Guide - LPDDR 초기화]
MCP - LPDDR 메모리 포팅 과정
[S5PV210 User Guide - LPDDR 초기화]
MCP - LPDDR 메모리 포팅 과정
[S5PV210 유저 가이드 LPDDR초기화에 맞게 레지스터설정]
Uboot/include/configs/teleworks.h
#define
DMC0_MEMCONTROL
0x00202100
// [22:20] BL=4, [19:16] 1 chip, [15:12] mem_width 32bit, [11:8] LPDDR type, [7:6] Add lat pall 0 cycle,
[5] dynamic self refresh, force precharge, dynamic power down off
#define
DMC0_MEMCONFIG_0
// MemConfig0
0x20F02322
[11:8] Column Add bits = 10bits, [7:4] Row Add bits = 14bits, [3:0] Banks = 4banks
#define
DMC0_MEMCONFIG_1
// MemConfig0
0x00F02322
[11:8] Column Add bits = 10bits, [7:4] Row Add bits = 14bits, [3:0] Banks = 4banks
#define
DMC0_TIMINGA_REF
0x00000618
// TimingAref 7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4E)
#define
DMC0_TIMING_ROW
0x28233287
// TimingRow for @200MHz
#define
DMC0_TIMING_DATA
0x13130304
// [31:28] t_wtr = 0x1, [23:20] t_rtp = 0x1, [19:16] cl = 0x3
“must be t_wtr = 0x01, t_rtp = 0x01 in case of JEDEC LPDDR” , CAS Latency = 2 or 3 (MT29C8G96MAYADPJA)
#define
DMC0_TIMING_PWR
// TimingPower
0x09C80232
Uboot/cpu/s5pc11x/s5pc110/spu_init.S
PhyControl1 을 LPDDR 메모리 타입으로 수정
ldr
r1, =0x00000085
//ldr
r1, =0x00000086
// @PhyControl1 DLL parameter setting, LPDDR @200MHz Case
// @PhyControl1 DLL parameter setting, DDR2 @200MHz Case
MCP - LPDDR 메모리 포팅 과정
[레지스터설정 예 - DMC0_MEMCONTROL]
Uboot/include/configs/teleworks.h
#define
DMC0_MEMCONTROL
0x00202100
// [22:20] BL=4, [19:16] 1 chip, [15:12] mem_width 32bit, [11:8] LPDDR type, [7:6] Add lat pall 0 cycle,
[5] dynamic self refresh, force precharge, dynamic power down off
MCP - LPDDR 메모리 포팅 과정
[레지스터설정 예 - DMC0_MEMCONTROL]
Uboot/include/configs/teleworks.h
#define
DMC0_MEMCONTROL
0x00202100
// [22:20] BL=4, [19:16] 1 chip, [15:12] mem_width 32bit, [11:8] LPDDR type, [7:6] Add lat pall 0 cycle,
[5] dynamic self refresh, force precharge, dynamic power down off
MCP - LPDDR 메모리 포팅 과정
[레지스터설정 예 - DMC0_MEMCONFIG0]
Uboot/include/configs/teleworks.h
#define
DMC0_MEMCONFIG_0
0x20F02322
// MemConfig0 - [11:8] Column Add bits = 10bits, [7:4] Row Add bits = 14bits, [3:0] Banks = 4banks
CPU User Guide
MCP Datasheet
MCP - LPDDR 메모리 포팅 과정
[레지스터설정 예 - DMC0_TIMING_DATA]
Uboot/include/configs/teleworks.h
#define
DMC0_TIMING_DATA
0x13130304
// [31:28] t_wtr = 0x1, [23:20] t_rtp = 0x1, [19:16] cl = 0x3
“must be t_wtr = 0x01, t_rtp = 0x01 in case of JEDEC LPDDR” , CAS Latency = 2 or 3 (MT29C8G96MAYADPJA)
MCP - LPDDR 메모리 동작 결과
[보드 동작 테스트]
U-boot 부팅 후 Kernel 이미지를 메모리에 압축을 풀고 Kernel 부팅 중
“Uncompressing Linux... done, booting the kernel.”
문구 출력 후 Lock 되거나 reboot 일어남.
start_kernel( ) 함수에 진입 이전에 현상이 발생하는 것으로 볼 때 kernel code 이전 문제로 보임.
M모 회사 엔지니어의 조언대로 현재메모리의 총 용량이 정상적으로 할당이 되어 있는지를 확인 하고,
메모리 Address 사용에 대한 U-Boot 코드 수정 빌드 작업을 진행 중이나 Kernel 부팅이 되지 않고 있음.
DRAM 부팅문제 진행상황 (S/W)
[메모리 address 할당 문제]
변경된 DRAM 메모리의 주소 재할당 작업
CPU
DMC0
DDR2
128
MB
DDR2
128
MB
CPU
DMC1
DDR2
128
MB
DDR2
128
MB
[기존 보드 메모리 연결 구성]
DMC0
LPDDR
512 MB
NAND
FLASH
MCP
[현재 보드 메모리 연결 구성]
그림처럼 메모리의 type과 연결 구성이 다르기 때문에 DMC1에서 관리하는 address 영역
에서 문제가 발생하는 것으로 생각이 되어 DMC0 으로만 DRAM 모든 영역을 사용할 수 있
도록 수정이 필요합니다.
하지만 현재 V210 CPU에 MCP장착시키는 레퍼런스를 할만한 BSP소스를 찾지 못하였고,
MCP 부품업체에서 BSP소스작업 자체에 대한 지원이 없어 작업에 많은 어려움이 있습니다.
M모 회사 엔지니어나 주변 지인들의 자문을 토대로 분석을 하고 있지만, 현재 U-Boot 동
작 이외의 결과가 나오지 않고 있는 상황입니다.
현재 변경된 메모리의 주소할당을 위해 관련 소스분석과 레퍼런스를 찾는 중입니다.
DRAM 부팅 문제 대처방안 (H/W)
[DDR2 메모리 + NAND]
MCP 메모리를 사용하는 대신 DDR2 메모리에 NAND 플래시만 추가
CPU
DMC0
CPU
NAND
LPDDR
512 MB
NAND
FLASH
MCP
[현재 보드 메모리 연결 구성]
DMC0
DDR2
128
MB
DDR2
128
MB
DMC1
DDR2
128
MB
DDR2
128
MB
NAND
NAND
FLASH
[DRAM 부팅이 가능한 메모리 연결 구성]
기존 목표였던 NAND 메모리 부팅 동작 이전에 MAIN 메모리 변경으로 인해 Boot 자체가
되지 않고 있는 상황이기 때문에, MAIN 메모리는 기존처럼 DDR2 메모리를 유지하고,
NAND만 추가로 부착하는 형태로 이루어지면 부팅관련 문제는 없기 때문에 NAND 플레시
포팅 작업에 초점을 맞추어 진행이 가능 합니다.