Skip to content

Commit

Permalink
BMS Quintuna Board Bring Up (#1390)
Browse files Browse the repository at this point in the history
### Changelist 
<!-- Give a list of the changes covered in this PR. This will help both
you and the reviewer keep this PR within scope. -->

### Testing Done
<!-- Outline the testing that was done to demonstrate the changes are
solid. This could be unit tests, integration tests, testing on the car,
etc. Include relevant code snippets, screenshots, etc as needed. -->

### Resolved Tickets
<!-- Link any tickets that this PR resolves. -->

---------

Co-authored-by: Edwin <[email protected]>
Co-authored-by: DJ90864 <[email protected]>
Co-authored-by: Dikshit Jain <[email protected]>
  • Loading branch information
4 people authored Jan 11, 2025
1 parent 9c2cea6 commit 695d1ab
Show file tree
Hide file tree
Showing 33 changed files with 5,316 additions and 0 deletions.
9 changes: 9 additions & 0 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,15 @@
"command": "build",
"targets": ["quadruna_VC.hex", "can_bus_load_quadruna"],
},
{
"label": "Build Embedded: BMS (Quintuna)",
"group": "build",
"type": "cmake",
"command": "build",
"targets": [
"quintuna_BMS.hex", "can_bus_load_quadruna"
]
},
{
"label": "Build Embedded: CRIT (Quintuna)",
"group": "build",
Expand Down
116 changes: 116 additions & 0 deletions firmware/quintuna/BMS/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
message("")
message("⚙️ Configuring [BMS] (Quintuna)")
set(ARM_CORE "cm7")
set(IOC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src/cubemx/BMS.ioc")
set(LINKER_SCRIPT "${LINKER_DIR}/stm32h733vgtx/stm32h733vgtx_app.ld")

file(GLOB_RECURSE SYSTEM_SRCS
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/cubemx/Src/*.c"
)
set(SYSTEM_INCLUDE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/src"
)

file(GLOB_RECURSE APP_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/src/app/*.cpp")
list(APPEND APP_SRCS
""
)
set(APP_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src/app" "${SHARED_APP_INCLUDE_DIR_CPP}")

file(GLOB_RECURSE IO_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/src/io/*.cpp")
list(APPEND IO_SRCS
""
)
set(IO_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src/io" "${SHARED_IO_INCLUDE_DIR_CPP}")

file(GLOB_RECURSE HW_SRCS
"${CMAKE_CURRENT_SOURCE_DIR}/src/hw/*.cpp"
)
list(APPEND HW_SRCS
""
)
set(HW_INCLUDE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/src/hw"
"${SHARED_HW_INCLUDE_DIR_CPP}"
)

if ("${TARGET}" STREQUAL "binary")
set(SRCS ${APP_SRCS} ${IO_SRCS} ${HW_SRCS} ${TASKS_SRCS} ${SYSTEM_SRCS})
set(INCLUDE_DIRS ${APP_INCLUDE_DIRS} ${IO_INCLUDE_DIRS} ${HW_INCLUDE_DIRS} ${SYSTEM_INCLUDE_DIRS})
embedded_binary("quintuna_BMS_app" "${SRCS}" "${INCLUDE_DIRS}" "${LINKER_SCRIPT}" "${ARM_CORE}")

# Bootloader files.
file(GLOB_RECURSE BOOT_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/boot/*.c")
set(BOOT_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/boot" "${CMAKE_CURRENT_SOURCE_DIR}/boot/cubemx/Inc")

# Build bootloader.
stm32h7_boot_binary(
"quintuna_BMS_boot"
"${BOOT_SRCS}"
"${BOOT_INCLUDE_DIRS}"
"quintuna_BMS"
"${CMAKE_CURRENT_SOURCE_DIR}/boot/cubemx/Src/syscalls.c"
"${CMAKE_CURRENT_SOURCE_DIR}/boot/cubemx/BMS_boot.ioc"
)

set(IOC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src/cubemx/BMS.ioc")
generate_stm32cube_code("BMS" "${IOC_PATH}")
set(STM32_HAL_SRCS
"stm32h7xx_hal_adc_ex.c"
"stm32h7xx_hal_adc.c"
"stm32h7xx_hal_cortex.c"
"stm32h7xx_hal_dma_ex.c"
"stm32h7xx_hal_dma.c"
"stm32h7xx_hal_exti.c"
"stm32h7xx_hal_fdcan.c"
"stm32h7xx_hal_gpio.c"
"stm32h7xx_hal_iwdg.c"
"stm32h7xx_hal_pwr_ex.c"
"stm32h7xx_hal_rcc_ex.c"
"stm32h7xx_hal_rcc.c"
"stm32h7xx_hal_tim_ex.c"
"stm32h7xx_hal_tim.c"
"stm32h7xx_hal_uart_ex.c"
"stm32h7xx_hal_uart.c"
"stm32h7xx_ll_sdmmc.c"
"stm32h7xx_hal_sd_ex.c"
"stm32h7xx_hal_sd.c"
"stm32h7xx_hal.c"
"stm32h7xx_hal_i2c.c"
"stm32h7xx_hal_i2c_ex.c"
)
stm32h733xx_cube_library(
"quintuna_BMS_stm32cube"
"${CMAKE_CURRENT_SOURCE_DIR}/src/cubemx/Inc"
"${STM32_HAL_SRCS}"
"${CMAKE_CURRENT_SOURCE_DIR}/src/cubemx/Src/syscalls.c"
"${MD5_LOCATION}"
FALSE
)

# JSONCAN
jsoncan_embedded_library(BMS quintuna "${CMAKE_CURRENT_BINARY_DIR}" ${ARM_CORE})

# CommitInfo
commit_info_library(
"quintuna_BMS_app.elf"
"quintuna_BMS_commit_info"
"${CMAKE_CURRENT_BINARY_DIR}/app"
"${ARM_CORE}"
)

target_link_libraries("quintuna_BMS_jsoncan" INTERFACE "quintuna_BMS_stm32cube")
target_link_libraries("quintuna_BMS_app.elf" PRIVATE "quintuna_BMS_stm32cube" "quintuna_BMS_jsoncan" "quintuna_BMS_commit_info" "debug_modules")
target_link_libraries("quintuna_BMS_boot.elf" PRIVATE "quintuna_BMS_commit_info")

embedded_image(
"quintuna_BMS"
"quintuna_BMS_app.hex"
"${CMAKE_CURRENT_BINARY_DIR}/quintuna_BMS_app.hex"
"quintuna_BMS_boot.hex"
"${CMAKE_CURRENT_BINARY_DIR}/quintuna_BMS_boot.hex"
)

elseif ("${TARGET}" STREQUAL "test")
endif ()
5 changes: 5 additions & 0 deletions firmware/quintuna/BMS/boot/bootloaderConfig.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#pragma once

#define START_UPDATE_ID 0
#define UPDATE_ACK_ID 0
#define STATUS_10HZ_ID 0
253 changes: 253 additions & 0 deletions firmware/quintuna/BMS/boot/cubemx/BMS_boot.ioc
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
#MicroXplorer Configuration settings - do not modify
CAD.formats=
CAD.pinconfig=
CAD.provider=
CORTEX_M7.CPU_DCache=Disabled
CORTEX_M7.CPU_ICache=Disabled
CORTEX_M7.IPParameters=CPU_ICache,CPU_DCache
CRC.IPParameters=InputDataFormat
CRC.InputDataFormat=CRC_INPUTDATA_FORMAT_WORDS
FDCAN1.AutoRetransmission=ENABLE
FDCAN1.CalculateBaudRateNominal=500000
FDCAN1.CalculateTimeBitNominal=2000
FDCAN1.CalculateTimeQuantumNominal=125.0
FDCAN1.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,AutoRetransmission,StdFiltersNbr,RxFifo1ElmtsNbr,TxFifoQueueElmtsNbr,NominalPrescaler,NominalTimeSeg1,NominalSyncJumpWidth,RxFifo0ElmtsNbr
FDCAN1.NominalPrescaler=6
FDCAN1.NominalSyncJumpWidth=4
FDCAN1.NominalTimeSeg1=13
FDCAN1.RxFifo0ElmtsNbr=1
FDCAN1.RxFifo1ElmtsNbr=0
FDCAN1.StdFiltersNbr=1
FDCAN1.TxFifoQueueElmtsNbr=1
FREERTOS.FootprintOK=true
FREERTOS.IPParameters=Tasks01,configUSE_NEWLIB_REENTRANT,FootprintOK
FREERTOS.Tasks01=interfaceTask,32,512,runInterfaceTask,Default,NULL,Static,interfaceTaskBuffer,interfaceTaskControlBlock;tickTask,24,512,runTickTask,Default,NULL,Static,tickTaskBuffer,tickTaskControlBlock;canTxTask,16,512,runCanTxTask,Default,NULL,Static,canTxTaskBuffer,canTxTaskControlBlock
FREERTOS.configUSE_NEWLIB_REENTRANT=1
File.Version=6
GPIO.groupedBy=
KeepUserPlacement=false
Mcu.CPN=STM32H733VGT6
Mcu.Family=STM32H7
Mcu.IP0=CORTEX_M7
Mcu.IP1=CRC
Mcu.IP2=FDCAN1
Mcu.IP3=FREERTOS
Mcu.IP4=NVIC
Mcu.IP5=RCC
Mcu.IP6=SYS
Mcu.IPNb=7
Mcu.Name=STM32H733VGTx
Mcu.Package=LQFP100
Mcu.Pin0=PC13
Mcu.Pin1=PH0-OSC_IN
Mcu.Pin10=PB8
Mcu.Pin11=PB9
Mcu.Pin12=VP_CRC_VS_CRC
Mcu.Pin13=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin14=VP_SYS_VS_tim6
Mcu.Pin2=PH1-OSC_OUT
Mcu.Pin3=PC2_C
Mcu.Pin4=PC3_C
Mcu.Pin5=PA4
Mcu.Pin6=PA5
Mcu.Pin7=PE7
Mcu.Pin8=PB12
Mcu.Pin9=PD9
Mcu.PinsNb=15
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32H733VGTx
MxCube.Version=6.9.2
MxDb.Version=DB.6.0.92
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
NVIC.FDCAN1_IT0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.FDCAN1_IT1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false\:false
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false
NVIC.SavedPendsvIrqHandlerGenerated=true
NVIC.SavedSvcallIrqHandlerGenerated=true
NVIC.SavedSystickIrqHandlerGenerated=true
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true\:false
NVIC.TIM6_DAC_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true
NVIC.TimeBase=TIM6_DAC_IRQn
NVIC.TimeBaseIP=TIM6
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
PA4.GPIOParameters=GPIO_PuPd,GPIO_Label
PA4.GPIO_Label=BSPD_TEST_EN
PA4.GPIO_PuPd=GPIO_NOPULL
PA4.Locked=true
PA4.Signal=GPIO_Output
PA5.GPIOParameters=GPIO_PuPd,GPIO_Label
PA5.GPIO_Label=nCHIMERA
PA5.GPIO_PuPd=GPIO_PULLUP
PA5.Locked=true
PA5.Signal=GPIO_Input
PB12.GPIOParameters=GPIO_PuPd,GPIO_Label
PB12.GPIO_Label=SPI_CS
PB12.GPIO_PuPd=GPIO_PULLDOWN
PB12.Locked=true
PB12.Signal=GPIO_Output
PB8.Locked=true
PB8.Mode=FDCAN_Activate
PB8.Signal=FDCAN1_RX
PB9.Locked=true
PB9.Mode=FDCAN_Activate
PB9.Signal=FDCAN1_TX
PC13.GPIOParameters=GPIO_PuPd,GPIO_Label
PC13.GPIO_Label=nBOOT_EN
PC13.GPIO_PuPd=GPIO_PULLUP
PC13.Locked=true
PC13.Signal=GPIO_Input
PC2_C.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label
PC2_C.GPIO_Label=AIR_P_EN
PC2_C.GPIO_PuPd=GPIO_NOPULL
PC2_C.Locked=true
PC2_C.PinState=GPIO_PIN_RESET
PC2_C.Signal=GPIO_Output
PC3_C.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label
PC3_C.GPIO_Label=PRE_CHARGE_END
PC3_C.GPIO_PuPd=GPIO_NOPULL
PC3_C.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PC3_C.Locked=true
PC3_C.Signal=GPIO_Output
PD9.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label
PD9.GPIO_Label=BMS_OK
PD9.GPIO_PuPd=GPIO_NOPULL
PD9.Locked=true
PD9.PinState=GPIO_PIN_SET
PD9.Signal=GPIO_Output
PE7.GPIOParameters=GPIO_PuPd,GPIO_Label
PE7.GPIO_Label=DEBUG_LED
PE7.GPIO_PuPd=GPIO_NOPULL
PE7.Locked=true
PE7.Signal=GPIO_Output
PH0-OSC_IN.Mode=HSE-External-Oscillator
PH0-OSC_IN.Signal=RCC_OSC_IN
PH1-OSC_OUT.Mode=HSE-External-Oscillator
PH1-OSC_OUT.Signal=RCC_OSC_OUT
PinOutPanel.RotationAngle=0
ProjectManager.AskForMigrate=true
ProjectManager.BackupPrevious=false
ProjectManager.CompilerOptimize=6
ProjectManager.ComputerToolchain=false
ProjectManager.CoupleFile=false
ProjectManager.CustomerFirmwarePackage=
ProjectManager.DefaultFWLocation=true
ProjectManager.DeletePrevious=true
ProjectManager.DeviceId=STM32H733VGTx
ProjectManager.FirmwarePackage=STM32Cube FW_H7 V1.11.1
ProjectManager.FreePins=false
ProjectManager.HalAssertFull=false
ProjectManager.HeapSize=0x00
ProjectManager.KeepUserCode=true
ProjectManager.LastFirmware=true
ProjectManager.LibraryCopy=1
ProjectManager.MainLocation=Core/Src
ProjectManager.NoMain=false
ProjectManager.PreviousToolchain=STM32CubeIDE
ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=BMS_boot.ioc
ProjectManager.ProjectName=BMS_boot
ProjectManager.ProjectStructure=
ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=STM32CubeIDE
ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_CRC_Init-CRC-false-HAL-true,4-MX_FDCAN1_Init-FDCAN1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
RCC.ADCFreq_Value=16125000
RCC.AHB12Freq_Value=48000000
RCC.AHB4Freq_Value=48000000
RCC.APB1Freq_Value=24000000
RCC.APB2Freq_Value=24000000
RCC.APB3Freq_Value=24000000
RCC.APB4Freq_Value=24000000
RCC.AXIClockFreq_Value=48000000
RCC.CECFreq_Value=32000
RCC.CKPERFreq_Value=64000000
RCC.CortexFreq_Value=96000000
RCC.CpuClockFreq_Value=96000000
RCC.D1CPRE=RCC_SYSCLK_DIV2
RCC.D1CPREFreq_Value=96000000
RCC.D1PPRE=RCC_APB3_DIV2
RCC.D2PPRE1=RCC_APB1_DIV2
RCC.D2PPRE2=RCC_APB2_DIV2
RCC.D3PPRE=RCC_APB4_DIV2
RCC.DFSDMACLkFreq_Value=48000000
RCC.DFSDMFreq_Value=24000000
RCC.DIVM1=1
RCC.DIVN1=24
RCC.DIVP1=1
RCC.DIVP1Freq_Value=192000000
RCC.DIVP2Freq_Value=16125000
RCC.DIVP3Freq_Value=16125000
RCC.DIVQ1=4
RCC.DIVQ1Freq_Value=48000000
RCC.DIVQ2Freq_Value=16125000
RCC.DIVQ3Freq_Value=16125000
RCC.DIVR1Freq_Value=96000000
RCC.DIVR2Freq_Value=16125000
RCC.DIVR3Freq_Value=16125000
RCC.FDCANFreq_Value=48000000
RCC.FMCFreq_Value=48000000
RCC.FamilyName=M
RCC.HCLK3ClockFreq_Value=48000000
RCC.HCLKFreq_Value=48000000
RCC.HPRE=RCC_HCLK_DIV2
RCC.HSE_VALUE=8000000
RCC.I2C123Freq_Value=24000000
RCC.I2C4Freq_Value=24000000
RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPRE,D1CPREFreq_Value,D1PPRE,D2PPRE1,D2PPRE2,D3PPRE,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVN1,DIVP1,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HPRE,HSE_VALUE,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLL3FRACN,PLLFRACN,PLLSourceVirtual,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value
RCC.LPTIM1Freq_Value=24000000
RCC.LPTIM2Freq_Value=24000000
RCC.LPTIM345Freq_Value=24000000
RCC.LPUART1Freq_Value=24000000
RCC.LTDCFreq_Value=16125000
RCC.MCO1PinFreq_Value=64000000
RCC.MCO2PinFreq_Value=192000000
RCC.PLL2FRACN=0
RCC.PLL3FRACN=0
RCC.PLLFRACN=0
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
RCC.QSPIFreq_Value=48000000
RCC.RNGFreq_Value=48000000
RCC.RTCFreq_Value=32000
RCC.SAI1Freq_Value=48000000
RCC.SAI4AFreq_Value=48000000
RCC.SAI4BFreq_Value=48000000
RCC.SDMMCFreq_Value=48000000
RCC.SPDIFRXFreq_Value=48000000
RCC.SPI123Freq_Value=48000000
RCC.SPI45Freq_Value=24000000
RCC.SPI6Freq_Value=24000000
RCC.SWPMI1Freq_Value=24000000
RCC.SYSCLKFreq_VALUE=192000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.Tim1OutputFreq_Value=48000000
RCC.Tim2OutputFreq_Value=48000000
RCC.TraceFreq_Value=64000000
RCC.USART16Freq_Value=24000000
RCC.USART234578Freq_Value=24000000
RCC.USBFreq_Value=48000000
RCC.VCO1OutputFreq_Value=192000000
RCC.VCO2OutputFreq_Value=32250000
RCC.VCO3OutputFreq_Value=32250000
RCC.VCOInput1Freq_Value=8000000
RCC.VCOInput2Freq_Value=250000
RCC.VCOInput3Freq_Value=250000
VP_CRC_VS_CRC.Mode=CRC_Activate
VP_CRC_VS_CRC.Signal=CRC_VS_CRC
VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
VP_SYS_VS_tim6.Mode=TIM6
VP_SYS_VS_tim6.Signal=SYS_VS_tim6
board=custom
rtos.0.ip=FREERTOS
1 change: 1 addition & 0 deletions firmware/quintuna/BMS/boot/cubemx/BMS_boot.ioc.md5
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
9a4a0a62090e5de58aec23391bcfd148
Loading

0 comments on commit 695d1ab

Please sign in to comment.