簡介
本文將詳細介紹如何使用 EB 工具配置 Flagchip FC7300 MCAL 的 CRC 校驗功能,首先以實例的方式介紹 CRC 功能的配置過程,其次再對 CRC 這個模塊的各個選項進行釋義。對於 CRC 實例中的相關模塊(MCU、EcuC、Common、Os、PORT)的功能介紹,請查看本網站的其他相關博文。
硬體平台:旗芯微 FC7300 DEMO BOARD V2 開發板
軟體平台:EB tresos 28.1.0 、Flagchip_FC_IDE 4.07
FC7300 MCAL 版本:0.4.0
AUTOSAR 版本: V4.6.0
一 、實例的 MCAL 配置
1.1、MCU 模塊
1.1.1、 在 Module Configurations 中添加 MCU 模塊,選擇 MCU Clock Setting Config 下的 Index ,雙擊並打開。

▲ 圖 1.1
1.1.2、 配置系統時鐘
關於 CRC 的系統時鐘配置,沒有特殊的要求,可以默認設置。下面介紹選擇外部時鐘,系統時鐘為 300MHz 的配置。
①、配置外部輸入晶振時鐘為 24 Mhz。

▲ 圖 1.2
②、配置 PLL0 的輸入時鐘為 FOSC,將FOSC 的 24MHz 頻率經過 12 倍的預分頻、300 倍的倍頻和 2 倍的分頻之後,PLL0 頻率為 300MHz。

▲ 圖 1.3
③、配置 PLL0 為系統時鐘

▲ 圖 1.4
1.1.3、使能 CRC 時鐘
在 PCC 下確保已添加 CRC 的外設並設置時鐘使能,這裡有 2 個 CRC 模塊,可以設置每個 CRC 模塊所屬的 CPU 核心。

▲ 圖 1.5
1.2、EcuC 模塊
在 Module Configurations 中添加 EcuC 模塊。在 CRC 應用中的 EcuC 模塊只需默認配置,不作修改。

▲ 圖 1.6
1.3、OS 模塊
在 Module Configurations 中添加 OS 模塊。在 CRC 應用中的 OS 模塊只需默認配置,不作修改。

▲ 圖 1.7
1.4、CRC 模塊
在 Module Configurations 中添加 CRC 模塊。
① 在 General 頁簽下,勾選 “Crc Multicore Enable”。

▲ 圖 1.8
② 在 Crc Ecuc Partition Ref 頁簽下新建 2 個 Ecuc 分區參考映射,分別設置 Ecuc 分區 0 和分區 1 映射。

▲ 圖 1.9
③ 在 Crc Channels Configuration 頁簽下,添加 2 個通道配置,並雙擊 Index 下面的數字,打開通道配置界面。

▲ 圖 1.9
④ 在 CRC 通道配置界面,設置 CRC 的算法、計算方式、Ecuc 分區映射。如果計算方式選擇了硬體方式(CRC_HARDWARE_CALCULATION),那麼需要在 CRC Hardware Config 配置使用 MCU 的哪個 CRC 硬體:CRC_HW_INSTANCE_0 或者 CRC_HW_INSTANCE_1。
實例中,CrcChannelConfig_0 設置了算法是 CRC16_CCITT_FALSE,使用 CRC_HW_INSTANCE_0 硬體計算,Ecuc 分區 0。CrcChannelConfig_1 設置了算法是 CRC16_ARC,使用 CRC_HW_INSTANCE_1 硬體計算,Ecuc 分區 1。

▲ 圖 1.10

▲ 圖 1.11
⑤ 在 General 頁簽下,點擊 Crc16Mode 前面的紅方框,使能 CRC16_CCITT_FALSE 算法,使用硬體 CRC_HW_INSTANCE_0。點擊 Crc16ARCMode 前面的紅方框,使能 CRC16_ARC 算法,使用硬體 CRC_HW_INSTANCE_0,並且將 CRC Instance 0 鏈接到 Ecuc 分區 0, CRC Instance 1 鏈接到 Ecuc 分區 1。
▲ 圖 1.12
二、示例代碼解析
2.1 校驗 EB工程並更新代碼至 FCIDE 中。

