SmartRover 통신 분석
정장석(서기옵빠)
2014. 12. 20
목차
• H/W 구성
• H/W 통신 사양
• 통신 F/W 흐름도
• UART 통신 함수 구성
• 통신 패킷 처리 방법
• UART 통신 패킷 형식
• UART 통신 응답 처리 함수
• USB VCOM 통신 세부 구성
• USB VCOM 통신
• MSP(Multiwii Serial Protocol)
• HexAirBot Protocol
• 향후 추가해야 할 통신 기능
• 참고 자료
통신 H/W 구성
STM32F103
BLE ModuleUART3
GPS Module
or Serial LCD
UART1
Ultrasonic SensorUART2
nRF24L01+SPI
• Bluetooth 통신 :
BLE 4.0 HM-11 BLE Module 사용
• RF 통신 : nRF24L01+ 사용
• USB 통신 : VCOM
PCUSB VCOM
통신 H/W 사양
• HM-11 BLE Module
TI CC2541 기반 모듈
Bluetooth Specification V4.0 BLE
2.4 GHz ISM band
UART Interface
최대 30M (개방된 공간)
• nRF24L01+
2.4GHz GFSK RF transceiver IC
2.4GHz ISM band operation
GFSK modulation, 1 or 2MHz bandwidth
0, -6, -12, and -18dBm programmable TX output power
Configurable on-air data rate of 250kbps, 1Mbps or 2Mbps
SPI Interface
통신 F/W 흐름도
• Smart Phone과 Bluetooth
로 통신
• 무선 조정기와 RF 2.4GHz
로 통신
• PC와 UART/USB로 통신
SmartRover
Smart PhoneBLE 4.0
RF Controller or
PC
RF 2.4GHz
PCUART / USB
UART 통신 함수 구성
loop()
->annexCode()
->serialCom()
->readSerial()
->evaluateCommand()
• loop() : Main thread 함수
• annexCode() : 주기적으로 호출되
는 센서 처리 및 통신 처리 함수
• serialCom() : UART 통신 데이터를
수신하여 처리하는 함수
• readSerial() : UART 데이터를 수신
하는 함수
• evaluateCommand() : UART를 통
해 전송된 명령을 처리하는 함수
// mw.c
void loop(void)
{
:
// 3.5ms 주기로 annexCode() 함수를 호출함.
if (mcfg.looptime == 0 || (int32_t)(currentTime - loopTime) >=
0)
{
loopTime = currentTime + mcfg.looptime;
computeIMU();
annexCode();
}
:
// cli.c
const clivalue_t valueTable[] = {
{ "looptime", VAR_UINT16, &mcfg.looptime, 0, 9000 },
:
}
// config.c
static void resetConf(void)
{
:
mcfg.looptime = 3500;
:
}
통신 패킷 처리 방법
• UART로 수신된 데이터들을 분석
해서 명령을 추출해 냄.
• serialCom() 함수에서 수행함.
• 명령이 추출 후
evaluateCommand() 함수를 호출
해 명령을 수행함.
UART 통신 패킷 형식
0 1 2 3 4 5+DataSize 5+DataSize+1
‘$’ ‘M’ ‘<‘ Data
Size
MSP
Command
Max 64Bytes checksum
• Host->SmartRover 전송 패킷 형식
• SmartRover ->Host 전송 패킷 형식
0 1 2 3 4 5+DataSize 5+DataSize+1
‘$’ ‘M’ ‘!’
or
‘>’
Data
Size
MSP
Command
Max 64Bytes checksum
UART 통신 응답 처리 함수1
headSerialResponse() : 통신 패킷 헤더를 만드는 함수
serialize8() : 1Byte 데이터를 채우는 함수
serialize16() : 2Byte 데이터를 채우는 함수
serialize32() : 4Byte 데이터를 채우는 함수
headSerialReply() : 성공에 대한 응답 패킷을 생성하는 함수
headSerialError() : 실패에 대한 응답 패킷을 생성하는 함수
tailSerialReply() : CRC를 채우는 함수
UART 통신 응답 처리 함수2
USB VCOM 통신 세부 구성
• VCOM으로 PC와 통신
• Endpoint1을 통해 PC로 데
이터를 전송함.
• Endpoint3를 통해 PC로 부
터 데이터를 수신함.
PC STM32F103
USB
Host
USB Core
EP1
EP3USB OUT
USB IN
USB VCOM 통신 – USB 수신
USB_LP_CAN1_RX0_IRQHandler()
->USB_Istr()
->EP3_OUT_Callback()
->USB_To_USART_Send_Data()
->Hw_VCom_Q_Push()
• USB로 부터 수신된 데이터를
읽는 순서
• 최종적으로
Hw_VCom_Q_Buffer 버퍼에
데이터 저장
• serialRead() 함수를 통해 수
신된 데이터를 버퍼로 부터
얻을 수 있음.
USB VCOM 통신 – USB 송신
serialWrite()
->Hw_VCom_Putch()
->USB_Send_Data()
USART_Rx_ptr_in
USB_LP_CAN1_RX0_IRQHandler()
->USB_Istr()
->SOF_Callback()
->Handle_USBAsynchXfer()
• serialWrite() 함수를 호출해
서 USART_Rx_ptr_in 버퍼
에 데이터를 저장함
• USB ISR에서
Handle_USBAsynchXfer()
함수를 호출해서 버퍼에 저
장된 데이터를 전송함
MSP(Multiwii Serial Protocol) 1
• MSP는 Multiwii Corpter 오픈소스에서 사용되는 시리얼 통신
프로토콜
• Multiwii Config에서 사용
• HostFC로 전송하는 메시지와 FCHost로 전송하는 메시지로
구성
• SmartRover는 UART로 MSP 통신
MSP 2
MSP 3
MSP 4
HexAirBot Protocol 1
명령 기능
MSP_SET_RAW_RC_TINY 기체의 Roll/Pitch/Yaw/Throtle 및 AUX 단자 4개를 조정
MSP_ARM 기체 동작 시작
MSP_DISARM 기체 동작 종료
MSP_TRIM_UP 기체 수평이 맞지 않을 경우 조정
MSP_TRIM_DOWN 기체 수평이 맞지 않을 경우 조정
MSP_TRIM_LEFT 기체 수평이 맞지 않을 경우 조정
MSP_TRIM_RIGHT 기체 수평이 맞지 않을 경우 조정
HexAirBot Protocol 2
명령 기능
MSP_TRIM_UP_FAST 기체 수평이 맞지 않을 경우 조정
MSP_TRIM_DOWN_FAST 기체 수평이 맞지 않을 경우 조정
MSP_TRIM_LEFT_FAST 기체 수평이 맞지 않을 경우 조정
MSP_TRIM_RIGHT_FAST 기체 수평이 맞지 않을 경우 조정
MSP_READ_TEST_PARAM 테스트용
MSP_SET_TEST_PARAM 테스트용
MSP_HEX_NANO 기체의 정보를 전달
향후 추가해야 할 통신 기능
• RF 통신 기능 추가
• PC를 사용한 RF 제어 기능
• PC를 사용한 RF 다중 제어
• 무선 조종기와 연동
• 통신 통합 관리 구조 개선
• 통신 장애 처리 추가
참고 자료
• MultiWii Protocol
http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol
• HexAirBot Protocol
http://www.flexbot.cc/wiki/index.php?title=Main_Page
• Bitcraze
http://www.bitcraze.se/
http://wiki.bitcraze.se/
• Bluetooth-V40-HM11-BLE-Module 관련
http://www.seeedstudio.com/depot/Bluetooth-V40-HM11-BLE-Module-p-
1803.html
http://www.seeedstudio.com/wiki/Bluetooth_V4.0_HM-11_BLE_Module
• RF 칩 및 통신 관련 자료
http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01P

Smart rover 통신 분석

  • 1.
  • 2.
    목차 • H/W 구성 •H/W 통신 사양 • 통신 F/W 흐름도 • UART 통신 함수 구성 • 통신 패킷 처리 방법 • UART 통신 패킷 형식 • UART 통신 응답 처리 함수 • USB VCOM 통신 세부 구성 • USB VCOM 통신 • MSP(Multiwii Serial Protocol) • HexAirBot Protocol • 향후 추가해야 할 통신 기능 • 참고 자료
  • 3.
    통신 H/W 구성 STM32F103 BLEModuleUART3 GPS Module or Serial LCD UART1 Ultrasonic SensorUART2 nRF24L01+SPI • Bluetooth 통신 : BLE 4.0 HM-11 BLE Module 사용 • RF 통신 : nRF24L01+ 사용 • USB 통신 : VCOM PCUSB VCOM
  • 4.
    통신 H/W 사양 •HM-11 BLE Module TI CC2541 기반 모듈 Bluetooth Specification V4.0 BLE 2.4 GHz ISM band UART Interface 최대 30M (개방된 공간) • nRF24L01+ 2.4GHz GFSK RF transceiver IC 2.4GHz ISM band operation GFSK modulation, 1 or 2MHz bandwidth 0, -6, -12, and -18dBm programmable TX output power Configurable on-air data rate of 250kbps, 1Mbps or 2Mbps SPI Interface
  • 5.
    통신 F/W 흐름도 •Smart Phone과 Bluetooth 로 통신 • 무선 조정기와 RF 2.4GHz 로 통신 • PC와 UART/USB로 통신 SmartRover Smart PhoneBLE 4.0 RF Controller or PC RF 2.4GHz PCUART / USB
  • 6.
    UART 통신 함수구성 loop() ->annexCode() ->serialCom() ->readSerial() ->evaluateCommand() • loop() : Main thread 함수 • annexCode() : 주기적으로 호출되 는 센서 처리 및 통신 처리 함수 • serialCom() : UART 통신 데이터를 수신하여 처리하는 함수 • readSerial() : UART 데이터를 수신 하는 함수 • evaluateCommand() : UART를 통 해 전송된 명령을 처리하는 함수
  • 7.
    // mw.c void loop(void) { : //3.5ms 주기로 annexCode() 함수를 호출함. if (mcfg.looptime == 0 || (int32_t)(currentTime - loopTime) >= 0) { loopTime = currentTime + mcfg.looptime; computeIMU(); annexCode(); } : // cli.c const clivalue_t valueTable[] = { { "looptime", VAR_UINT16, &mcfg.looptime, 0, 9000 }, : } // config.c static void resetConf(void) { : mcfg.looptime = 3500; : }
  • 8.
    통신 패킷 처리방법 • UART로 수신된 데이터들을 분석 해서 명령을 추출해 냄. • serialCom() 함수에서 수행함. • 명령이 추출 후 evaluateCommand() 함수를 호출 해 명령을 수행함.
  • 9.
    UART 통신 패킷형식 0 1 2 3 4 5+DataSize 5+DataSize+1 ‘$’ ‘M’ ‘<‘ Data Size MSP Command Max 64Bytes checksum • Host->SmartRover 전송 패킷 형식 • SmartRover ->Host 전송 패킷 형식 0 1 2 3 4 5+DataSize 5+DataSize+1 ‘$’ ‘M’ ‘!’ or ‘>’ Data Size MSP Command Max 64Bytes checksum
  • 10.
    UART 통신 응답처리 함수1 headSerialResponse() : 통신 패킷 헤더를 만드는 함수 serialize8() : 1Byte 데이터를 채우는 함수 serialize16() : 2Byte 데이터를 채우는 함수 serialize32() : 4Byte 데이터를 채우는 함수 headSerialReply() : 성공에 대한 응답 패킷을 생성하는 함수 headSerialError() : 실패에 대한 응답 패킷을 생성하는 함수 tailSerialReply() : CRC를 채우는 함수
  • 11.
    UART 통신 응답처리 함수2
  • 12.
    USB VCOM 통신세부 구성 • VCOM으로 PC와 통신 • Endpoint1을 통해 PC로 데 이터를 전송함. • Endpoint3를 통해 PC로 부 터 데이터를 수신함. PC STM32F103 USB Host USB Core EP1 EP3USB OUT USB IN
  • 13.
    USB VCOM 통신– USB 수신 USB_LP_CAN1_RX0_IRQHandler() ->USB_Istr() ->EP3_OUT_Callback() ->USB_To_USART_Send_Data() ->Hw_VCom_Q_Push() • USB로 부터 수신된 데이터를 읽는 순서 • 최종적으로 Hw_VCom_Q_Buffer 버퍼에 데이터 저장 • serialRead() 함수를 통해 수 신된 데이터를 버퍼로 부터 얻을 수 있음.
  • 14.
    USB VCOM 통신– USB 송신 serialWrite() ->Hw_VCom_Putch() ->USB_Send_Data() USART_Rx_ptr_in USB_LP_CAN1_RX0_IRQHandler() ->USB_Istr() ->SOF_Callback() ->Handle_USBAsynchXfer() • serialWrite() 함수를 호출해 서 USART_Rx_ptr_in 버퍼 에 데이터를 저장함 • USB ISR에서 Handle_USBAsynchXfer() 함수를 호출해서 버퍼에 저 장된 데이터를 전송함
  • 15.
    MSP(Multiwii Serial Protocol)1 • MSP는 Multiwii Corpter 오픈소스에서 사용되는 시리얼 통신 프로토콜 • Multiwii Config에서 사용 • HostFC로 전송하는 메시지와 FCHost로 전송하는 메시지로 구성 • SmartRover는 UART로 MSP 통신
  • 16.
  • 17.
  • 18.
  • 19.
    HexAirBot Protocol 1 명령기능 MSP_SET_RAW_RC_TINY 기체의 Roll/Pitch/Yaw/Throtle 및 AUX 단자 4개를 조정 MSP_ARM 기체 동작 시작 MSP_DISARM 기체 동작 종료 MSP_TRIM_UP 기체 수평이 맞지 않을 경우 조정 MSP_TRIM_DOWN 기체 수평이 맞지 않을 경우 조정 MSP_TRIM_LEFT 기체 수평이 맞지 않을 경우 조정 MSP_TRIM_RIGHT 기체 수평이 맞지 않을 경우 조정
  • 20.
    HexAirBot Protocol 2 명령기능 MSP_TRIM_UP_FAST 기체 수평이 맞지 않을 경우 조정 MSP_TRIM_DOWN_FAST 기체 수평이 맞지 않을 경우 조정 MSP_TRIM_LEFT_FAST 기체 수평이 맞지 않을 경우 조정 MSP_TRIM_RIGHT_FAST 기체 수평이 맞지 않을 경우 조정 MSP_READ_TEST_PARAM 테스트용 MSP_SET_TEST_PARAM 테스트용 MSP_HEX_NANO 기체의 정보를 전달
  • 21.
    향후 추가해야 할통신 기능 • RF 통신 기능 추가 • PC를 사용한 RF 제어 기능 • PC를 사용한 RF 다중 제어 • 무선 조종기와 연동 • 통신 통합 관리 구조 개선 • 통신 장애 처리 추가
  • 22.
    참고 자료 • MultiWiiProtocol http://www.multiwii.com/wiki/index.php?title=Multiwii_Serial_Protocol • HexAirBot Protocol http://www.flexbot.cc/wiki/index.php?title=Main_Page • Bitcraze http://www.bitcraze.se/ http://wiki.bitcraze.se/ • Bluetooth-V40-HM11-BLE-Module 관련 http://www.seeedstudio.com/depot/Bluetooth-V40-HM11-BLE-Module-p- 1803.html http://www.seeedstudio.com/wiki/Bluetooth_V4.0_HM-11_BLE_Module • RF 칩 및 통신 관련 자료 http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01P