1. Software Components

The foxBMS embedded software is made out of the following components:

  • mcu-common

  • mcu-freertos

  • mcu-hal

  • mcu-primary

  • mcu-secondary

1.1. mcu-common

The mcu-common directory contains drivers that are common to MCU0 and MCU1. This means that any change made in the common directory affects both MCU0 and MCU1.

1.1.1. driver

The driver directory contains a foxBMS specific abstraction layer for the hardware.

Element

Description

adc

Driver for analog to digital converter, measurement of lithium backup battery voltage

can

Driver to receive/transmit CAN message

chksum

Checksum algorithms for modulo 32-bit addition and CRC32

dma

Configuration for Direct Memory Access (e.g. used for SPI Communication)

io

Driver and interfaces for I/O ports (control of output pins and read of input pins)

mcu

Driver for the interlock

rcc

Configuration of the prescaler for the MCU clock system

rtc

Real time clock driver, Control and Access of Backup SRAM Registers

spi

Driver for communication via Serial Peripheral Interface (SPI bus)

uart

Driver for serial communication (UART, RS232 , RS485)

vic

Interrupt configuration

watchdog

Driver for the watchdog timer

1.1.2. engine

The engine directory contains all the core functions of the BMS.

Element

Description

database

Implementation of the asynchronous data exchange

1.1.3. module

The module directory contains all the software modules needed by the BMS.

Element

Description

cansignal

Definition of CAN messages and signals

hwinfo

Functions to return information about the hardware (e.g., cpu temperature)

interlock

Driver for the interlock

led

Functions for using the LEDs

ltc

Driver for battery cell monitoring IC

meas

Uses ltc module to perform measurements

1.1.4. util

The util directory contains additional functions.

Element

Description

foxmath

Implementation of a math library

misc

miscellaneous functions (e.g., functions to reverse a string

1.2. mcu-freertos

The mcu-freertos directory contains the operating system software (FreeRTOS).

Element

Description

Source

FreeRTOS

1.3. mcu-hal

The mcu-hal directory contains the Hardware Abstraction Layer (HAL). It is used by the system but is provided by the MCU manufacturer, in this case ST-Microelectronics. It is used by foxBMS but not part of foxBMS.

Element

Description

CMSIS

Interface and configuration of CMSIS

STM32F4xx_HAL_Driver

STM32F4xx family Hardware Abstraction Layer drivers

1.4. mcu-primary

The mcu-primary directory contains the software specific to MCU0.

1.4.1. application

The application directory contains the user applications.

Element

Description

algo

Task for integration various algorithms

bal

Driver for balancing

bms

Decision are taken here by the BMS (e.g., open contactors in case of a problem)

com

Serial port communication layer (for debug purposes)

config

Contains the configuration for the user applications (e.g., task configuration)

sox

Coulomb-counter (current integrator) and State-of-Function calculator

task

User specific cyclic tasks (10ms and 100ms)

Application tasks should be used to call user-defined functions.

1.4.2. driver

The driver directory contains a foxBMS specific abstraction layer for the hardware.

Element

Description

config

Configuration of the drivers (from mcu-common and primary specfific)

sdram

Drivers for the external SDRAM

timer

Drivers for the internal timers

1.4.3. engine

The engine directory contains all the core functions of the BMS.

Element

Description

config

Contains the configuration of engine components (e.g., task configuration)

diag

With this software module, other modules can report problems

nvramhandler

Handler for the non volatile memories

sys

System state machine, starts all other state machines

task

Cyclic engine tasks (1, 10 and 100ms) that call system related functions

1.4.4. general

The general directory contains the main function and configuration files.

Element

Description

main

Initialization of hardware modules, of interrupts and of the operating system

config

Contains the configuration for the system initialization: configuration and interface functions to HAL and FreeRTOS, global definitions, interrupt configurations and startup code

includes

Contains the standard types

version

Sets the version number

1.4.5. module

The module directory contains all the software modules needed by the BMS.

Element

Description

config

Contains the configuration for the software modules

contactor

Driver to open/close contactors and read contactor feedback

isoguard

Driver for monitoring galvanic isolation in the system

nvram

Non-volatile Memory: Eeprom and button cell buffered SRAM (BKP_SRAM)

1.4.6. os

The os directory contains configurations for the operating system FreeRTOS.

Element

Description

os

Interface to FreeRTOS (e.g., wrapper functions of cyclic application and engine tasks)

1.5. mcu-secondary

Contains the software specific to MCU1. These are the same elements as mcu-primary, adapted for MCU1.