refactor: Improve OTA request handling in bootloader

- Device will now perform a soft reset only when VECIOT is received.
- Prevents TI from booting during BMS FOTA operation.
stable
Rakshita 2025-02-20 17:31:53 +05:30
parent d1f9c1eeff
commit aea1dda731
5 changed files with 27 additions and 18 deletions

View File

@ -380,8 +380,8 @@
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=mspm0g3507.lds"/> <listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=mspm0g3507.lds"/>
<listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=libc.a"/> <listOptionValue builtIn="false" value="RUNTIME_SUPPORT_LIBRARY=libc.a"/>
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=6.1.3"/> <listOptionValue builtIn="false" value="CCS_MBS_VERSION=6.1.3"/>
<listOptionValue builtIn="false" value="PRODUCTS=MSPM0-SDK:2.3.0.07;sysconfig:1.18.0;"/> <listOptionValue builtIn="false" value="PRODUCTS=MSPM0-SDK:2.3.0.07;sysconfig:1.21.0;"/>
<listOptionValue builtIn="false" value="PRODUCT_MACRO_IMPORTS={&quot;sysconfig&quot;:[&quot;${SYSCONFIG_TOOL_INCLUDE_PATH}&quot;,&quot;${SYSCONFIG_TOOL_LIBRARY_PATH}&quot;,&quot;${SYSCONFIG_TOOL_LIBRARIES}&quot;,&quot;${SYSCONFIG_TOOL_SYMBOLS}&quot;,&quot;${SYSCONFIG_TOOL_SYSCONFIG_MANIFEST}&quot;],&quot;MSPM0-SDK&quot;:[&quot;${COM_TI_MSPM0_SDK_INCLUDE_PATH}&quot;,&quot;${COM_TI_MSPM0_SDK_LIBRARY_PATH}&quot;,&quot;${COM_TI_MSPM0_SDK_LIBRARIES}&quot;,&quot;${COM_TI_MSPM0_SDK_SYMBOLS}&quot;,&quot;${COM_TI_MSPM0_SDK_SYSCONFIG_MANIFEST}&quot;]}"/> <listOptionValue builtIn="false" value="PRODUCT_MACRO_IMPORTS={&quot;MSPM0-SDK&quot;:[&quot;${COM_TI_MSPM0_SDK_INCLUDE_PATH}&quot;,&quot;${COM_TI_MSPM0_SDK_LIBRARY_PATH}&quot;,&quot;${COM_TI_MSPM0_SDK_LIBRARIES}&quot;,&quot;${COM_TI_MSPM0_SDK_SYMBOLS}&quot;,&quot;${COM_TI_MSPM0_SDK_SYSCONFIG_MANIFEST}&quot;],&quot;sysconfig&quot;:[&quot;${SYSCONFIG_TOOL_INCLUDE_PATH}&quot;,&quot;${SYSCONFIG_TOOL_LIBRARY_PATH}&quot;,&quot;${SYSCONFIG_TOOL_LIBRARIES}&quot;,&quot;${SYSCONFIG_TOOL_SYMBOLS}&quot;,&quot;${SYSCONFIG_TOOL_SYSCONFIG_MANIFEST}&quot;]}"/>
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/> <listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
</option> </option>
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.416761197" name="Compiler version" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="GNU_9.2.1:Linaro" valueType="string"/> <option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.416761197" name="Compiler version" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="GNU_9.2.1:Linaro" valueType="string"/>
@ -400,8 +400,8 @@
</option> </option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.INCLUDE_PATH.1406977247" name="Include paths (-I)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.INCLUDE_PATH" valueType="includePath"> <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.INCLUDE_PATH.1406977247" name="Include paths (-I)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.INCLUDE_PATH" valueType="includePath">
<listOptionValue builtIn="false" value="${COM_TI_MSPM0_SDK_INCLUDE_PATH}"/> <listOptionValue builtIn="false" value="${COM_TI_MSPM0_SDK_INCLUDE_PATH}"/>
<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/ivec_ECU/ivec_ecu_nfc/inc}"/>
<listOptionValue builtIn="false" value="${SYSCONFIG_TOOL_INCLUDE_PATH}"/> <listOptionValue builtIn="false" value="${SYSCONFIG_TOOL_INCLUDE_PATH}"/>
<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/ivec_ECU/ivec_ecu_nfc/inc}"/>
<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/Generated Codes}"/> <listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/Generated Codes}"/>
<listOptionValue builtIn="false" value="${PROJECT_ROOT}"/> <listOptionValue builtIn="false" value="${PROJECT_ROOT}"/>
<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/Application/Inc}"/> <listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/Application/Inc}"/>
@ -420,10 +420,10 @@
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/arm-none-eabi/include"/> <listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/arm-none-eabi/include"/>
<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/Core/Include}"/> <listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/Core/Include}"/>
<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/Core/Source}"/> <listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/Core/Source}"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mspm0g3507_mcal/ivec_BSW/ivec_bsw_common/inc}&quot;"/> <listOptionValue builtIn="false" value="${workspace_loc:/mspm0g3507_mcal/ivec_BSW/ivec_bsw_common/inc}"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mspm0g3507_mcal/ivec_BSW/ivec_bsw_nfc/inc}&quot;"/> <listOptionValue builtIn="false" value="${workspace_loc:/mspm0g3507_mcal/ivec_BSW/ivec_bsw_nfc/inc}"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mspm0g3507_mcal/ivec_ESDK/ivec_cmplx_gptimer/inc}&quot;"/> <listOptionValue builtIn="false" value="${workspace_loc:/mspm0g3507_mcal/ivec_ESDK/ivec_cmplx_gptimer/inc}"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mspm0g3507_mcal/ivec_ESDK/ivec_esdk_nfc_pn532/inc}&quot;"/> <listOptionValue builtIn="false" value="${workspace_loc:/mspm0g3507_mcal/ivec_ESDK/ivec_esdk_nfc_pn532/inc}"/>
</option> </option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.OPT_LEVEL.764173782" name="Optimization Level" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.OPT_LEVEL.OPT_FOR_DEBUG" valueType="enumerated"/> <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.OPT_LEVEL.764173782" name="Optimization Level" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.OPT_LEVEL.OPT_FOR_DEBUG" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.FUNCTION_SECTIONS.343631336" name="Place each function into its own section (-ffunction-sections)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.FUNCTION_SECTIONS" value="true" valueType="boolean"/> <option id="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.FUNCTION_SECTIONS.343631336" name="Place each function into its own section (-ffunction-sections)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_GNU_9.0.compilerID.FUNCTION_SECTIONS" value="true" valueType="boolean"/>

