다른 문서에서 이미 언급했지만, 현재 개발 중인 HD 셋톱박스를 위한 소스 프로그램을 일컽는다.
기존의 SD 에서의 DACS1000 소스를 기본 베이스로 하기 때문에, 많이 다르지는 않다. 여기서 알아볼 것은 DACS5000 에서의 초기 셋업 동작과 메모리 맵을 파악하는 것이다.
이 두가지를 중점적으로 다룰 것이다.
일단 가장 기본이 될 수 있는 .cfg 파일을 분석한다. 기존의 DACS1000 의 .cfg 파일과 비교하면서 어떤 것들이 달라졌는지 확인해 본다.
... memory STEM1 0x60000000 (64*M) DEVICE // bank2 에 할당된 7020 이 기존의 32M 에서 64M 로 수정됨 memory FLASH 0x7F800000 (8*M) ROM // flash 용량이 기존의 2M 에서 8M 로 수정됨 ...
기존의 DACS1000 에 비해서 SDRAM 과 7020 세팅이 바뀌었다. 또한 예전 SD 보드와 7020 의 HD 보드에서의 EMI_WAIT 신호가 반대로 바뀌었기 때문에, POD와 FLASH 세팅값이 바뀌었다.
// Bank 0 ## configured for 32Mb sdram (non-subdecoded) poke -d 0x20200100 0x00004452 ## EMIConfigData0. poke -d 0x20200108 0x000FFFF8 ## EMIConfigData1. Page address mask. poke -d 0x20200110 0x00000020 ## EMIConfigData2. Precharge time (bits 7:4 => 1 to 16 sdram cycles) poke -d 0x20200118 0x00010929 ## EMIConfigData3. SDRAM memory read/write parameters ... ... ... // Bank 2 - STEM1 Configured as 16-bit peripheral poke -d 0x20200180 0x001116f1 ## EMIConfigData0. Peripheral format settings poke -d 0x20200188 0x06210000 ## EMIConfigData1. Peripheral read configuration poke -d 0x20200190 0x06210000 ## EMIConfigData2. Peripheral write configuration poke -d 0x20200198 0x0000000a ## EMIConfigData3. Peripheral read/write configuration
CPU 의 클럭이 변경되었다. 또한 setDivider 에서 EMI 부분이 추가되었다.
PLL_FREQ = 486 // 540 에서 수정됨 ... C200_DIV = 3 EMI_DIV = 6 VID_MEM_DIV = 4 VID_CLK2_DIV = 8 VID_CLK3_DIV = 16 AUD_DSP_DIV = 8 // 10 에서 수정됨 COMMS_DIV = 8 // 10 에서 수정됨 STBUS_DIV = 6 HDDI_DIV = 6 EMI_MPX_DIV = 6 EMI_FLASH_DIV = 6 EMI_SDRAM_DIV = 6 ... proc setupDividers { setDivider (C200) (C200_DIV) (WHOLE_VALUE) setDivider (EMI) (EMI_DIV) (WHOLE_VALUE) // 새롭게 추가됨 setDivider (VID_MEM) (VID_MEM_DIV) (WHOLE_VALUE) setDivider (VID_CLK2) (VID_CLK2_DIV) (WHOLE_VALUE) setDivider (VID_CLK3) (VID_CLK3_DIV) (WHOLE_VALUE) setDivider (AUD_DSP) (AUD_DSP_DIV) (WHOLE_VALUE) setDivider (COMMS) (COMMS_DIV) (WHOLE_VALUE) setDivider (STBUS) (STBUS_DIV) (WHOLE_VALUE) setDivider (HDDI) (HDDI_DIV) (WHOLE_VALUE) // 새롭게 추가됨 setDivider (EMI_MPX) (EMI_MPX_DIV) (WHOLE_VALUE) // 새롭게 추가됨 setDivider (EMI_FLASH) (EMI_FLASH_DIV) (WHOLE_VALUE) setDivider (EMI_SDRAM) (EMI_SDRAM_DIV) (WHOLE_VALUE) (2) } ... // CPU->STBUS (Semi-Sync 1, latency 1. For i-stream & d-stream) // This depends on the 2:1 ratio between CPU and STBUS clocks poke 0x20010008 0x08800000 // 0x0cff8000 에서 수정됨 emidelay (10) poke 0x2001000C (0x0000000C | (peek -q 0x2001000C)) // 0x0000000C 에서 수정됨 emidelay (10) poke 0x2001000C ((~0x0000000C) & (peek -q 0x2001000C)) // 0x00000000 에서 수정됨 emidelay (10)
config 디렉토리를 DACS1000 과 비교한 결과, 크게 7020 이 추가된 점과 CPU PLL 클럭이 다른 점을 제외하고는 별반 다르지 않았다.
아래의 그림은 각각 5000 과 1000 의 메모리맵을 나타낸 것이다.
그림에서 알 수 있듯이, 거의 같음을 알 수 있다. 위에서 mb382_um.cfg 에서 bank2 의 용량이 바뀐 것을 빼고는 말이다. 이번에는 SMI 메모리 맵만을 나타냈다.
앞에 전체 메모리 맵과는 좀더 차이를 보인다.
DACS1000 에 비해 증가된 것 | def_code, def_bss, def_data, def_const, os20_int_simple_text |
DACS1000 에 비해 감소된 것 | stack, heap |
분석을 하자면, 위의 표와 같다. stack 과 heap 영역은 앞에 영역의 사이즈에 따라 크기가 유동적이기 때문에 DACS1000 에 비해 줄어들었다.
def_code | 아무래도 소스코드가 DACS1000 에 비해 많아졌기 때문인 듯 하다 |
def_bss | 초기화하지 않은 데이터영역 역시 증가했다 |
def_data | 이 영역이 가장 많이 증가했다. 거의 2배정도 |
def_const | 상수 데이터영역 역시 증가했다 |
os20_int_moderate_text | 증가했다고 보기가 거의 힘들지만, 숫자상으로 증가했기에 적어만 둔다 |
여기서는 이정도 수준으로 마치기로 한다. 이어지는 문서에서는 main() 함수에서 실행되는 초기화 루틴을 통해 어떤 식으로 하드웨어를 콘트롤 하는지 알아볼 것이다. 앞에서의 분석을 통해, 기존의 SD 와 HD 가 어떻게 다른지 감을 잡았을 것이다. 이 감을 살려서, 이어지는 문서 역시 필독하기 바란다.