logo
한국어 Select Language
FF 포럼
포럼지기에게 한 마디
공지사항
뉴스 EZ보드 통합 메뉴얼
FA-VUS 개발환경 !강추! 타켓보드 부팅-HyperTerminal 타켓보드 부팅-Tutty 타켓보드 부팅-minicom Windows환경-타겟 Linux 구동 Linux환경-타겟 Linux 구동 개발 시스템 구축 유형 페도라 설치 CentOS 설치 크로스 컴파일러 설치 TFTP 환경 구축 NFS 파일 시스템 구축 삼바 서버 구축 부트로더 부트로더 쓰기 커널 이미지 제작 및 설치 램디스크 이미지 제작 및 설치
임베디드 제품 사용기 오늘의 영어 휴게실 Appliance
강좌 & 팁
강좌 & 팁 EZ-보드 그래픽 & 멀티미디어 네트워크 프로그래밍 디바이스 드라이버 ImJa 솔루션 임베디드 FLEX 안드로이드 iOS 개발 FAIDE 하드웨어 C/C++ go언어 GNU C 레퍼런스 메뉴얼 ARM 루아 응용 프로젝트 이클립스 지그비 개발자 노트 권장도서 FPGA
VIVADO DSP HSIO Logic Zynq
함수설명
C 라이브러리 함수 커널 API 그래픽 라이브러리 - gxLib
자료실
자료실 FALINUX SDK ARM PC-V210 S3C6410
G100-S3C6410 S100-S3C6410 C221-S3C6410 N200-S3C6410 EZ-S3C6410
S5PV210
G100-S5PV210 S100-S5PV210 N200-S5PV210 C221-S5PV210
EZ-S3C2440 EZ-PXA270 EZ-X5 EZ-S2410 Auto Package
도와주세요
FAQ 도와주세요

  • 회원가입
  • ID/PW 찾기
 
  1. FAQ

  2. 도와주세요


