오전시간 : ARM
★ 오늘의 목표! : 디버그 유닛(DBGU)을 이용하여 비동기식 RS-232C 통신을 수행해보자~
Q0. 통신이 뭐야?
A0. 송신기와 수신기가 신호를 주고 받는 행위.
서로 송수신기가 되어, RS-232C 통신 케이블을 통해 통신 할 것이다.
Q1. 통신을 왜 하는데?
A1. 우리가 쓰는 임베디드 장비, ARM에는 모니터가 달려 있지 않아서, 얘가 지금 뭘 하고 있는지 눈으로 보기가 힘들다.
LED, 스위치 같은 거 쓰기도 하지만, 한계가 있다.
통신을 하게 되면, 임베디드의 많은 부분을 다른 컴퓨터에서 모니터링 할 수 있다. (= 효율적으로 디버깅 할 수 있다.)
Q2. AT91SAM7S256의 어디에서 통신 기능을 하나?
A2. 내장된 I/O 기능 중 USART(동기 및 비동기 직렬통신 포트: Universal Synchronous Asynchronous Receiver Transmitter).
기능을 추가하여 USART라 불리게 되었다.
Q3. 직렬통신 vs. 병렬통신 ?
직렬 통신 | 병렬 통신 |
데이터 전송을 위하여 1개의 통신라인을 사용 | 여러 개의 데이터 전송용 라인(Line)이 존재 |
데이터 비트를 1개의 비트단위로 전송 | 한번에 다수의Bit데이터를 전송 |
외부와의 송수신에 사용 | 빠른 속도로 통신이 가능하며 고속의 정보처리가 필요 할 경우 사용 컴퓨터내의 장치와 정보교환 |
1개의 통신라인 | 8개의 데이터 선과 타이밍 선호선등이 필요 케이블의 효율이 떨어짐 |
통신속도가 느리다. | 속도는 빠르다. |
기존의 통신 선로를 쉽게 활용할 수가 있어 비용의 절감이 큼 | 케이블이 굵으면 길이를 길게 만들 때마다 비용이 증가 |
통신거리에 제한을 덜 받으므로 장거리 전송 가능 | 전기적인 간섭현상으로 인해 병렬 전송은 단거리에서만 |
Q4. 동기 vs. 비동기 ?
A4. 장치 간에 클럭을 공유하느냐(= 동기) 하지 않느냐(= 비동기)의 차이.
데이터 교환이 없는 사이에도 제어용 신호가 흐르고 있으므로 상대와의 동기를 유지하는 것이 가능
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 회로이다.
연결은 어떻게?
장비 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++
★ 오늘의 목표! : 상속 이해하기~
'코스웨어 > 10년 스마트폰BSP' 카테고리의 다른 글
[bsp]업무일지_한경수_20100705 (0) | 2010.07.06 |
---|---|
[BSP]업무일지-전현수-20100702 (0) | 2010.07.02 |
[BSP]업무일지-박노준-20100701 (0) | 2010.07.01 |
[BSP]업무일지-손대원-20100630 (0) | 2010.06.30 |
[BSP]-업무일지-정홍환-20100628 (1) | 2010.06.28 |
[BSP]업무일지-강혜정-20100625 (0) | 2010.06.26 |
[BSP]업무일지_차상목_20100624 (0) | 2010.06.24 |
[BSP]업무일지_이도헌_ 20100623 (0) | 2010.06.23 |