基於 Flagchip FC7300 的 MCAL-CRC 校驗

關鍵字 :FlagchipFC7300MCAL-CRC 校驗

簡介

        本文將詳細介紹如何使用 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 General



▲ 圖 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 PartitionRefCrc 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   
作者:五月小姐姐

更多資訊,請掃碼關注我們!
 

  

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論