안녕하세요,  현재 부트를 하기 위해 노력하는 초보입니다.

 

현재까지 알아본 내용은,  BootStrap이 u-boot 를 올리기 위해서, 간단하게

PIO, PMC, SDRAMC 등의 하드웨어 초기화를 한후, 내부 flash에 address에

u-boot 를 넣으면, SDRAM 으로 점프를 해서 자동으로 u-boot를 로드하게 된다는 것입니다.

 

====================================================================

기존에 사용 했던, 외부 SDRAM 은 K4S651632 였습니다.

제가 현재 사용하고 있는 외부 SDRAM 은 MR48LC8M16A2 입니다.

====================================================================

 

1. 보드.c 파일 안에 있는 sdram_init 에 레지스터 설정은 값을 구하는 방법을 몰라,  x를 처두었습니다.

여기서 설정을 제대로 하지 못하면, u-boot 가 안올라가는지 알고싶습니다.

 

sdram_init( AT91C_SDRAMC_NC_9  |
    AT91C_SDRAMC_NR_12|
    AT91C_SDRAMC_CAS_x |
    AT91C_SDRAMC_NB_4_BANKS |
    AT91C_SDRAMC_DBW_16_BITS |
    AT91C_SDRAMC_TWR_x |
    AT91C_SDRAMC_TRC_x|
    AT91C_SDRAMC_TRP_x |
    AT91C_SDRAMC_TRCD_x|
    AT91C_SDRAMC_TRAS_x|
    AT91C_SDRAMC_TXSR_x, /* Control Register */
    (MASTER_CLOCK * 7)/1000000,     /* Refresh Timer Register */
    AT91C_SDRAMC_MD_SDRAM); 

 

AT91sam9xeek 에서 BootStrap 에서 u-boot 까지 올릴려고 합니다.

그리고, SDRAM 초기화 후에, SDRAM 영역을 확인하고 싶어서,

 

#define sdram_base1 ((volatile unsigned char*)0x20F00000)

int i;
 for(i=0;i<122;i++){
  *(sdram_base1+i) = i;
  printf("\r\n [0x%x] = [%x]",sdram_base1+i,*(sdram_base1));
  }
  

이렇게 하니, 결과가

0x20F0 0000 = 0

0x20F0 0001 = 1

0x20F0 0002 = 2

 증가가 됩니다. 소스로 보면, print 하는 곳은 *(sdram_base1) 여기라, 전부 0으로 나와야 할텐데,

소스가 잘못되었나요?