본문 바로가기
Synchronous와 Asynchronous는 머냐

Embedded System에서 자주 나오는 용어 중에 하나가 Synchronous냐, Asynchronous냐 하는 말이 많이 나옵니다. 그 말의 정의가 참으로 애매 모호하여, 이번 기회에 바로 잡고 지나가야 한다는 일종의 의무감이 불끈 솟아 오릅니다.
 
그 말의 정의를 다시 한번 곱 씹어 보면,
 
Synchronous : MCU clock 과 동기가 맞는다.
Asynchronous : MCU clock과 동기가 맞지 않는다.
 
이건 무슨 소리냐, CPU가 Data를 왔다 갔다 보내고 받는데 사용되는 clock과 박자를 맞추느냐 아니냐의 헛소리죠. 참 말도 어렵게 지었네요. 뭐, 어쨌거나 쉽게 구별할 수 있는 방법은 Synchronous와 Asynchronous의 Device 차이는 MCU로부터 Device로 clock이 붙어 있느냐 아니냐로 구분할 수 있겠습니다. Clock 신호가 붙어 있으면 Synchronous, 아니면 Asynchronous라고 보면 되겠네요.  뭐 간단하죠.  동작으로는 어떤 차이를 보이느냐 하면, Synchronous는 burst하게 MCU가 clock에 맞추어 Data를 보내면 그 clock에 맞추어 Data를 되돌려 주시는 식으로 곧바로 반응을 합니다. 그러니까 메모리로 따지면 burst로 (쭉 연결해서 마구~) 읽기가 가능해 집니다.  그런데, Asynchronous는 신호를 입력하면 (Bus에 특별히 약속된 신호를 넣어주면) 지가 안쪽에서 뭔가 뽁작 거린 후 (Wait State라고 불리우는 시간이 필요하다. 응답할 때까지의 지연시간이죠) 그 응답을 돌려줍니다. 그러다 보니, 뭔가 latency가 발생하게 되고 그 응답을 받을 때 까지 MCU가 기다려야 되는 일이 빈번하게 발생하게 되지요.
 
Synchronous의 경우에는 MCU clock과 연동되어 박자를 맞추고 있으니까 MCU와 제때에 Data를 원활하게 주고 받을 수 있지만 Asynchronous의 경우에는 그렇지 못한 경우도 발생합니다요. 그렇다고 해서 Asynchronous가 무조건 느리고 나쁜 것이 아니라, 그때그때 더 적당한 interface가 있는 거니까 서로 다른 종류의 access 방법이라고 보시면 됩니다.
 
Asynchronous이면서 Synchronous인 척 하는 트릭도 있어요. Wait을 없앤 건데요. Page모드라는 것이 Asynchronous의 경우에 burst를 흉내 낸 경우인 거죠. Asynchronous Memory의 경우 Address를 날리고 앞의 Address는 가만 냅두고 하위 주소만 요동쳐 주면 wait state없이 연달아서 Data를 돌려주는 방식을 말합니다. 가짜 synchronous라고 보믄 되지요.
 

동기화 (Synchronization)에 대한 얘기. 이건 네트웍쪽에서 사용하는 동기화라는 말에 대한 정의인데, 한번 들어보세요. 정보를 전송할 때 송신하는 쪽에서는 전송매체를 통해 한번에 한 비트씩 정보를 보내게 되는데 수신쪽에서는 각 비트의 시작과 끝을 판별하여 적당한 타이밍으로 회선을 샘플링하여 각 비트의 값을 읽어 내야 하죠. 송신 측에서 전송한 데이터의 각 비트를 수신측에서 정확하게 수신이 가능해야 하는데 송신측과 수신측의 시간이 절대 같을리가 없기 때문에 적당한 방법을 이용해서 이런 Synchronization이라는 걸 해야 한다구요. 이때 적당한 방법이라는 게 참으로 모호한데, 요떄 나오는 말이 동기식과 비동기식이라는 용어입죠. 송신측과 수신측의 Clock을 동기화 하는 방법으로 동기식은 송신기가 하나의 기준 클럭에 보조를 맞추어 동작하고, 비동기식 전송은 송수신기가 별도의 독립적인 클럭 신호를 이용하여 데이트 비트열의 송신과 수신을 하게 된다구요. - 아, 가슴에 와닿지 않는군요 - 

 어쨌든 간에, 송신하는 쪽은 MCU, 수신하는 쪽은 Peripheral Device 쪽이라고 치면 (양방향이긴 하지만, 보통은 이런 Data의 흐름이라서요) 전송매체를 Bus로 치고, 그렇다면 위의 예와 비스므리하게 연결되지요? 그래서 동기식은 계속 Synchronization이 되어 있기 때문에 대용량 전송에 적합하고, 비동기식은 그렇지 않기 때문에 불규칙적이면서도 작은 Size의 Data에 적합하다고나 할까요. 라는 말입니다요. 

 
