안녕하세요~
그동안 했던 내용들을 정리하여 적어놓고 이곳에 올립니다.

EZ-S2410 을 참고하여 만든 새로운 보드에서 EZboot 를 사용하여 부트로더를 수정하여 동작시키려는데
몇가지 문제점들이 있었습니다.
그중 하나가 SDRAM 을 살리는 문제였지만- 지금은 동작하고 있구요. (좀 더 검증은 필요합니다)
또 하나가 UART를 살려 터미널창에 메세지를 나타내는 것도..
이제는 잘 나타나 주고 있습니다.
다만 ZMODEM 으로 커널이나 램디스크 이미지를 올릴때 전송 끝에가서 멈추는 현상이 나타납니다.

일단 실행 환경을 먼저 나타내고 궁금한 점을 그 밑에 넣겠습니다.


//실행 환경 ----------------------------------------------------------------

New 보드가 EZ-S2410 회로를 참고로 했지만 스펙은 변경하였구요.
중요 스펙을 정리하면 이렇습니다.


                            EZ-S2410               NEW-보드
         
CPU                   266Mhz(AL26)         200Mhz(AL20)
SDRAM (SIZE)     64MB(32*2)             32MB(32*1)      <- 같은 모델 사용
SDRAM (BUS)       32bit                      16bit
SDRAM (벤더)        삼성                     삼성
NAND  (SIZE)       64MB                     64MB
NAND  (벤더)         삼성                     삼성          <- 같은 모델 사용

이더넷                     O                        X


삼성의 데이터 시트를 참고하여 EZboot 에서 설정값을 바꿔 주고 SDRAM동작 확인할때
동적 Sync 상태를 모르고 한참 애먹었던 적이 있었습니다만..
지금은 잘 동작하는 것 같습니다.




//궁금한 것----------------------------------------------------------------

궁금증1) "ezboot에서 메인클럭 변경시 192Mhz 이하 설정에만 터미널에 제대로 나타남"


266Mhz : 시리얼출력 글자깨짐.
202Mhz : 시리얼출력 글자깨짐.
192Mhz : 글자 제대로 나타남.
180Mhz : 글자 제대로 나타남.

위 상태로 보아 S3C2410 AL20 CPU는 200Mhz 이하의 클럭에서 안정적으로 동작하는 것으로 보입니다.
테스트는 EZ-S2410과 같은 uart2 에 연결하였고 속도는 115200 bps 입니다. 다른 설정은 하지 않았고
터미널에서 설정은 맞춰두었습니다. data 8, 패리티 n, stop 1, 흐름제어 없음




궁금증2) "zmodem 으로 kernel 등 image upload 시에 전송 마지막부분에서 멈춤"


192Mhz 나 180Mhz 에서 시리얼통신 상태로 커널이나 램디스크를 업로드 할때 전송 끝부분에 가서는 멈추거나
에러를 발생합니다.
mimicom 상태에서 전송하면 전송 끝부분에서 약 1K 정도의 데이터를 남기고 멈추게 됩니다.
중간에 CTRL+C 키를 눌러 전송을 종료하고 나면 터미널 상에 'S' 가 일정간격으로 찍히고 있습니다.
기다리고 있으면  Time out 이 발생됩니다. 아래는 멈춰있는 상태를 그대로 써놓았습니다.

// ###### 상태 start
---------------[ zmodem upload - Press CTRL-C to qutit]---------------
Sending: zImage
Bytes Sent: 978944 / 979860     BPS:9331       ETA 00:00   Retry 0:
  Got TIMEOUT

Transfer incomplete
 
  READY : press any key to continue... 
// ##### 상태 end








//EZboot의 시리얼 셋팅 -------------------------------------------------------


아래는 ez_2410.h 에서 시리얼통신의 셋팅을 기존에 있던것과 임의로 고친것을 모두 옮겨놨습니다.
임의대로 설정하여 테스트 한것은 모두 주석처리 해두었습니다.