최근 글

  • [특판][성Y인Y용Y품][...
  • 요즘 잘 나가는,,,
  • 요즘은 vmware 말고 ...
  • [docker] buildx 를 ...
  • buildroot 사용 관련
  • GPIO 제어 방법 문의 [1]
  • 임베디드 리눅스 개발...
  • make wandboard_quad ...
  • LCD 초기화 코드 좀 ... [1]
  • 임베디드 리눅스 커널...

최근 댓글

  • 오래 전에 해결법을 터득해서 ...
  • 비트 코인으로 작업하는 것은 ...
  • 10년차 임베 엔지니어 입니다. ...
  • 임베디드쪽이라면 SOC 쪽 displ...
  • 그렇군요 제가 질문이 잘못됬었...
  • 취준생으로서 포트폴리오를 만...
  • 제가 현재 취업준비생입니다. ...
  • 에프에이리눅스 보드는 아래 링...
  • 전체
  • 일반
  • X5
  • S2410
  • ESP-NS
  • S3C2440
  • EP9312
  • 구매
  • 기타

S2410 ezboot 에서 시리얼통신 하기.. 궁금한 것들 정리.

2009.04.29 22:57

미동 조회 수:14454


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

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





이상입니다.



이 게시물을
  • Twitter
  • Facebook
  • Delicious
목록

댓글 6

  • 오재경

    2009.04.30 06:18

    궁금증1) "ezboot에서 메인클럭 변경시 192Mhz 이하 설정에만 터미널에 제대로 나타남"
       클럭설정이 변경되는 UART  에 공급되는 클럭도 변경되어 원하시는 baudrate 가 나오지 않습니다.
       클럭을 변경하실때 UART 클럭값을 계산하여 넣으셔야 합니다.

    궁금증2) "zmodem 으로 kernel 등 image upload 시에 전송 마지막부분에서 멈춤"
       ZModem  전송시 에러가 날 경우 위와 같은 현상이 나타납니다. baudrate 문제이거나 baudrate 문제가 없다면
       UART 에 사용되는 FIFO 가  disable 되있을 경우 발생합니다.
       baudrate 설정과 FIFO 활성화가 되어있는지 확인하세요

    첨부하신 소스는 시간이 허락치 않아 보지 못했습니다. ^^
     

    댓글

  • 미동

    2009.04.30 17:58

    항상 친절하신 답변에 감사드립니다. ^^

    궁금증1) 은 클럭값을 계산하여 115200 bps 와 9600 bps 모두 적용해보고 판단된 것입니다.
    계산식은
    ( PCLK / (보레이트 * 16) ) - 1    이었으며     PCLK = FCLK / 4     로 적용되어 있습니다.
    계산결과는 10진수가 나와 EZBOOT 에 맞게 16진수로 바꾸어 적용하였습니다 약간의 손실은 있더군요.


    궁금증2) 이건 잘 모르겠습니다. 16 bit 램버스에 의하여 생기는 버벅임일까도 고민했습니다만..
                 고속동작하는 SDRAM 에서 이런 문제는 없겠지요.


    궁금증3) 이 생겼습니다. ^^;
    New 보드에서 부트로더를 띄운상태로 가만히 5분이상 두게 되면.. 다시 동작하려고 입력이 되는 순간
    재부팅 됩니다. -;;;; 부트로더만 띄운상태인데 재부팅이라니.. 좀 이상하네요.
    이건 SDRAM 설정 변경에 영향이 있는 걸까요.


    댓글

  • 오재경

    2009.04.30 22:10

    궁금증1) 은 클럭값을 계산
       공급되는 클럭을 나누어 UART  클럭을 사용하기때문에 정확한 UART 클럭 3.6864MHz 기준의 2곱하기 클럭이나 2나누기
       클럭이 나오지 않으면 에러가 발생합니다.

    궁금증2) DRAM 을 16비트로 쓴다고 해서 이런문제가 나지 않습니다.
       I-cache 가 활성화 되있지 않다면 속도가 느려 발생할수도 있겠네요

    궁금증3) 재부팅되는것이 아니라 exception 이 발생했을때 reset  벡터로 진입하는거라는 생각이 듭니다.
       SDRAM 메모리 문제가 있다는 생각이 듭니다.  일정시간이후에 리셋되는 것이니 refresh 시간쪽이라는 생각이 듭니다.
       정확한 이유는 판단이 잘 안서네요

     


    댓글

  • 미동

    2009.05.01 00:21

    매번 답변해주셔서 무한히 감사드립니다 !! ^^;

    UART 의 클럭값 계산을 아주 세밀하게 해주어야 하는군요.
    그런데.. S3C2410 에서 UBRDIV 레지스터에 적어야 하는 값이 16진수로 간단하게 적기때문에 제가 한 계산식의 경우
    계산할경우 잃는값이 있었습니다.

    예를들어 제가 FALinux 코드상에서 보고 한 계산에 따르면 이런 것입니다.
    메인클럭(FCLK) 이 192000000hz => 192Mhz 의 경우
    PCLK가 4를 나눈값인 48000000hz => 48Mhz 가 됩니다.
    (48000000 / (115200 * 16) ) -1   은 약 25.041 이 나오고 이것을 16진수로 하면 19가 됩니다.

    ( PCLK / ( 보레이트 * 16) ) -1 은 S3C2410 데이터 시트에서 나타난 계산식이었습니다.
    그래서 UBRDIV 값은 0x19 가 들어가게 됩니다.

    3.6864 의 배수로 맞추어야 하는지요? 그럼 위에 경우엔 어떻게 맞추어야 하나요..

    댓글

  • 미동

    2009.05.04 02:08

    되었습니다. 올라갑니다.

    원인은.. SDRAM 의 클럭불안정 이었습니다. ;;
    왠지 울고 싶네요..;;


    나머지 보드도 테스트해봐야 알겠지만.. 될 것 같습니다. 하아... 진이 빠집니다.;

    저의 열성에 친절하게 답을 해주신 오재경 실장님.~  감사드립니다. ^^

    댓글

  • 오재경

    2009.05.07 01:54

    우선 잘 되었다니 추카추카 드려요

    쉬는 일요일에글을 올리신것을 보니 OTL ..

    같은 개발자로써 공감하긴 하는데.. 가정을 지키세요 ㅎㅎ

    저도 5/1 일 아침을 회사에서 맞았습니다 ㅡ.ㅡ 밤샘하지 맙시다. 그리고 휴일에는 쉬게해주세요

    댓글

