본문 바로가기
코스웨어/10년 스마트폰BSP

[BSP]업무일지-김 진-20100629

by 알 수 없는 사용자 2010. 6. 30.
728x90
반응형

오전시간 : ARM

★ 오늘의 목표! : 디버그 유닛(DBGU)을 이용하여 비동기RS-232C 통신을 수행해보자~


Q0. 통신이 뭐야?

A0.
송신기와 수신기가 신호를 주고 받는 행위.

      오늘은 AT91SAM7S256의 디버그 유닛(DBGU)과 IBM PC의 운영체제 Windows XP의 하이퍼터미널 프로그램
      서로 송수신기가 되어, RS-232C 통신 케이블을 통해 통신 할 것이다.

     




Q1. 통신을 하는데?

A1. 우리가 쓰는 임베디드 장비, ARM에는 모니터가 달려 있지 않아서, 얘가 지금 뭘 하고 있는지 눈으로 보기가 힘들다. 
     LED, 스위치 같은 거 쓰기도 하지만, 한계가 있다.
     통신을 하게 되면, 임베디드의 많은 부분을 다른 컴퓨터에서 모니터링 할 수 있다. (= 효율적으로 디버깅 할 수 있다.)



Q2. AT91SAM7S256의 어디에서 통신 기능을 하나?

A2. 내장된 I/O 기능 중 USART(동기 및 비동기 직렬통신 포트: Universal Synchronous Asynchronous Receiver Transmitter).
      원래 비동기(Asynchronous) 통신만을 지원하여 UART라 불렸었지만, ATMEL사에서 AT91SAM7S에 동기(Synchronous) 통신
      기능을 추가하여 USART라 불리게 되었다.



Q3. 직렬통신 vs. 병렬통신 ?

A3.
직렬 통신 병렬 통신
 데이터 전송을 위하여 1개의 통신라인을 사용  여러 개의 데이터 전송용 라인(Line)이 존재
 데이터 비트를 1개의 비트단위로 전송  한번에 다수의Bit데이터를 전송
 외부와의 송수신에 사용  빠른 속도로 통신이 가능하며 고속의 정보처리가 필요 할 경우 사용
컴퓨터내의 장치와 정보교환
 1개의 통신라인  8개의 데이터 선과 타이밍 선호선등이 필요
케이블의 효율이 떨어짐
 통신속도가 느리다.  속도는 빠르다.
 기존의 통신 선로를 쉽게 활용할 수가 있어 비용의 절감이 큼  케이블이 굵으면 길이를 길게 만들 때마다 비용이 증가
 통신거리에 제한을 덜 받으므로 장거리 전송 가능  전기적인 간섭현상으로 인해 병렬 전송은 단거리에서만





Q4.
동기 vs. 비동기 ?

A4. 장치 간에 클럭을 공유하느냐(= 동기) 하지 않느냐(= 비동기)의 차이.

◆ 동기 통신 : 늘 데이터를 받을 준비가 되어 있다.

데이터 교환이 없는 사이에도 제어용 신호가 흐르고 있으므로 상대와의 동기를 유지하는 것이 가능
       - 송.수신기 양측에 클럭(clock) 신호로 정확한 전송이 이루어지도록 제어

            1 바이트가 아닌 다수의 바이트가 한 블럭으로 만들어 일시에 전송
            각 바이트 사이에는 시작비트/정지비트 없이 끊이지 않는 연속적인 데이터

동기코드가 전송되면 수신측은 이 동기코드를 인식하고 동기를 맞추며, 실제 데이터는 동기코드 이후에 전송된다.
                       → 데이터의 전송 속도가 빠름




            ◆ 비동기 통신 : 수신부는 다음 데이터가 언제부터 시작되는지 예측할 수 없다.

            수신자에게 새로운 데이터가 도착했을을 알리기 위하여 별도의 비트가 각 바이트 시작 부분에 추가
                  - 논리신호 0인 이 비트를 시작비트(Start Bit)
                  - 데이터비트 뒤에 수신자에게 바이트가 끝났음을 알리기 위해서 논리신호 0인 별도의 비트가 추가 → 정지비트(Stop Bit)

            시작비트 이후 수신된 데이터 안에서, 수신 측에서는 들어오는 비트 흐름에 대해 동기화한다.
                  → 통신 속도를 맞추어야함.

            두 비트의 추가로 인해 동기 통신에 비해 속도가 느림

            PC의 시리얼 포트는 비동기 장치





Q5. RS-232C 통신 케이블은 무슨 일을 하나?

A5. 신호 레벨을 맞춰준다.

            AVR간에서 UART 통신을 할 경우에는 그냥 UART 포트끼리 붙여 주면 된다.
            이는 두 신호가 동일한 TTL 레벨을 사용하기 때문이다. (즉 High는 5V, Low는 0V)
 
            그러나, AVR과 PC간 통신을 할 경우 문제가 된다. PC는 EIA에서 규정한 RS-232C 규격을 사용하기 때문이다.
            EIA에서는 레벨은 MARK와 SPACE로 구분한다. (MARK = High, SPACE = Low)
                  - MARK = High는 -2 ~ -12V, SPACE = Low는 +2 ~ +12V이다.
 
            따라서 서로 신호 레벨이 다르기 때문에 이를 매개해 주는 것이 필요하다. 그것이 바로 RS-232C 회로이다.


                        ▼ RS-232C 커넥터

                                    연결은 어떻게?

                                    장비 A                      장비 B

                                    TXD ---------------- RXD
                                    RXD ---------------- TXD
                                    GND ---------------- GND