▲ 圖 2.1
2.2 Mcal_DemoBoard_Project 工程目錄 & 文件介紹

▲ 圖 2.2
- _MCAL_multicore_generate_8M: EB 工具生成的配置文件
- APP: 示例應用代碼,CRC 示例代碼的 Bsp_Crc.c 文件在這個文件夾里
- MCAL: 微控制器抽象層
- MiddleWare:包含 MPU driver、HwA、RTT driver、UART driver
- Source & Include:包含 main 和中斷處理文件
- Startup:包含 7300 的啟動和鏈接腳本
2.3 Crc_Cfg.c 和 Crc_Cfg.h
_MCAL_multicore_generate_8M ->include 文件夾中的 Crc_Cfg.h 包含了 EB 配置中的一些宏定義。

▲ 圖 2.3
_MCAL_multicore_generate_8M ->Source 文件夾中的 Crc_Cfg.c 包含了 EB 配置中的 Channels Configuration 設置。

fgii

▲ 圖 2.4
2.4 Bsp_Crc.c
APP -> Source 文件夾下,Bsp_Crc.c 裡面有 CRC 示例代碼。

▲ 圖 2.5
三、燒錄 & 調試
將工程編譯並燒錄到開發板並調試,串口調試助手顯示了各種方式校驗的結果。
這裡要注意的是:在前面的配置中只設置了 CRC16_CCITT_FALSE 和 CRC16_ARC 兩種算法使用硬體的方式計算,那麼其它算法的計算方式默認選擇的是 RUNTIME 方式。

▲ 圖 3.1
四、MCAL CRC 模塊詳解
CRC 模塊提供 CRC 校驗算法的配置。

▲ 圖 4.1
- Crc Development Error Detection:CRC 模塊開發錯誤檢測使能
- Crc Multicore Enable:CRC 支持多核操作使能
- Crc Version Info API:CRC 版本信息顯示
- Crc8Mode: CRC_8BIT_SAE_J1850 算法使用的計算方式,可設置為:查表(CRC_8_TABLE)、實時計算(CRC_8_RUNTIME)、硬體(CRC_8_HARDWARE)。FC7300 的硬體 CRC 功能不支持 8 位,所以只能選擇查表和實時計算。
- Crc8H2FMode: CRC_8BIT_H2F 算法使用的計算方式,可設置為:查表(CRC_8H2F_TABLE)、實時計算(CRC_8H2F_RUNTIME)、硬體(CRC_8H2F_HARDWARE)。FC7300 的硬體 CRC 功能不支持 8 位,所以只能選擇查表和實時計算。
- Crc16Mode: CRC_16BIT_CCITT_FALSE 算法使用的計算方式,可設置為:查表(CRC_16_TABLE)、實時計算(CRC_16_RUNTIME)、硬體(CRC_16_HARDWARE)。FC7300 的硬體 CRC 功能支持 16 位,在選擇硬體 CRC 的時候,還需要在 Crc16 Hardware Instance 設置使用哪個 CRC 硬體:CRC_HW_INSTANCE_0 或者 CRC_HW_INSTANCE_1。
- Crc16ARCMode: CRC_16BIT_ARC 算法使用的計算方式,可設置為:查表(CRC_16ARC_TABLE)、實時計算(CRC_16ARC_RUNTIME)、硬體(CRC_16ARC_HARDWARE)。FC7300 的硬體 CRC 功能支持 16 位,在選擇硬體 CRC 的時候,還需要在 Crc16 Hardware Instance 設置使用哪個 CRC 硬體:CRC_HW_INSTANCE_0 或者 CRC_HW_INSTANCE_1。
- Crc32Mode: CRC_32BIT_ETHERNET 算法使用的計算方式,可設置為:查表(CRC_32_TABLE)、實時計算(CRC_32_RUNTIME)、硬體(CRC_32_HARDWARE)。FC7300 的硬體 CRC 功能支持 32 位,在選擇硬體 CRC 的時候,還需要在 Crc32 Hardware Instance 設置使用哪個 CRC 硬體:CRC_HW_INSTANCE_0 或者 CRC_HW_INSTANCE_1。
- Crc32P4Mode: CRC_32BIT_E2E_P4 算法使用的計算方式,可設置為:查表(CRC_32P4_TABLE)、實時計算(CRC_32P4_RUNTIME)、硬體(CRC_32P4_HARDWARE)。FC7300 的硬體 CRC 功能支持 32 位,在選擇硬體 CRC 的時候,還需要在 Crc32P4 Hardware Instance 設置使用哪個 CRC 硬體:CRC_HW_INSTANCE_0 或者 CRC_HW_INSTANCE_1。
- Crc64Mode: CRC_64BIT_ECMA 算法使用的計算方式,可設置為:查表(CRC_64_TABLE)、實時計算(CRC_64_RUNTIME)、硬體(CRC_64_HARDWARE)。FC7300 的硬體 CRC 功能不支持 64 位,所以只能選擇查表和實時計算。
- Crc Instance0 PartitionRef 和 Crc Instance1 PartitionRef: 如果上面的算法使用了硬體計算,那麼就需要設置相應的 CRC 硬體的 Ecuc 分區鏈接,這個鏈接可以在 Crc Ecuc Partition Ref 頁簽下設置。
4.2 Crc Channels Configuration
此頁簽下可以添加 CRC 通道。

