HAL TAMP Overview

Introducing TAMP

group TAMP_Introduction

  • The tamper (TAMP) peripheral is designed to enhance security by detecting unauthorized access or tampering events. It monitors external tamper pins and internal events, such as backup register corruption, to trigger appropriate responses. The TAMP peripheral supports multiple tamper detection channels, each configurable for specific security needs. It integrates seamlessly with the backup domain, ensuring secure data retention during power failures. Additionally, the TAMP peripheral offers advanced features like timestamping tamper events and filtering noise to prevent false detections. This makes it an essential component for applications requiring robust security and data integrity.

Module and files

The following diagram illustrates the TAMP module and its associated files.

Module and files diagram

Component diagram

The following diagram illustrates the software components involved in the TAMP module. It shows the interactions between the user application, HAL drivers, low-level drivers, and the hardware components.


@startuml
!$ppp = "TAMP"
!use_ppp_ll = 1
!use_ppp_isr = 1
!$use_hal_service = 1
!$use_hal_rcc = 0
!$use_hal_dma = 0
!$hal_api_itf = "HAL " + $ppp + " API"
!$appli_itf = "User Callback"
!$ppp_name = "HAL_"+$ppp
!$ppp_ISR = $ppp+" ISR"
!$ll_ppp = "LL_"+$ppp
!$hal_dma_itf = "HAL_DMA_StartDirectXfer()\nHAL_DMA_Abort_IT\ntHAL_DMA_Abort()"
!$hal_rcc_itf = "\t\t\t\tGetClockFreq()\n\t\t\t\tHAL_RCC_"+$ppp+"_EnableClock()"
!$hal_ppp_itf = "DMA CallBacks"
!$hal_generic_itf = "HAL_GetTick()"
!$ll_ppp_itf = "LL " + $ppp +" API"
!$ppp_xIRQ = $ppp+"x_IRQ"
<style>
componentDiagram {
arrow {
FontSize 8
}
interface {
FontSize 8
}
}
</style>

title TAMP Software Component Diagram

Package "Application Layer" #DarkMagenta {
component [Appli]
interface "$appli_itf" as APPLI_Interface
[Appli] -r- APPLI_Interface
}
package "HAL" #DarkOrange {
[$ppp_name]
!if ($use_hal_dma == 1)
interface "$hal_ppp_itf" as HAL_PPP_Interface
[$ppp_name] -d- HAL_PPP_Interface
!endif
interface "$hal_api_itf" as HAL_PPP_APPLI_Interface
[$ppp_name] -u- HAL_PPP_APPLI_Interface
!if ($use_hal_service == 1)
  [HAL_SERVICE]
  interface "$hal_generic_itf" as HAL_Service_Interface
  [HAL_SERVICE] -r- HAL_Service_Interface
  [$ppp_name] -l-( HAL_Service_Interface
!endif
!if ($use_hal_dma == 1)
  [HAL_DMA]
  interface "$hal_dma_itf" as HAL_DMA_Interface
  [HAL_DMA] -u- HAL_DMA_Interface
  [HAL_DMA] -u-( HAL_PPP_Interface
  [$ppp_name] --( HAL_DMA_Interface
!endif
!if ($use_hal_rcc == 1)
  [HAL_RCC]
  interface "$hal_rcc_itf" as HAL_RCC_Interface
  [HAL_RCC] -l- HAL_RCC_Interface
  [$ppp_name] -r-( HAL_RCC_Interface
!endif
}
[Appli] -d-( HAL_PPP_APPLI_Interface
[$ppp_name] -u-( APPLI_Interface
package "Low Layer" #Technology {
!if (use_ppp_ll == 1)
[$ll_ppp]
interface "$ll_ppp_itf" as LL_PPP_Interface
[$ll_ppp] -u- LL_PPP_Interface
!endif
interface "$ppp_ISR" as PPP_ISR

[$ppp_ISR] -U- PPP_ISR
[CMSIS-Devices]
[$ppp_ISR]
!if ($use_hal_dma == 1)
  [DMA ISR]
  interface "DMA ISR" as DMA_ISR
  [DMA ISR] -u- DMA_ISR
!endif
}
package "HW" #LightCyan {
[STM32_HW]
interface "$ppp_xIRQ" as PPPx_IRQ
[STM32_HW] -u- PPPx_IRQ
!if ($use_hal_dma == 1)
interface "DMAx_IRQ_Ch" as DMA_IRQ_CH
[STM32_HW] -u- DMA_IRQ_CH
[DMA ISR] -d-( DMA_IRQ_CH
[HAL_DMA] --( DMA_ISR
!endif
}
!if (use_ppp_ll == 1)
[$ppp_name] -d-( LL_PPP_Interface
[$ll_ppp] .r.> [CMSIS-Devices]: $ppp register def
[STM32_HW] <.u. [$ll_ppp] : $ppp registers R/W
!else
[$ppp_name] .d.> [CMSIS-Devices]: $ppp register def
[STM32_HW] <.l. [$ppp_name] : $ppp registers R/W
!endif
[$ppp_ISR] -d-( PPPx_IRQ
[$ppp_name] -d-( PPP_ISR
@enduml

Configuration table

The following table lists the configuration defines for the HAL TAMP module, specifying their locations, default values, and descriptions:

group TAMP_Configuration_Table

Configuration inside the TAMP driver

Config defines

Description

Default value

Note

USE_HAL_TAMP_MODULE

hal_conf.h

1

When set, HAL TAMP module is enabled

USE_HAL_CHECK_PARAM

hal_conf.h

0

When set, parameters are checked in runtime

USE_ASSERT_DBG_PARAM

PreProcessor env

NA

When defined, enable the params assert