DACS 5000 ?

다른 문서에서 이미 언급했지만, 현재 개발 중인 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 가 어떻게 다른지 감을 잡았을 것이다. 이 감을 살려서, 이어지는 문서 역시 필독하기 바란다.

  • computer/digitalarena/dac5000_분석.txt
  • Last modified: 3 years ago
  • by likewind