srxl 패키지 검증을 위해 클린 플라이트 쿼드 로콥터 펌웨어에서 사용하는 crc16 검증을 이해하려고합니다.CRC16 생성 및 확인
SRXL은 단일 직렬 회선을 통해 서보 값을 전송하기위한 간단한 직렬 프로토콜입니다.
패키지 구조는 다음과 같다 :
CRC16을 다음과 같은 기능에 의해 확인 :
//srxlFrameLength is the package length
//srxlFrame is the received package buffer
uint16_t crc_calc = 0;
for (i = 0; i < srxlFrameLength; i++) {
crc_calc = crc16_CCITT(crc_calc, srxlFrame[i]);
}
if(crcCalc == 0){ //package is valid }
나는 이것이 어떻게 작동하는지 이해하지 않습니다. 이것을 구현한다면, 나는 저장된 crc에 도달 할 때까지 패키지의 모든 바이트에 대해 crc iterativly를 계산할 것이고 저장된 crc와 비교할 것이다. 왜이 구현은 잘 작동합니까?
발신자 측 패키지 생성기 코드도 구현하고 싶습니다. 는이 같은 CRC 생성을 구현할 수 있을까 : CRC를 메시지의 끝에서 제대로 저장되어있는 경우 사전에
uint16_t crc_calc = 0;
for(int i = 0; i < packetLength; ++i){
crc_calc = crc16_CCITT(crc_calc, packet[i]);
}
//concat calculated crc16 to packet here.
감사합니다,
말테
감사합니다. 나는 지금 CRC 특성을 볼 것입니다. – Malte