View File

@ -532,7 +532,7 @@ IVEC_McalCommonErr_e xMCAL_MCANTx(IVEC_McalCanHandle_s* pxCanHandle, uint32_t u3
uint32_t u32Bytes) uint32_t u32Bytes)
{ {
/* Ensure that the MCAN instance is CANFD0 */ /* Ensure that the MCAN instance is CANFD0 */
if((pxCanHandle->pMCAN != CANFD0) && (pxCanHandle->u16Speed == IVEC_MCAL_CAN_BR_500 || pxCanHandle->u16Speed == IVEC_MCAL_CAN_BR_250)) if(pxCanHandle->pMCAN != CANFD0)
{ {
return IVEC_MCAL_STATUS_UNSUPPORTED; return IVEC_MCAL_STATUS_UNSUPPORTED;
} }
@ -676,8 +676,9 @@ IVEC_McalCommonErr_e xMCAL_MCANGetErrorStatus(IVEC_McalCanHandle_s* pxCanHandle,
DL_MCAN_getErrCounters(CANFD0, &l_xCounter); DL_MCAN_getErrCounters(CANFD0, &l_xCounter);
/* Return the status based on various error conditions */ /* Return the status based on various error conditions */
return (
(g_xHeaderStat.busOffStatus)) ? commonMCAL_FAIL : commonMCAL_SUCCESS; return ( (g_xHeaderStat.lastErrCode == DL_MCAN_ERR_CODE_ACK_ERROR) || \
(g_xHeaderStat.busOffStatus) ) ? IVEC_MCAL_STATUS_ERROR : IVEC_MCAL_STATUS_SUCCESS;
} }

View File

@ -110,9 +110,9 @@ SYSCONFIG_WEAK void SYSCFG_DL_initPower(void)
DL_MCAN_reset(MCAN0_INST); DL_MCAN_reset(MCAN0_INST);
DL_GPIO_enablePower(GPIOA); DL_GPIO_enablePower(GPIOA);
DL_GPIO_enablePower(GPIOB); DL_GPIO_enablePower(GPIOB);
// #if UART_PIN_SELECTION == 1 // #if UART_PIN_SELECTION == 1
// DL_UART_Main_reset(UART2); // DL_UART_Main_reset(UART2);
// DL_UART_Main_enablePower(UART2); // DL_UART_Main_enablePower(UART2);

View File

@ -17,8 +17,8 @@
#include "ivec_rte.h" #include "ivec_rte.h"
// UART Handles // UART Handles
IVEC_EcuUartHandle_s g_xUartHandle; IVEC_EcuUartHandle_s g_xUartHandle = {0};
IVEC_EcuCANHandle_s g_xCanHandle; IVEC_EcuCANHandle_s g_xCanHandle = {0};
// Configuration Macros // Configuration Macros
#define rteCONFIG_BASIL_BATTERY_SMART_u8 1 #define rteCONFIG_BASIL_BATTERY_SMART_u8 1
@ -26,7 +26,7 @@ IVEC_EcuCANHandle_s g_xCanHandle;
#define rteCONFIG_MOTHER_BOARD_u8 3 #define rteCONFIG_MOTHER_BOARD_u8 3
// UART Configuration // UART Configuration
#define rteUART_PIN_SELECTION_u8 rteCONFIG_MOTHER_BOARD_u8 #define rteUART_PIN_SELECTION_u8 rteCONFIG_BASIL_u8
uint8_t g_pu8UartBuffer[ecuUART_MAX_PACKET_LENGTH_u8] = {0}; uint8_t g_pu8UartBuffer[ecuUART_MAX_PACKET_LENGTH_u8] = {0};
volatile uint32_t g_u32CanId = 0x1FFFFFFF; volatile uint32_t g_u32CanId = 0x1FFFFFFF;
@ -50,6 +50,7 @@ static uint8_t __gprv_U8Index = 0;
extern ExtU_socTouchDisplay_T socTouchDisplay_U; extern ExtU_socTouchDisplay_T socTouchDisplay_U;
extern ExtY_socTouchDisplay_T socTouchDisplay_Y; extern ExtY_socTouchDisplay_T socTouchDisplay_Y;
/** /**
* @brief Sets the state of the MCU temperature data pin (SDA) for TM1650. * @brief Sets the state of the MCU temperature data pin (SDA) for TM1650.
* *
@ -221,6 +222,10 @@ void vRTE_AppInit(void)
#endif #endif
vRTE_InitUartCanEcho(); vRTE_InitUartCanEcho();
// Uncomment for UART-to-CAN transmission, if required
// iECU_UartInitiateTransmit(&g_xUartHandle, 0x6, NULL, 0);
// xECU_WriteDataOverCAN(&g_xCanHandle, NULL , 0x6, 1, 0);
#if rteUART_PIN_SELECTION_u8 == 3 #if rteUART_PIN_SELECTION_u8 == 3
vRTE_NfcInit(); vRTE_NfcInit();
@ -459,6 +464,8 @@ void vRTE_ProcessUartData(void)
l_eRetCode= xECU_UartReadCANDataOverUART(&g_xUartHandle,g_pu8UartBuffer,&l_u32Id); l_eRetCode= xECU_UartReadCANDataOverUART(&g_xUartHandle,g_pu8UartBuffer,&l_u32Id);
l_u32Id &= 0x1fffffff; l_u32Id &= 0x1fffffff;
uint16_t l_u16Len = 0;
if(l_eRetCode > -1) if(l_eRetCode > -1)
{ {
if(l_eRetCode > 0 && l_u32Id == 0x00) if(l_eRetCode > 0 && l_u32Id == 0x00)
@ -545,8 +552,11 @@ void vRTE_ProcessCanData(void)
volatile uint8_t l_u8TxBurstMessages = 0; volatile uint8_t l_u8TxBurstMessages = 0;
while( xECU_CANGetData(&g_xCanHandle, &l_xCanBuff) == commonECU_SUCCESS ) while( xECU_CANGetData(&g_xCanHandle, &l_xCanBuff) == commonECU_SUCCESS )
{ {
if( (l_xCanBuff.u32UlId == 0x16) && (l_xCanBuff.u8Data[0] = 'V') && \ if( (l_xCanBuff.u32UlId == 0x16) && (l_xCanBuff.u8Data[0] = 'V') && \
(l_xCanBuff.u8Data[1] == 'E') && (l_xCanBuff.u8Data[2] == 'C')) (l_xCanBuff.u8Data[1] == 'E') && (l_xCanBuff.u8Data[2] == 'C') && \
(l_xCanBuff.u8Data[3] == 'I') && (l_xCanBuff.u8Data[4] == 'O') && \
(l_xCanBuff.u8Data[5] == 'T'))
{ {
vMCAL_softReset(); vMCAL_softReset();
} }

4
main.c
View File

@ -17,7 +17,6 @@
#include "string.h" #include "string.h"
#include "ivec_rte.h" #include "ivec_rte.h"
//extern McalUartHandle_s g_xUartHandle;
static void vApp_TimerConfig(void) static void vApp_TimerConfig(void)
{ {
@ -39,8 +38,7 @@ int main(void)
vApp_TimerConfig(); vApp_TimerConfig();
vRTE_AppInit(); vRTE_AppInit();
// Uncomment for UART-to-CAN transmission, if required
// vECU_InitiateUartToCanTransmit(&g_xUartHandle, 0x6, NULL, 0);
while(1) while(1)
{ {