앞의 글에서 설명한 내용까지 문제없이 진행되었으면, 이제는 수신된 데이터 중에서 필요한 부분만 추출하여 원하는 방법으로 데이터를 처리해 주면 된다. AK8975 data sheet 문서에 나오는 레지스터 설명은 다음과 같다. 이 중에서 실제 필요한 데이터는 0x03 ~ 0x08까지의 X,Y,Z 축에 대한 데이터이다. 따라서 이 부분만 화면에 출력해 주면 될것이다. 실제로는 이들 세가지 값을 가지고 어느 방향을 가르키는지 방위각을 계산하여야 하지만 그 부분은 지금 다루고 있는 통신과는 다른 주제이므로 여기에서는 생략하기로 하겠다. X,Y,Z 레지스터 값은 16비트 값으로 되어 있고, little endian으로 제공된다. 이러한 정보를 가지고 컴퓨터 프로그램에서 X,Y,Z 값을 출력해 보도록 하겠다. #-..
통신에 있어서 데이터를 수신하는 측에서는 수신한 데이터가 오류없이 제대로 들어왔는지 궁금할 때가 있다. 전송 선로의 길이가 길거나, 아니면 아예 선이 없는 무선 통신의 경우에는 더더욱 수신된 데이터에 대한 신뢰가 떨어지게 된다. 이러한 이유로 다양한 방법을 사용해서 수신된 데이터에 오류가 발생했는지 여부를 확인할 수 있게 한다. 쉽게 사용할 수 있는 방법이 체크섬(check sum)이다. 이 방법은 8비트 혹은 16비트 단위로 모든 데이터를 더해서 그 마지막 결과값을 추가로 데이터에 덧붙여 보내주면, 수신측에서 동일한 계산을 하여 check sum값이 같은지 비교해서 수신한 데이터의 오류를 판단할 수 있게 하는것이다. 그러나 단순한 덧셈 연산이기 때문에 어떤 데이터에 1이 더한 값이 전달되고, 다른 데이..
이번 글에서는 데이터를 수신하는 측에서 패킷의 시작과 끝을 알 수 있게 하는 방법에 대해서 설명하도록 하겠다. 패킷의 시작과 끝을 알수 있게 하는 방법은 무수히 많겠지만, 이미 잘 알고 있는 방법중에서 아이디어를 빌려오도록 하겠다. 그것은 다름아닌 HDLC(High-Level Data Link Control)를 이용하는 것이다. HDLC는 IBM의 SDLC라는 프로토콜을 국제적으로 표준화한 방법인데, 기본 적인 패킷의 구조는 다음과 같다. 위의 그림에 보이는것처럼 패킷의 시작과 끝에 8비트 크기의 Flag 필드가 있다. 이 플래그는 이진수로 '01111110'의 값을 가진다. 헥사값으로 표시하면 '0x7E'이다. 나머지 필드들은 다음에 설명하기로 하고, 이번글에서는 Flag필드에만 초점을 맞추어 설명하도..