
此示例演示了在PIC18F47Q10微控制器中使用CRC外圍的。 PIC MicroControllers中的CRC模塊是硬件實現的校驗和生成器,該校驗和發電機可通過可編程多項式計算16位CRC。它與內存掃描儀相結合,以進行更快的CRC計算。內存掃描儀可以自動向CRC模塊提供數據,此示例使用CRC-16-CCITT標準參數。該演示首次對設備進行編程後,計算程序內存的CRC並將其存儲在控制器的EEPROM區域中。在隨後的電源上,該設備在啟動時計算Flash CRC,並根據存儲在Eeprom區域中的CRC進行檢查。如果不匹配,程序執行表示CRC錯誤。可以在設備操作期間定期安排此CRC檢查,以確保閃存完整性。

圖1:程序流程圖
憑藉完整的程序和調試功能,PIC18F47Q10好奇心Nano評估套件為新設計提供了完整的支持。該套件使用Mplab®X IDE和MPLAB®代碼配置器(MCC),可在PIC18F47Q10上訪問智能模擬和核心獨立外圍設備。

圖2:PIC18F47Q10好奇心納米板
Microchip的免費MPLAB X IDE,編譯器和MPLAB代碼配置器(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。計時器0期間可以調整以更改CRC計算頻率。

圖9:計時器0配置
配置設備上使用的引腳
使用PIN Manager:網格視圖將RE0設置為輸出引腳。 LED連接到引腳RE0。
選擇RD0作為EUSART2:TX2輸出。
RB7用於RX2。

圖10:PIN管理器:網格視圖
使用項目資源→系統→引腳,將自定義名稱作為LED添加為LED。檢查“啟動高”複選框,以獲取LED PIN RE0,以關閉LED。

圖11:PIN經理
打開main.c文件。
使用MCC生成的API計算Flash 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的EEPROM位置。這確保先前在該位置存儲的CRC值沒有任何不正確或更早的CRC值。構建項目並編程設備。觀察終端窗口上顯示的消息。(可以使用任何終端模擬器(例如MPLAB數據可視化器)。將BAUD速率設置為9600。)

圖13:EEPROM擦除消息
#define ERASE_EEPROM_CRC行。構建項目並編程設備。
圖14:首次CRC計算

圖15:定期CRC
注意:圖15中的CRC使用具有-0優化級別的編譯器v2.41計算。
CRC模塊是一種實現的硬件校驗和生成器,可以使用可編程多項式計算16位CRC。它還使用內存掃描儀功能,該功能為CRC計算提供了自動閃光燈讀取。使用MCC GUI,配置CRC模塊很容易。除了模塊配置外,MCC還可以生成準備使用API,用於在PIC MicroController中使用CRC和內存掃描硬件外圍設備的程序內存的無用計算。