목록
번호 제목 글쓴이 날짜 조회 수
공지 포럼의 메뉴가 보이지 않아요! 장길석 2014.02.06 957656
공지 [중요 공지]제품 사용 및 기술 문의는 전화 상담을 받지 않습니다. 장길석 2012.11.09 1408549
공지 답글에 대한 공지 사항. falinux 2006.11.20 2424043
15341 [특판][성Y인Y용Y품][비아][시알][여성흥분제] 전부 1+1 vv8282.top 지금 확인해보세요~! dde33 2026.10.15 2
15340 요즘 잘 나가는,,, dde33 2026.09.12 845
15339 buildroot 사용 관련 로즈마리 2021.02.01 38166
15338 GPIO 제어 방법 문의 [1] 단순최고 2021.01.25 51084
15337 임베디드 리눅스 개발 보드 추천 nam 2019.12.06 48864
15336 make wandboard_quad 실행시 문제 gasi 2019.08.27 47085
15335 LCD 초기화 코드 좀 봐주세요 [1] 김용수 2019.07.12 63137
15334 임베디드 리눅스 커널 소스에 관해 질문드립니다 ! ekthatkxkd 2019.06.28 43728
15333 numpy,scipy 를 arm-linux-XXXX 로 크로스컴파일 하여 올릴수 있나요? 초보자 2019.06.24 49287
15332 I2C - deal with arbitration loss 오류가 궁금합니다. [1] S1eepingBeauty 2018.12.10 56771
15331 구형 EM-PXA270 보드 혹시 보유하시분 연락 주시면 감사드릴께요. file 존 2018.11.24 42753
15330 리눅스 GPIO 관련 센서의 단선 또는 고장유무 판별법이 궁금합니다. [2] S1eepingBeauty 2018.11.12 55126
15329 임베디드 리눅스에서 c 언어 디버깅 궁금합니다. [1] 존 2018.09.14 47072
15328 부팅 시간 문의 [1] nam 2018.06.29 45794
15327 localport? port? 검은고래 2018.06.29 39960
15326 fork()의 thread 멈추는 현상 [4] HwangRoy 2018.05.09 58616
15325 임베디드 리눅스 습득용 보드 판매하시나요? 임베디드초급자 2018.04.27 39719
15324 (도와주세요)네트워크 디바이스 드라이버 수정문제입니다. [1] Chanmini 2018.03.04 43601
15323 Ez x5 구합니다!! khobaik 2018.01.26 38317
15322 실행중 symbol not found 를 발생시키는 u-boot 본적 있으신가요 ? sayyouandme 2017.12.17 57349
첫 페이지 1 2 3 4 5 6 7 8 9 10 끝 페이지
쓰기
태그
부탁드립니다. ^^
  • 글을 작성하시려면 회원으로 가입하시고 로그인 하셔야 합니다.
  • 회원 가입은 주민등록번호가 필요 없으며, 메일 주소만 있으면 간단하게 가입하실 수 있습니다.
  • 본 포럼에 등록된 모든 글의 저작권은 작성하신 분께 있으며, 저작자의 허락 없이 다른 곳에 펌이나 도용하시면 안 됩니다.
  • 또한, 전자우편 수집 프로그램이나 그 밖의 기술적 장치를 이용하여 무단으로 이메일 주소 및 자료 수집되는 것을 거부하며,
  • 이를 위반 시 정보통신망 법에 의해 형사 처벌됨을 유념하시기 바랍니다.
  • FF 포럼
  • 강좌 & 팁
  • 함수설명
  • 자료실
  • 도와주세요