Linked at 친절한 임베디드 시스템 개발자.. at 2009/10/01 12:54

... ⓗ Synchronous와 Asynchronous는 머냐 </a><a href="http://recipes.egloos.com/5126390"> ... more

Commented by organizer™ at 2009/09/28 23:06
>> 그때그때 더 적당한 interface가 있는 거니까

(하지만) Synchronous가 "대부분의 경우" Asynchronous에 비해서 유리한건가요..?

우리가 쓰는 CDMA인가는 Synchronous로 알고 있는데, 아무래도 우리가 쓰고 있으니까 Asynchronous로 알고 있는 GSM 보다 더 뛰어나다고 알고 있는데, 제가 제대로 알고 있는 건가요..?
Commented by 히언 at 2009/09/29 19:55
으하~ CDMA 얘기까지 나오게 될 줄은 ~ ㅎㅎ.
여기에서의 동기식과 비동기식은 약간 차이가 있는데요.

위의 예에서는 Clock이 Device에 동기를 맞출 수 있도록 도와주느냐의 문제잖아요.

그것과 마찬가지로
CDMA는 Pilot Channel이라는 걸 이용해서 기지국과 단말이 동기를 맞추는 거에요.
TDMA나 WCDMA (3GPP요, 3GPP2는 Sync..에요) 같은 경우에는 그런 동기 채널이 따로 없지요.

왜 CDMA가 Synchronous해서 더 좋다고 주장하는가! 하면요.
Pilot Channel을 이용해서 계속 Phase Tracking이 쉽기 되고요.
Pilot Channel이 아주 작은 Wide Band Pulse 잖아요.
그러니까, Channel의 Impulse response가 되니까, Channel이 어떤 모양새를
가졌는지 쉽게 판단할 수 있지요. 그러니까 다른 System보다는
Channel Distortion을 Compensation하기가 쉬워요.
그러다 보니까 CDMA는 Equalizer가 필요 없는거구요.

수신기의 모양새가 훨씬 Simple하지요.
그런면에서 더 좋다고 하는거지. 무엇이 더 뛰어나다고 말하기 좀 힘들어요.
ㅎ 요부분은 제가 재미있게 공부하고 논문썼던 부분이네요~ 으하하~
Commented by 히언 at 2009/09/29 22:40
그리고, 참고로 전체Map2에 보시면
Serial 통신에 관련된 얘기가 있습니다.
거기 마지막에 이런 말도 있네요. 적당한가 모르겠지만. 좋은 말이네요.

http://www.sciencesoftware.co.kr/TALtech/Tutorials/intro_sc/intro_sc.htm

동기(Synchronous) 통신과 비 동기(Asynchronous) 통신
시리얼 통신에는 동기 통신과 비 동기 통신의 2 종류의 통신 방식이 있습니다.동기 통신의 경우,2개의 디바이스 사이에서 동기를 취하고,그 타이밍에 따라,데이터를 송수신합니다.데이터의 교환이 없는 사이도 제어용의 신호가 흐르고 있으므로,상대와의 동기를 유지하는 것이 가능합니다.실 데이터를 송신한 때는,그것을 수신하고,데이터가 없는 때에는 대기 상태를 나타내는 신호를 교환합니다.이처럼 통신이 확립되면,실 데이터를 송수신한것에 데이터의 시작과,종료를 나타내는 신호가 존재하지 않기 때문에,데이터 전송 속도는 빨라집니다. PC의 시리얼포트는 비동기장치입니다. 그러므로 비동기 시리얼 통신만 지원합니다.

비 동기란 "동기 통신 아님" 의 의미입니다.그리고,송신과 수신 아이들(idle) 문자가 필요없습니다. 그렇치만 데이터의 처음과 끝에는 반드시,스타트 비트와 스톱 비트가 붙습니다.스타트 비트는 데이터의 개시를 나타내고,스톱 비트는 데이터의 종료를 나타내는 것입니다.따라서 이들 두비트의 추가 때문에 비 동기 통신의 속도는 동기 통신에 비교하여 약간 늦어집니다.그러나,프로세서는 대기 상태의 때에,여분의 아이들(idle) 문자를 처리한 필요가 없습니다.

비 동기 통신에 있어서 아이들 상태는,역시,마크(mark)라고 불리고,1의 값을 갖습니다.이 값을 이용한 것으로 ,아이들 상태의 경우와 ,케이블이 벗어나고 있는 상태를 판별한 것이 가능합니다.데이터를 송신하면,반드시 스타트 비트가 동시에 송신됩니다.그러니까,스타트 비트의 값은 0(스페이스 상태)로,수신측에 데이터가 송신되고 오는 것을 알립니다.

※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.
친절한 임베디드 시스템 개발자 되기 강좌 글 전체 리스트 (링크) -



댓글





친절한 임베디드 개발자 되기 강좌 글 전체 리스트 (링크) -