foxBMS  1.6.0
The foxBMS Battery Management System API Documentation
mxm_afe.c File Reference

AFE driver implementation. More...

#include "afe.h"
#include "mxm_17841b.h"
#include "mxm_1785x.h"
#include "mxm_battery_management.h"
#include "os.h"
#include <stdbool.h>
#include <stdint.h>
Include dependency graph for mxm_afe.c:

Go to the source code of this file.

Functions

static void MXM_Tick (void)
 Tick function. More...
 
static void MXM_SetStateStructDefaultValues (void)
 Initialize the state structs. More...
 
STD_RETURN_TYPE_e AFE_TriggerIc (void)
 
STD_RETURN_TYPE_e AFE_Initialize (void)
 
STD_RETURN_TYPE_e AFE_StartMeasurement (void)
 Makes the initialization request to the AFE state machine. More...
 
bool AFE_IsFirstMeasurementCycleFinished (void)
 Checks if the first AFE measurement cycle was made. More...
 
STD_RETURN_TYPE_e AFE_RequestIoWrite (uint8_t string)
 Makes the request to the AFE state machine to write to the IO port-expander. More...
 
STD_RETURN_TYPE_e AFE_RequestIoRead (uint8_t string)
 Makes the request to the AFE state machine to read from the IO port-expander. More...
 
STD_RETURN_TYPE_e AFE_RequestTemperatureRead (uint8_t string)
 Makes the request to the AFE state machine to read from the external temperature sensor on slaves. More...
 
STD_RETURN_TYPE_e AFE_RequestBalancingFeedbackRead (uint8_t string)
 Makes the request to the AFE state machine to read balancing feedback from the slaves. More...
 
STD_RETURN_TYPE_e AFE_RequestEepromRead (uint8_t string)
 Makes the request to the AFE state machine to read from the external EEPROM on slaves. More...
 
STD_RETURN_TYPE_e AFE_RequestEepromWrite (uint8_t string)
 Makes the request to the AFE state machine to write to the external EEPROM on slaves. More...
 
STD_RETURN_TYPE_e AFE_RequestOpenWireCheck (uint8_t string)
 Makes the request to the AFE state machine to perform open-wire check. More...
 

Variables

static MXM_41B_INSTANCE_s mxm_41bState
 
static MXM_5X_INSTANCE_s mxm_5xState
 
static DATA_BLOCK_CELL_VOLTAGE_s mxm_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}
 Local cell voltage data block. More...
 
static DATA_BLOCK_CELL_TEMPERATURE_s mxm_tableCellTemperatures
 Local cell temperature data block. More...
 
static DATA_BLOCK_BALANCING_CONTROL_s mxm_tableBalancingControl = {.header.uniqueId = DATA_BLOCK_ID_BALANCING_CONTROL}
 Balancing control. More...
 
static DATA_BLOCK_OPEN_WIRE_s mxm_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}
 Local data structure for openWire results. More...
 
static MXM_BALANCING_STATE_s mxm_balancingState
 
static MXM_MONITORING_INSTANCE_s mxm_state
 

Detailed Description

AFE driver implementation.

SPDX-License-Identifier: BSD-3-Clause

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

We kindly request you to use one or more of the following phrases to refer to foxBMS in your hardware, software, documentation or advertising materials:

  • ″This product uses parts of foxBMS®″
  • ″This product includes parts of foxBMS®″
  • ″This product is derived from foxBMS®″
Author
foxBMS Team
Date
2020-06-16 (date of creation)
Updated
2023-10-12 (date of last update)
Version
v1.6.0
Prefix
AFE

Definition in file mxm_afe.c.

Function Documentation

◆ AFE_Initialize()

STD_RETURN_TYPE_e AFE_Initialize ( void  )

initializer, this function is called in order to initialize the AFE

Definition at line 202 of file mxm_afe.c.

Here is the call graph for this function:

◆ AFE_IsFirstMeasurementCycleFinished()

bool AFE_IsFirstMeasurementCycleFinished ( void  )