테스트1) EZ-BOOT 의 기본설정
테스트2) 레지스터값 변경.
         최소한의 통신환경 (임의 설정 - 현재 주석처리)




//================================================================================
//    설  명    :     디버기용으로 UART-2를 사용한다.
//                만약 다른 UART 포트를 사용하고 한다면 여기를 수정해 주어야 한다.
//                여기서 설정한 내용은 단지 UART-2로 디버깅용으로 아주 단순하게 설정되어 있다.
//                따라서 이후 C 루틴에서 시리얼을 다시 초기화해 주어야 한다.
//
//                BAUD RATE : 115200bps 로 설정한다.
//================================================================================
//    UART Line Control Register     [Normal mode, No parity, 1-stop bit, 8-bits
#define    S3C2410_REG_ULCON        0x50008000
//----------------------------------------------
#define ULCON_INFRA_RED_MODE        ( 0x0 >> 6 )    // 0=Normal Mode    1= Infra-Red Tx/Rx Mode
#define ULCON_PARIYT_MODE        ( 0x0 >> 3 )    // 0xx=No Parity    100=Odd Parity    101=Even Parity        110=Parity forced/checked as 1    111=Parity forced/checked as 0
#define ULCON_STOP_BIT            ( 0x0 >> 2 )    // 0=One Stop bit pre frame    1=Two Stop bit pre frame
#define ULCON_DATA_BIT            ( 0x3 >> 0 )    // 00=5-bits    01=6-bits    10=7-bits    11=8-bits

#define    ULCON_VALUE            ( ULCON_INFRA_RED_MODE | ULCON_PARIYT_MODE | ULCON_STOP_BIT | ULCON_DATA_BIT )

//----------------------------------------------
//    UART Control Register
#define    S3C2410_REG_UCON        0x50008004
//----------------------------------------------
#define    UCON_CLK_SELECT            ( 0x0 << 10 )
#define    UCON_TX_INT_TYPE        ( 0x1 <<  9 )
#define    UCON_RX_INT_TYPE        ( 0x0 <<  8 )
#define    UCON_RX_TIME_OUT_EN        ( 0x0 <<  7 )
#define    UCON_RX_ERR_STAT_INT_EN        ( 0x1 <<  6 )
#define    UCON_LOOPBACK_MODE        ( 0x0 <<  5 )
#define    UCON_SEND_BRK_SGN        ( 0x0 <<  4 )
#define    UCON_TX_MODE            ( 0x1 <<  2 )
#define    UCON_RX_MODE            ( 0x1 <<  0 )
/* // ----- 아래는 임의 셋팅 ------
#define    UCON_CLK_SELECT            ( 0x0 << 10 )
#define    UCON_TX_INT_TYPE        ( 0x0 <<  9 )
#define    UCON_RX_INT_TYPE        ( 0x0 <<  8 )
#define    UCON_RX_TIME_OUT_EN        ( 0x0 <<  7 )
#define    UCON_RX_ERR_STAT_INT_EN        ( 0x1 <<  6 )
#define    UCON_LOOPBACK_MODE        ( 0x0 <<  5 )
#define    UCON_SEND_BRK_SGN        ( 0x0 <<  4 )
#define    UCON_TX_MODE            ( 0x1 <<  2 )
#define    UCON_RX_MODE            ( 0x1 <<  0 )
*/
#define    UCON_VALUE            ( UCON_CLK_SELECT     | UCON_TX_INT_TYPE    | UCON_RX_INT_TYPE        \
                    | UCON_RX_TIME_OUT_EN | UCON_RX_ERR_STAT_INT_EN | UCON_LOOPBACK_MODE    \
                    | UCON_SEND_BRK_SGN   | UCON_TX_MODE            | UCON_RX_MODE )    // 0x245