▲ 圖 4.2
雙擊 Index 下的數字,可以對該通道進行設置。

▲ 圖 4.3
- Protocol Type : 選擇 CRC 的算法,包括:CRC_PROTOCOL_8BIT_SAE_J1850、CRC_PROTOCOL_8BIT_H2F、CRC_PROTOCOL_16BIT_CCITT_FALSE、CRC_PROTOCOL_16BIT_ARC、CRC_PROTOCOL_32BIT_ETHERNET、CRC_PROTOCOL_32BIT_E2E_P4、CRC_PROTOCOL_64BIT_ECMA。
- Logic Channel Name : 定義當前通道的名稱。
- Calculation Type : 選擇計算方式,包括:CRC_TABLE_CALCULATION、CRC_HARDWARE_CALCULATION、CRC_RUNTIME_CALCULATION。
- Partition Ref Of Channel : 選擇 Ecuc 分區。
如果 Calculation Type 選擇了硬體的計算方式,那麼需要在 CRC Hardware Config 欄下面設置 Hareware Instance 。
4.3 Crc Ecuc Partition Ref
此頁簽下可以添加 CRC Ecuc 分區的鏈接。

▲ 圖 4.3.1
4.4 CRC 模塊接口函數
在 AutoSar 規範中 CRC 模塊的 API 有:Crc_SetChannelCalculate、Mcu_InitClock、Mcu_DistributePllClock、Mcu_GetPllStatus、Mcu_GetResetReason、Mcu_SetMode 等函數。
Crc_GetVersionInfo :獲取版本號
Crc_CalculateCRC8 :CRC8_SAE_J1850
Crc_CalculateCRC8H2F :CRC8_H2F
Crc_CalculateCRC16 :CRC16_CCITT_FALSE
Crc_CalculateCRC16ARC :CRC16_ARC
Crc_CalculateCRC32 :CRC32_ETHERNET
Crc_CalculateCRC32P4 :CRC32_E2E_P4
Crc_CalculateCRC64 :CRC64_ECMA
Crc_SetChannelCalculate :設置 CRC 通道,如果設置了硬體計算方式,則在這個函數裡會初始化 CRC 硬體。所以在使用 CRC 的各種校驗之前,要先調用一次這個函數。
五、總結
本文介紹了有關 CRC 模塊的配置並進行了模塊講解,如果您對這個模塊的配置有疑問,請聯繫我們。
六、參考文獻
(1) AUTOSAR_SWS_CRCLibrary.pdf
(2) FC7300 Reference Manual V0.3.pdf
如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com 作者:五月小姐姐
更多資訊,請掃碼關注我們!

評論