하드웨어
시리얼 통신은 오랜시간 사용되고 있다.
그러다 보니 다양한 형태의 사용 방법들이 있다.
물리적 전송으로 RS232, RS485, current-loop 등등
UART 는 이름에서 알수있듯이 비동기 통신이다. 이것을 동기통신처럼 사용하기도 한다.
BACnet 에서 MSTP 라는 것이 있는데 MSTP 는 시리얼에서 사용되는 BACnet 프로토콜이다.
MSTP 는 전송을 시작하면 연속적으로 데이타가 전송되어야만 한다. 각각의 데이타가 특정시간안에 오지 않으면 에러로 처리한다.
이제 말하려고 하는 9번째 비트를 사용하는 방법이다.
우리가 시리얼을 사용하면 대게는 baud = 115200, 1-stop, no-parity 를 사용한다.
내가 parity 를 사용하는 경우는 17년 개발에서 손가락에 꼽을 정도다. 이렇듯 사용이 안되는 패리티가 다른방법으로 사용된다.
현재 나오고 있는 UART 칩들은 LCR 레지스터의 D5 번 비트를 셋트하면 패리티비트를 강제적으로 1 또는 0 으로 사용할 수 있다.
이를 활용하여 패켓의 시작 바이트의 9번째 비트를 1 로 설정하고 따라오는 데이타 들의 9번째 비트를 0으로 설정하여
사용하면 아주 편한 통신을 할 수 있다..
시작코드를 찾기 위해 많은 노력을 하지 않아도 되는 장점이 있다
하지만 리눅스에서는 이를 구현하고 있지 않다.
리눅스에서 수신은 간단하게 된다. 시리얼 포트를 열때 IGNPAR 옵션을 주는 패리티에러나 프레임에러가 나도 에러처리하지
않고 받아주기 때문에 수신을 문제가 없다. 다만 시작바이트가 무엇인지 알지 못한다... 9번째 비트를 사용하는 장점이 사라졌다.
하지만 특정장비가 이것을 사용한다면 구현해야한다. ㅡ.ㅡ
시간이 촉박하여 다음주로 .....