티스토리 뷰
첫번째로 구현할 UBX 패킷은 CFG-PRT이다.
GPS 모듈은 전원이 인가되면 기본적으로 몇개의 NMEA 메시지를 자동으로 송신하도록 되어 있다는 것은 앞에서 몇차례에 걸쳐서 얘기하였다.
UBX 패킷을 이용하기 위해서는 자동으로 송신되는 NMEA메시지를 보내지 않도록 해주어야 한다.
이를 위해서 CFG-PRT 패킷을 사용하면 된다.
위의 그림은 CFG-PRT 패킷의 구조를 설명하고 있는데 여기에서 중요한 부분은 Proto Mask 부분이다.
그림에 표시되어 있는것처럼 NMEA 메시지와 UBX 메시지를 enable/disable 할수 있다. CFG-PRT메시지를 보낼때 UBX 메시지만 송수신 할수 있도록 해주면 된다.
void loop()
{
uint8_t ch;
if (uart0.getchar(ch))
{
if (ch == 'p')
gps.cfg_prt();
}
if (uart1.getchar(ch))
{
uart0.puthex(ch);
}
}
UART0에서 p키를 누르면 CFG-PRT 메시지를 내 보내도록 되어 있다. GPS 모듈에서 들어오는 모든 데이터를 헥사값으로 출력하도록 하였다.
void Gps::cfg_prt()
{
clear();
struct cfg_prt_msg* msg = (struct cfg_prt_msg*)&gps_data[6];
uint32_t pkt_size = sizeof(struct cfg_prt_msg);
make_header(CLASS_CFG, CFG_PRT, pkt_size);
msg->port = UART_1;
msg->mode = 0x08D0;
msg->baud = 9600;
msg->in_mask = PROTO_UBX;
msg->out_mask = PROTO_UBX;
chksum(pkt_size);
uart1.send_data(gps_data, pkt_size + 8);
}
화면에 보이는 데이터들은 NMEA 메시지를 헥사값으로 출력한 것이다. ' p' 키를 누르면 CFG-PRT 패킷이 GPS로 송신되고 GPS는 CFG 패킷에 대한 ACK를 보내주도록 되어 있다. 위의 그림에 빨간색 박스가 ACK-ACK 패킷이다.
만약 CFG 패킷을 보냈을때 문제가 있거나 제대로 처리할 수 없는 상황이라면 ACK-NACK를 보내주게 된다.
위에서는 정상적으로 CFG-PRT가 처리되었음을 알려주고, 더이상 NMEA 메시지가 나오지 않게 된다.
'프로젝트 > GPS' 카테고리의 다른 글
GPS - NAV:POSLLH (0) | 2023.01.28 |
---|---|
GPS - NAV:TIMEUTC (0) | 2023.01.28 |
GPS - UBX (0) | 2023.01.28 |
GPS - UART (0) | 2023.01.28 |
GPS - 사전 준비 (0) | 2023.01.28 |
댓글