도와주세요!!
안녕하세요, 현재 부트를 하기 위해 노력하는 초보입니다.
현재까지 알아본 내용은, 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으로 나와야 할텐데,
소스가 잘못되었나요?
말씀대로라면 지금 동작하는 코드는 sdram 상에서 동작하는 코드 같은데...
메모리가 정상적으로 동작하지 않는다면 printf 고 뭐고 아무것도 안될텐데요
코드는 결과값이 이상하긴 하네요