Q6. USART와 디버그 유닛(DBGU)은 무슨 관계?

A6. 임베디드 개발의 필수 요소인 UART의 용도를 감안하여, ATMEL사에서는 기존 UART에 
     디버그(Debug : 프로그램 상의 오류를 찾아내어 바로잡는 과정)에 필요한 기능을 강화시킨 유닛을 추가하게 되었다.
     이를 디버그 유닛(DBGU)이라고 부른다.

     디버그 유닛(DBGU)은 설정에 따라 - UART 기능
                                                         - 3가지 통신 에러 체크 기능
                                                         - 3가지 루프백(Loopback) 테스트 기능

     우리의 경우, UART 통신 모드로 사용할 것이다. (USART 포트 부분은 고려하지 않아도 된다.)
    
     이 때, 전송 포맷은 8 data bit, 1 stop bit로 고정된다. ← 디버그 유닛의 UART 기능의 한계...



Q7. AT91SAM7S256에서 디버그 유닛(DBGU)으로 통신을 제어한다면, PC에서는 어떤 통신 프로그램을 쓰나?

A7. Windows XP의 하이퍼터미널 프로그램 (시작 -> 보조 프로그램 -> 통신 -> 하이퍼터미널)

             실행하면 다음과 같은 창이 뜬다. 이름은 아무렇게나 지어준다.

            




             자기 환경에 맞는 것을 선택한다. (TCP/IP는 절대 아니다 !)
 
           



            (교과서 p.770 의 저자의 의견에 따르면,) 아래와 같이 설정해 준다.
            아래 설정은 디버그 유닛(DBGU) 포트 설정과 맞춰줘야 하므로 잘 기억한다.

           



            다음은 편리를 위한 설정..

            


           


           


            설정 끝~



Q8. 디버그 유닛(DBGU)을 쓰기 위해, 포트 설정은 어떻게 해 주나?

A8.
            1. DBGU의 외부 연결용 Pin 설정 : PIO_ASR

           

                                             △ 
                                            Peripheral A에 속해 있고, PA 9, 10번 핀에 대해서 설정해야 한다.

               - PA9, 10번 핀의 Peripheral A 모드 활성화 "주변장치 중 DBGU의 통신 부분을 쓰겠다."
                       →  PIO_ASR :: PA9_DRXD, PA10_DTXD 비트를 1로 설정.


             2. PIO 병렬 입출력 금지 설정 : PIO_PDR
                        - "해당 비트의 핀을 주변장치로 사용하기 위해, 병렬 I/O 포트로 사용하는 것을 금지한다.
                                          →  P9, P10 비트를 1로 설정.


             3. 포트 속도 (보레이트) 설정 : DBGU_BRGR
                                  └ Baud rate generator - 송신부와 수신부에 클록을 공급하는 회로.
                                                                       - 레지스터의 CD로 지정하는16비트 분주기를 이용하여 원하는 클록 주파수를 발생한다.
                                                                       - 0 : 클록 공급하지 않음/ 1 : 클록신호를 바이패스 / 그 이외 : 분주기능 수행

                                                         MCK = 48 [MHz]
                                     Baud rate =   ─────────  [bps]           (교과서 p.125 표 참조)
                                                                16 x CD

                        위 하이퍼터미널에서 통신속도를 115200으로 설정하였으므로, CD = 26

           
             4. 송/수신모드 활성화 : DBGU_CR
                       - TXEN, RXEN 비트를 1로 설정


             5.  포트 모드 설정 : DBGU_MR
                        - parity type : 하이퍼터미널 설정과 맞추어 '없음' → PAR_NONE 비트를 1로 설정
                        - CHMODE : 우리가 쓸 채널은 정상모드 → 00으로 설정
                                           (cf. loopback : 자기 자신에게 신호를 보내는 것)

             6. DBGU_SR : 폴링 check~
                                 └ Polling('깃대를 올리다') - 여러 개의 장치가 동일 회선을 공유하는 멀티포인트 통신에서,
                                                                          제어 장치는 각 장치에 한번에 하나씩 메시지를 보내어,
                                                                          전송할 데이터가 있는지(즉, 회선을 사용하기 원하는지)를 묻는다.
 
                    ① 송신 시, TXRDY 비트가 1로 설정되고,

                            




                             - DBGU_THR 에 저장된 문자가 송신된다.

                             



                    ② 수신 시, RXRDY 비트가 1로 설정되고,

                            

                

                             - DBGU_RHR로 수신된 문자가 저장된다.

                            



                                                                                                                                                                                    ※  buffer 역할


                                                                          소스 파일은 다음 시간으로 토스 ~




오후시간 : C++

★ 오늘의 목표! : 상속 이해하기~


728x90