Checks if the first AFE measurement cycle was made.

this function returns whether the first measurement cycle has finished

Returns
true is the first measurement cycle was made, false otherwise

Definition at line 221 of file mxm_afe.c.

Here is the call graph for this function:

◆ AFE_RequestBalancingFeedbackRead()

STD_RETURN_TYPE_e AFE_RequestBalancingFeedbackRead ( uint8_t  string)

Makes the request to the AFE state machine to read balancing feedback from the slaves.

Parameters
stringstring addressed by the request

Definition at line 243 of file mxm_afe.c.

◆ AFE_RequestEepromRead()

STD_RETURN_TYPE_e AFE_RequestEepromRead ( uint8_t  string)

Makes the request to the AFE state machine to read from the external EEPROM on slaves.

Parameters
stringstring addressed by the request

Definition at line 248 of file mxm_afe.c.

◆ AFE_RequestEepromWrite()

STD_RETURN_TYPE_e AFE_RequestEepromWrite ( uint8_t  string)

Makes the request to the AFE state machine to write to the external EEPROM on slaves.

Parameters
stringstring addressed by the request

Definition at line 253 of file mxm_afe.c.

◆ AFE_RequestIoRead()

STD_RETURN_TYPE_e AFE_RequestIoRead ( uint8_t  string)

Makes the request to the AFE state machine to read from the IO port-expander.

Parameters
stringstring addressed by the request

Definition at line 233 of file mxm_afe.c.

◆ AFE_RequestIoWrite()

STD_RETURN_TYPE_e AFE_RequestIoWrite ( uint8_t  string)

Makes the request to the AFE state machine to write to the IO port-expander.

Parameters
stringstring addressed by the request

Definition at line 228 of file mxm_afe.c.

◆ AFE_RequestOpenWireCheck()

STD_RETURN_TYPE_e AFE_RequestOpenWireCheck ( uint8_t  string)

Makes the request to the AFE state machine to perform open-wire check.

Parameters
stringstring addressed by the request

Definition at line 258 of file mxm_afe.c.

◆ AFE_RequestTemperatureRead()

STD_RETURN_TYPE_e AFE_RequestTemperatureRead ( uint8_t  string)

Makes the request to the AFE state machine to read from the external temperature sensor on slaves.

Parameters
stringstring addressed by the request

Definition at line 238 of file mxm_afe.c.

◆ AFE_StartMeasurement()

STD_RETURN_TYPE_e AFE_StartMeasurement ( void  )

Makes the initialization request to the AFE state machine.

Returns
true or false

Definition at line 210 of file mxm_afe.c.

Here is the call graph for this function:

◆ AFE_TriggerIc()

STD_RETURN_TYPE_e AFE_TriggerIc ( void  )

tick function, this function is called to advance the state machine

Definition at line 178 of file mxm_afe.c.

Here is the call graph for this function:

◆ MXM_SetStateStructDefaultValues()

static void MXM_SetStateStructDefaultValues ( void  )
static

Initialize the state structs.

This function sets default values to the members of the state structs. It can be used to reset the driver to a default value.

Definition at line 171 of file mxm_afe.c.

Here is the call graph for this function:

◆ MXM_Tick()

static void MXM_Tick ( void  )
static

Tick function.

This function is the central entry-point for this driver. It calls the state-machines via the functions MXM_StateMachine(), MXM_5XStateMachine() and MXM_41BStateMachine().

The state-machines are called in such a way that the main blocking point is the SPI interface. (That means the order is optimized so that every cycle a SPI command should be available for sending or receiving as this is the limiting resource.)

Definition at line 152 of file mxm_afe.c.

Here is the call graph for this function:

Variable Documentation

◆ mxm_41bState

MXM_41B_INSTANCE_s mxm_41bState
static

state variable for the MAX17841B driver

Definition at line 71 of file mxm_afe.c.

◆ mxm_5xState

MXM_5X_INSTANCE_s mxm_5xState
static

