
이 예제는 PIC18F47Q10 마이크로 컨트롤러에서 CRC 주변 장치의 사용을 보여줍니다. PIC 마이크로 컨트롤러의 CRC 모듈은 프로그래밍 가능한 다항식으로 16 비트 CRC를 계산하는 하드웨어 구현 체크섬 생성기입니다. 더 빠른 CRC 계산을 위해 메모리 스캐너와 결합됩니다. 메모리 스캐너는 CRC 모듈에 데이터를 자동으로 제공 할 수 있습니다.이 예제는 CRC-16-CCITT 표준 매개 변수를 사용합니다. 이 데모는 프로그램 메모리의 CRC를 계산하고 장치를 처음으로 프로그래밍 한 후 컨트롤러의 EEPROM 영역에 저장합니다. 후속 파워 업에서 장치는 시작시 플래시 CRC를 계산하고 EEPROM 영역에 저장된 CRC에 대해 확인합니다. 불일치의 경우 프로그램 실행은 CRC 오류를 나타냅니다. 이 CRC 검사는 장치 작동 중에 주기적으로 예약되어 플래시 무결성을 보장 할 수 있습니다.

그림 1 : 프로그램 흐름도
완전한 프로그램 및 디버그 기능을 갖춘 PIC18F47Q10 CURIOSIT NANO 평가 키트는 새로운 디자인을 완벽하게 지원합니다. 이 키트는 MPPLAB® X IDE 및 MPLAB® 코드 구성 자 (MCC)를 사용하여 PIC18F47Q10의 지능형 아날로그 및 코어 독립 주변 장치에 대한 액세스를 제공합니다.

그림 2 : PIC18F47Q10 CURIOSIT NANO 보드
Microchip의 무료 MPLAB X IDE, 컴파일러 및 MCC (MCC) 그래픽 코드 생성기는 애플리케이션 펌웨어 개발 전반에 걸쳐 사용하여 쉽고 번거롭지 않은 사용자 경험을 제공합니다. 다음은이 데모 애플리케이션에 사용되는 도구 버전입니다.
참고 : 데모를 실행하려면 설치된 도구 버전이 동일하거나 나중에 동일해야합니다. 이 예제는 이전 버전으로 테스트되지 않았습니다.
새로운 프로젝트를 만들고 MCC를 열어 시작하십시오
하드웨어 주변 장치를 구성하십시오
프로젝트 리소스 탭에서 "시스템"드롭 다운 메뉴 아래에있는 클럭 제어 설정을 엽니 다.

그림 3 : 시계 제어
프로젝트 리소스 탭에서 "시스템"드롭 다운 메뉴 아래에있는 구성 비트 설정을 엽니 다.

그림 4 : 구성 비트
프로젝트에 CRC, UART2, TMR0 및 NVM 주변 장치를 추가하십시오.
장치 리소스 탭의 드라이버 드롭 다운 메뉴 아래에있는 주변 장치를 추가하십시오.

그림 5 : 주변 장치
CRC 주변 장치를 구성하십시오
CRC가 활성화되어 있는지 확인하십시오
사전 정의 된 다항식 사용이 활성화되어 있는지 확인하십시오
사전 정의 된 다항식 목록에서 CRC-16-CCITT를 선택하십시오
종자 값을 0xffff로 설정하십시오
확대 모드를 0으로 확대되지 않은 데이터로 설정하십시오
데이터 단어 너비 (비트)를 16으로 설정합니다 (플래시 메모리 데이터 너비가 16 비트이므로)
스캐너가 활성화되어 있는지 확인하십시오 (스캐너를 사용하여 메모리에서 데이터를 가져 오는 것).

그림 6 : CRC 구성
생성 EEPROM API가 설정되어 있는지 확인하십시오 (이 API를 사용하여 EEPROM 데이터를 작성합니다).

그림 7 : 메모리 구성
이 데모에서 UART2는 터미널 창에서 데이터를 전송하여 저장된 계산 된 CRC 값을 표시하고 CRC에 불일치가 감지 된 경우 오류 메시지를 표시하는 데 사용됩니다.

그림 8 : UART2 구성
이 데모 타이머 0에서는 프로그램 메모리의 CRC를 확인하기위한주기적인 이벤트를 생성하는 데 사용됩니다. TIMER 0 기간은 CRC 계산 주파수를 변경하도록 조정할 수 있습니다.

그림 9 : 타이머 0 구성
장치에 사용 된 핀을 구성하십시오
핀 관리자 : 그리드보기를 사용하여 RE0을 출력 핀으로 설정하십시오. LED는 PIN RE0에 연결됩니다.
RD0을 EUSART2 : TX2 출력으로 선택하십시오.
RX2에 사용되는 RB7.

그림 10 : 핀 관리자 : 그리드보기
프로젝트 리소스 → 시스템 → 핀을 사용하여 LED로 RE0 출력 핀에 사용자 정의 이름을 추가하십시오. LED PIN RE0의 "시작"확인란을 확인하여 LED를 끄십시오.

그림 11 : 핀 관리자
main.c 파일을 엽니 다.
MCC 생성 API를 사용하여 플래시 CRC를 계산하는 단계 :
CRC_SetScannerAddressLimit(START_ADDRESS, END_ADDRESS);
(이 데모에 사용 된 시작 주소는 0x00000이고 사용 된 최종 주소는 0x7ffe입니다. 따라서 CRC 계산에 사용되는 메모리의 총 블록 크기는 32KB입니다.)
참고 : 프로그램 크기가 32KB를 초과하면 최종 주소를 변경하여 블록 크기를 증가시킵니다.
CRC_StartScanner();
while(CRC_IsCrcBusy() || CRC_IsScannerBusy());
CRC_GetCalculatedResult(false,0x00);

그림 12 : 장치를 프로그래밍하십시오
//#define ERASE_EEPROM_CRC 무결하게합니다. 이를 통해 해당 위치에 이전에 저장된 잘못된 또는 이전 계산 된 CRC 값이 없도록합니다. 프로젝트를 구축하고 장치를 프로그래밍하십시오. 터미널 창에 표시된 메시지를 관찰하십시오.(MPLAB 데이터 영상화와 같은 모든 터미널 에뮬레이터를 사용할 수 있습니다. 보드 속도를 9600으로 설정하십시오.)

그림 13 : EEPROM 지우기 메시지
#define ERASE_EEPROM_CRC 라인에 주석하십시오. 프로젝트를 구축하고 장치를 프로그래밍하십시오.
그림 14 : 처음 CRC 계산

그림 15 : 주기적 CRC
참고 : 그림 15의 CRC는 -0 최적화 수준을 갖는 컴파일러 v2.41을 사용하여 계산됩니다.
CRC 모듈은 프로그래밍 가능한 다항식으로 16 비트 CRC를 계산할 수있는 하드웨어 구현 체크섬 생성기입니다. 또한 CRC 계산을위한 자동 플래시 판독을 제공하는 메모리 스캐너 기능을 사용합니다. MCC GUI를 사용하여 CRC 모듈 구성이 쉽습니다. 모듈 구성 외에도 MCC는 PIC 마이크로 컨트롤러에서 CRC 및 메모리 스캔 하드웨어 주변 장치를 사용하여 프로그램 메모리의 CRC를 번거롭게 계산하기 위해 API를 사용할 준비가되었습니다.