NXP HVBMS Freemaster 驅動安裝簡介

關鍵字 :NXPS32K3S32K344S32K358LPUARTFreemasterHVBMS400V800VCMUBJB

一、簡介

        目前在支持客戶搭建 NXP HVBMS 環境的過程中,客戶有時會遇到“Freemaster 無法檢索到正確的埠並顯示實時數據”的問題。所以這裡將簡單介紹一下 Freemaster 驅動安裝過程中一些關鍵的點。
 


二、安裝流程

        用戶可以先通過 Automotive Software Package Manager | NXP Semiconductors 鏈接下載對應的安裝捆綁包(S32K344 或 S32K358)。


        安裝對應安裝順序將 S32K3 以及 BMS 的 SDK 安裝完畢之後,用戶需要進入 “S32K3_S32_FreeMaster_1_2_1_RTM”將 SDK “com.nxp.s32ds.s32k3.sdk.freemaster.v_3.0.repository_1.0.0.202308041202.zip ”通過 S32DS 的“Help --> Install New Software”安裝。這樣可以保證“FREEMASTER_S32K344_3.0.0_PATH ”路徑建立起來,以便後續引用。

        緊接著,需要便可以將 SDK 安裝完畢之後的源文件以及頭文件(位於..\S32DS.3.5\S32DS\software\FreeMASTER_S32K3_v3.0\src)鏈接到工程中,並且將 template 文件夾中的 Freemaster 配置頭文件複製到工程中。
 

        之後就是在工程屬性設置中將“src/common”、“src/drivers/dreg/S32K”、“src/platforms/gen32le”以及“freemaster_cfg.h 所在到的文件夾”全部添加進 include 路徑:
 

        上述步驟完成後就是調整 main.c 中的內容,首先確保 "freemaster.h" 等文件有被 include。
/* Including FreeMASTER Driver */
#include "freemaster.h"
#include "freemaster_cfg.h"
#include "freemaster_s32k3xx_lpuart.h"​

        這裡需要結合 S32K3 具體的資源進行調整,舉個例子,如果我使用的是 LPUART0:

        那麼在 main.c 中需要確認基地址是否是對應實例的基地址:

/* Initialize the UART driver */
Uart_Init(NULL_PTR);

/* Initialize FreeMASTER */
FMSTR_SerialSetBaseAddress((FMSTR_ADDR)IP_LPUART_0_BASE);
FMSTR_Init();​

        由於 S32K3 配置中斷,將 “freemaster_s32k3xx_lpuart.h”中定義的 FMSTR_SerialIsr 添加至 LPUART interrupt handler 中:
/**************************************************************************//*!
*
* @brief Process FreeMASTER serial interrupt (call this function from SCI ISR)
*
******************************************************************************/

void FMSTR_SerialIsr()
{
/* process incoming or just transmitted byte */
#if (FMSTR_LONG_INTR) || (FMSTR_SHORT_INTR)
FMSTR_ProcessSerial();
#endif
}

#else /* !(FMSTR_DISABLE) */

/* Empty API functions when FMSTR_DISABLE is set */
void FMSTR_SerialSetBaseAddress(FMSTR_ADDR base)
{
FMSTR_UNUSED(base);
}

void FMSTR_SerialIsr()
{
}

#endif /* !(FMSTR_DISABLE) */​
 

        接著在“freemaster_cfg.h”中需要啟用中斷。
//! Select interrupt or poll-driven serial communication
#define FMSTR_LONG_INTR 0 // Complete message processing in interrupt
#define FMSTR_SHORT_INTR 1 // Queuing done in interrupt
#define FMSTR_POLL_DRIVEN 0 // No interrupt needed, polling only​


        最後在 main loop 中調用 FMSTR_Poll(); 即可。

/* FreeMaster Poll state  keep can comm */
case FREEMASTER_COM:
FMSTR_Poll();
break;


三、參考文檔

[1] FreeMASTER_1.2.1_RTM_S32K3_Release_Notes.pdf
[2] FreeMASTER_UG.pdf
[3] BMS_SWInstalationGuide_Bring-up_2024.01.pdf

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

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

評論