state variable for the Battery Management protocol driver

Definition at line 75 of file mxm_afe.c.

◆ mxm_balancingState

MXM_BALANCING_STATE_s mxm_balancingState
static
Initial value:
= {
.pBalancingControl_table = &mxm_tableBalancingControl,
}
static DATA_BLOCK_BALANCING_CONTROL_s mxm_tableBalancingControl
Balancing control.
Definition: mxm_afe.c:100

balancing state variable

Definition at line 106 of file mxm_afe.c.

◆ mxm_state

MXM_MONITORING_INSTANCE_s mxm_state
static
Initial value:
= {
.pBalancingState = &mxm_balancingState,
.pInstance41B = &mxm_41bState,
.pInstance5X = &mxm_5xState,
.pCellVoltages_table = &mxm_tableCellVoltages,
.pCellTemperatures_table = &mxm_tableCellTemperatures,
.pOpenWire_table = &mxm_tableOpenWire,
.selfCheck.crc = STD_NOT_OK,
.selfCheck.conv = STD_NOT_OK,
.selfCheck.firstSetBit = STD_NOT_OK,
.selfCheck.extractValueFromRegister = STD_NOT_OK,
.selfCheck.parseVoltageReadall = STD_NOT_OK,
.selfCheck.addressSpaceChecker = STD_NOT_OK,
}
@ STD_NOT_OK
Definition: fstd_types.h:84
static DATA_BLOCK_CELL_VOLTAGE_s mxm_tableCellVoltages
Local cell voltage data block.
Definition: mxm_afe.c:87
static MXM_5X_INSTANCE_s mxm_5xState
Definition: mxm_afe.c:75
static MXM_41B_INSTANCE_s mxm_41bState
Definition: mxm_afe.c:71
static MXM_BALANCING_STATE_s mxm_balancingState
Definition: mxm_afe.c:106
static DATA_BLOCK_CELL_TEMPERATURE_s mxm_tableCellTemperatures
Local cell temperature data block.
Definition: mxm_afe.c:93
static DATA_BLOCK_OPEN_WIRE_s mxm_tableOpenWire
Local data structure for openWire results.
Definition: mxm_afe.c:103

state variable for the Maxim monitoring driver

Definition at line 111 of file mxm_afe.c.

◆ mxm_tableBalancingControl

DATA_BLOCK_BALANCING_CONTROL_s mxm_tableBalancingControl = {.header.uniqueId = DATA_BLOCK_ID_BALANCING_CONTROL}
static

Balancing control.

This variable stores information about which cells need balancing

Definition at line 100 of file mxm_afe.c.

◆ mxm_tableCellTemperatures

DATA_BLOCK_CELL_TEMPERATURE_s mxm_tableCellTemperatures
static
Initial value:
= {
@ DATA_BLOCK_ID_CELL_TEMPERATURE_BASE
Definition: database_cfg.h:87

Local cell temperature data block.

This local instance stores the measured cell temperatures.

Definition at line 93 of file mxm_afe.c.

◆ mxm_tableCellVoltages

DATA_BLOCK_CELL_VOLTAGE_s mxm_tableCellVoltages = {.header.uniqueId = DATA_BLOCK_ID_CELL_VOLTAGE_BASE}
static

Local cell voltage data block.

This local instance stores the measured cell voltages. In contrast to MXM_MONITORING_INSTANCE_s::localVoltages, the layout of this structure changes with the defined battery-system as it is described by the database_cfg.h. Mapping the values from MXM_MONITORING_INSTANCE_s::localVoltages to mxm_tableCellVoltages and copying these entries into the database is handled by MXM_ParseVoltagesIntoDB().

Definition at line 87 of file mxm_afe.c.

◆ mxm_tableOpenWire

DATA_BLOCK_OPEN_WIRE_s mxm_tableOpenWire = {.header.uniqueId = DATA_BLOCK_ID_OPEN_WIRE_BASE}
static

Local data structure for openWire results.

Definition at line 103 of file mxm_afe.c.