//----------------------------------------------
//    UART FIFO Control Register
#define    S3C2410_REG_UFCON        0x50008008
//----------------------------------------------

#define    UFCON_TX_FIFO_TRG_LEVEL        ( 0x0 << 6 )
#define    UFCON_RX_FIFO_TRG_LEVEL        ( 0x0 << 4 )
#define    UFCON_TX_FIFO_RESET        ( 0x1 << 2 )
#define    UFCON_RX_FIFO_RESET        ( 0x1 << 1 )
#define    UFCON_FIFO_EN            ( 0x1 << 0 )
/* // ----- 아래는 임의 셋팅 ------
#define    UFCON_TX_FIFO_TRG_LEVEL        ( 0x0 << 6 )
#define    UFCON_RX_FIFO_TRG_LEVEL        ( 0x0 << 4 )
#define    UFCON_TX_FIFO_RESET        ( 0x0 << 2 )
#define    UFCON_RX_FIFO_RESET        ( 0x0 << 1 )
#define    UFCON_FIFO_EN            ( 0x0 << 0 )
*/
#define    UFCON_RESET            ( UFCON_TX_FIFO_TRG_LEVEL | UFCON_RX_FIFO_TRG_LEVEL    \
                    | UFCON_TX_FIFO_RESET      | UFCON_RX_FIFO_RESET     \
                    | UFCON_FIFO_EN )

#define    UFCON_VALUE            ( UFCON_FIFO_EN )

//----------------------------------------------
//    UART TX/RX Status Register
#define    S3C2410_REG_UTRSTAT        0x50008010
//----------------------------------------------

#define    UTRSTAT_TX_EMPTY        ( 0x1 << 2 )
#define    UTRSTAT_TX_BUFF_EMPTY        ( 0x0 << 1 )
#define    UTRSTAT_RX_BUFF_REAYD        ( 0x0 << 0 )
/* // ----- 아래는 임의 셋팅 ------
#define    UTRSTAT_TX_EMPTY        ( 0x1 << 2 )        // UART 전송단상태 (0:전송되지 않은데이터있음, 1:비어있음)
#define    UTRSTAT_TX_BUFF_EMPTY        ( 0x1 << 1 )    // 전송버퍼상태 (0:전송되지 않은데이터 버퍼있음, 1:비어있음)
#define    UTRSTAT_RX_BUFF_REAYD        ( 0x0 << 0 )    // 수신버퍼상태 (0:Empty, 1:수신데이터있음)
*/
#define    UTRSTAT_VALUE            ( UTRSTAT_TX_EMPTY | UTRSTAT_TX_BUFF_EMPTY | UTRSTAT_RX_BUFF_REAYD )

//----------------------------------------------
//    UART Transmit Buffer Register [ Little Endian ]
#define    S3C2410_REG_UTXH        0x50008020
//----------------------------------------------

//----------------------------------------------
//    UART BAUD RATE DIVISOR Register
#define    S3C2410_REG_UBRDIV        0x50008028
//----------------------------------------------
// ( PCLK/(16*baudrate)) -1 )

#if     CPU_SPEED == S3C2410_CPU_266M
#define    UBRDIV                0x24
#elif     CPU_SPEED == S3C2410_CPU_202M
#define UBRDIV                0x1A
#elif     CPU_SPEED == S3C2410_CPU_192M
#define    UBRDIV                0x19
//#define    UBRDIV                0x137            // 9600 BPS 임의 셋팅
#elif     CPU_SPEED == S3C2410_CPU_180M
#define    UBRDIV                0x17
//#define    UBRDIV                0x125            // 9600 BPS 임의 셋팅
#elif     CPU_SPEED == S3C2410_CPU_147M
#define    UBRDIV                0x13
#elif     CPU_SPEED == S3C2410_CPU_101M
#define    UBRDIV                0x0D
#else
#error    "S3C2410의 속도를 설정하세요"
#endif





이상입니다.