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="RUNTIME_SUPPORT_LIBRARY=libc.a"/>
<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="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="PRODUCTS=MSPM0-SDK:2.3.0.07;sysconfig:1.21.0;"/>
<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"/>
</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"/>
@ -400,8 +400,8 @@
</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">
<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="${workspace_loc:/${ProjName}/ivec_ECU/ivec_ecu_nfc/inc}"/>
<listOptionValue builtIn="false" value="${workspace_loc:/${ProjName}/Generated Codes}"/>
<listOptionValue builtIn="false" value="${PROJECT_ROOT}"/>
<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="${workspace_loc:/${ProjName}/Core/Include}"/>
<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="&quot;${workspace_loc:/mspm0g3507_mcal/ivec_BSW/ivec_bsw_nfc/inc}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/mspm0g3507_mcal/ivec_ESDK/ivec_cmplx_gptimer/inc}&quot;"/>
<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_BSW/ivec_bsw_common/inc}"/>
<listOptionValue builtIn="false" value="${workspace_loc:/mspm0g3507_mcal/ivec_BSW/ivec_bsw_nfc/inc}"/>
<listOptionValue builtIn="false" value="${workspace_loc:/mspm0g3507_mcal/ivec_ESDK/ivec_cmplx_gptimer/inc}"/>
<listOptionValue builtIn="false" value="${workspace_loc:/mspm0g3507_mcal/ivec_ESDK/ivec_esdk_nfc_pn532/inc}"/>
</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.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)
{
/* 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;
}
@ -676,8 +676,9 @@ IVEC_McalCommonErr_e xMCAL_MCANGetErrorStatus(IVEC_McalCanHandle_s* pxCanHandle,
DL_MCAN_getErrCounters(CANFD0, &l_xCounter);
/* 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_GPIO_enablePower(GPIOA);
DL_GPIO_enablePower(GPIOB);
// #if UART_PIN_SELECTION == 1
// DL_UART_Main_reset(UART2);
// DL_UART_Main_enablePower(UART2);

View File

@ -17,8 +17,8 @@
#include "ivec_rte.h"
// UART Handles
IVEC_EcuUartHandle_s g_xUartHandle;
IVEC_EcuCANHandle_s g_xCanHandle;
IVEC_EcuUartHandle_s g_xUartHandle = {0};
IVEC_EcuCANHandle_s g_xCanHandle = {0};
// Configuration Macros
#define rteCONFIG_BASIL_BATTERY_SMART_u8 1
@ -26,7 +26,7 @@ IVEC_EcuCANHandle_s g_xCanHandle;
#define rteCONFIG_MOTHER_BOARD_u8 3
// 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};
volatile uint32_t g_u32CanId = 0x1FFFFFFF;
@ -50,6 +50,7 @@ static uint8_t __gprv_U8Index = 0;
extern ExtU_socTouchDisplay_T socTouchDisplay_U;
extern ExtY_socTouchDisplay_T socTouchDisplay_Y;
/**
* @brief Sets the state of the MCU temperature data pin (SDA) for TM1650.
*
@ -221,6 +222,10 @@ void vRTE_AppInit(void)
#endif
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
vRTE_NfcInit();
@ -459,6 +464,8 @@ void vRTE_ProcessUartData(void)
l_eRetCode= xECU_UartReadCANDataOverUART(&g_xUartHandle,g_pu8UartBuffer,&l_u32Id);
l_u32Id &= 0x1fffffff;
uint16_t l_u16Len = 0;
if(l_eRetCode > -1)
{
if(l_eRetCode > 0 && l_u32Id == 0x00)
@ -545,8 +552,11 @@ void vRTE_ProcessCanData(void)
volatile uint8_t l_u8TxBurstMessages = 0;
while( xECU_CANGetData(&g_xCanHandle, &l_xCanBuff) == commonECU_SUCCESS )
{
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();
}

4
main.c
View File

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