시리얼 포트, 패러랠 포트 등이 레거시 포트로 불리면서
PC나 노트북에서 사라져 가기 시작한지 꽤 오래됐다.
물론 일반 사용자야 별 필요없는 포트들이지만
개발자 입자에서는 (특히 임베디드 개발자) 아직 여러모로 쓸모 있는 포트다.
(얼마전 새로 지급 받은 노트북에도 시리얼 포트랑 패러랠 포트가 없더라.
지난 번에 쓰던 노트북이 좀 무깍기해도 시리얼 이랑 패러랠이 1개씩
달려 있어서 좋았는데.. 그래도 USB-to-Serial 장치가 있으니 상관없나)
모뎀의 경우에도 시리얼 통신을 통해 제어를 하기 때문에 모뎀 관련
어플리케이션을 개발 할때 시리얼 포트는 필수다.
(모뎀도 요새는 일반 전화선 모뎀 보다는 CDMA 모뎀을 많이 쓰는 거 같지만)
머.. 암튼 각설하고;;;;
요번에 장비에 CDMA 모뎀을 연결해서 개발 중인 프로젝트가 있다.
직접 개발 하는 건 아니고, 다른 사람을 시켜서…
일단 간단하게 시리얼 통신 하는 거 부터 시작해서 모뎀 제어 까지
하도록 하고 있다. 그런데, 시리얼 통신 까지는 문제가 없는데
모뎀을 연결해서 하면 제대로 되지를 않는다는 거다.
확인해 보니 진짜 시리얼 통신하는 루틴에는 문제가 없고,
모뎀도 PC에 연결해서 확인해 보면 정상적으로 작동하고,
도저히 의심할 구석이 없는 거다.
모뎀은 기본적으로 입력을 echo 시켜서 출력으로 다시 주게
되어 있으므로(아닌 경우도 있고, 끌수도 있지만)
모뎀으로 먼가를 보내면 출력으로 나오게 되어 있고,
AT 커맨드가 입력됐을 경우에는 응답코드가 출력되게 되어있다.
근데, 입력을 받고도, 당최 출력을 주지 않는 거다-_-
마지막으로 의심할 만한 부분은 모뎀과 장비 사이를 연결하는
시리얼 케이블. 그런데 테스트 해보니 케이블도 문제가 없었다.
다시 원인은 오리무중. 미칠지경이다-_-
그 후, 다시 테스트 해 본 바로는 분명 모뎀으로 보낸 AT 커맨드는
모뎀으로 전달이 됐고, 모뎀도 그에 상응 하는 동작을 한다는것이 확인됐다.
그럼, 입력은 받는데… 출력을 안준다는 건데…
점점 더 사건은 미궁속이다-_-;;;
시리얼 케이블 결선도도 뚫어져라 보고, 시리얼 케이블들도
뜯어보고… 다각도로 고민하던 중, 문득, 머리를 스치는 생각.
역시 결론은 시리얼 케이블!
문제의 케이블이 PC와 장비를 연결했을 때는 아무런 문제가 없다.
그런데 모뎀이랑 연결하면 작동을 하지 않는다.
그렇다면… PC와 통신할때는 쓰지 않는 다른 라인이 문제라는 것이 결론이다.
요즘의 시리얼 포트는 9핀 짜리 이긴 하지만, 실제로는 3개만 있으면
통신이 가능하다. 2번 RXD, 3번 TXD, 5번 그라운드.
보통은 이 3개의 핀만을 연결하고, 통신 하는 상호간에 [흐름제어 없음]으로 설정하여
시리얼 통신을 한다.
(음, 흐름제어를 따로 안 쓰는건 그만큼 시리얼 통신의 신뢰성이 높아져서 일까?)
그래서 케이블을 만들때도 3개만 연결하곤 하는데…
나머지 6개의 핀중 2개는 잘 모르겠고, 4개는 하드웨어 흐름제어를 하기 위해 필요한
핀인데… 이것이 문제란 말인가…
문득 뜯어본 다른 케이블에서 흐름제어에 사용되는 핀이 반대쪽 라인과 연결되지 않고,
같은 포트 쪽에 핀끼리 서로 물려 있었던 것이 생각 났다.
그리고, 다른 곳에서 찾은 결선도에서 그와 같은 형태로 나와 있었다.
하드웨어 흐름제어를 사용하는 장비를 속이는 일종의 트릭으로 생각 되는데…
7번 CTS와 8번 RTS를 서로 연결하고, 4번 DTR과 6번 DSR을 서로 연결하여,
자기가 보낸 신호를 상대방이 그에 대한 응답으로 보낸 신호로 착각하게 만드는 것이다.
[모뎀] [장비]
2(RXD) ——————————- 3(TXD)3(TXD) ——————————- 2(RXD)
4(DTR) —+
|
6(DSR) —+5(GND) ——————————- 5(GND)
7(CTS) —+
|
8(RTS) —+(대충 이렇게…)
모뎀이 항상 하드웨어 흐름제어를 사용해야만 하도록 되어 있고, 문제의 케이블은
그런 트릭이 사용되지 않았다고 가정한다면, 하드웨어 흐름제어가 먹히지 않아서
모뎀이 전송을 했으나 장비쪽에 수신이 되지 않았을꺼라는 것은 가능성이 있는 얘기였다.
(문제의 케이블은 포트 쪽을 뜯어 볼수가 없어서 정확히 확인이 어려웠다.)
그래서, 즉각 작업에 착수했다. 사실 서로 하드웨어 흐름제어를 쓰는게 맞긴 하겠지만…
일단은 위의 트릭을 써서 케이블을 새로 만들고, 모뎀과 장비를 연결.
그리고, 전원 on!
짜잔~ 드디어 모뎀 쪽에서 데이터가 전송되어 오는 것을 확인 할수 있었다 🙂
오늘의 교훈. 시리얼 케이블은 제대로 만들자-_-