HAL CCB Overview

Introducing CCB

group CCB_Introduction

The CCB hardware abstraction layer provides a set of APIs to configure and control the CCB peripheral on STM32 microcontrollers. The CCB (coupling and chaining bridge) is a cryptographic hardware accelerator designed to protect private keys used in PKA-protected operations.

Module and files

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

Module and files diagram

Component diagram

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

@startuml

!$use_ppp_core = 0
!$use_ll_rcc = 0
!$use_ppp_ll = 0
!$use_ppp_hal = 1

!$use_api_itf = 1
!$use_hal_itf = 1
!$use_ll_itf = 1
!$use_core_itf = 1
!$use_hal_generic_dep = 0

!$use_ppp_isr = 0

!$use_hal_service = 1
!$use_hal_rcc = 1
!$use_hal_dma = 0
!$use_kernel_clock = 0

!$core = "XXX" + "_CORE"
!$ppp = "CCB"
!$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_IT_Opt()\nHAL_DMA_Abort_IT"
!if ($use_kernel_clock == 1)
!$hal_rcc_itf = "\t\t\tHAL_RCC_"+$ppp+"_GetClockFreq()\n\t\t\tHAL_RCC_"+$ppp+"_EnableClock()"
!else
!$hal_rcc_itf = "\t\t\tHAL_RCC_"+$ppp+"_EnableClock()"
!endif

!$hal_ppp_itf = "Half transfer complete\nTransfer complete\nError callback\nAbort callback"

!$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 $ppp Software Component Diagram

Package "Application Layer" #DarkMagenta {

component [Appli]
!if ($use_ppp_isr == 1)
interface "$appli_itf" as APPLI_Interface
[Appli] -r- APPLI_Interface
!endif
}

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_generic_dep == 1)
      [HAL_SERVICE]
      [$ppp_name] .r.> [HAL_SERVICE]
!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
!if ($use_ppp_isr == 1)
[$ppp_name] -u-( APPLI_Interface
!endif
!if ($use_ppp_core ==1)
Package "Core Layer" #Lavender{
[$core]
interface "core API" as Core_api_itf
[$core] -u- Core_api_itf
}
[$ppp_name] -d-( Core_api_itf
!endif
package "Low Layer" #Technology {
[CMSIS-Devices]
!if ($use_ppp_ll == 1)
[$ll_ppp]
interface "$ll_ppp_itf" as LL_PPP_Interface
[$ll_ppp] -u- LL_PPP_Interface
!endif

!if ($use_ppp_isr == 1)
interface "$ppp_ISR" as PPP_ISR
[$ppp_ISR] -U- PPP_ISR
[$ppp_ISR]
!endif


!if ($use_ll_rcc == 1)
  [LL_RCC]
  interface "LL RCC API" as LL_RCC_API
  [LL_RCC] -u- LL_RCC_API
  [HAL_RCC] -d-(LL_RCC_API
!endif

!if ($use_hal_dma == 1)
  [DMA ISR]
  interface "DMA ISR" as DMA_ISR
  [DMA ISR] -u- DMA_ISR
!endif
}

package "HW" #LightCyan {
[STM32_HW]
!if ($use_ppp_isr == 1)
interface "$ppp_xIRQ" as PPPx_IRQ
[STM32_HW] -u- PPPx_IRQ
!endif
!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] <.l. [$ll_ppp] : $ppp registers R/W
!else
!if ($use_ppp_core == 1)
[$core] .l.> [CMSIS-Devices]: $ppp register def
[STM32_HW] <.u. [$core] : $ppp registers R/W
!else
[$ppp_name] .d.> [CMSIS-Devices]: $ppp register def
[STM32_HW] <.u. [$ppp_name] : $ppp registers R/W
!endif
!endif
!if ($use_ppp_isr == 1)
[$ppp_ISR] -d-( PPPx_IRQ
[$ppp_name] -d-( PPP_ISR
!endif
!if ($use_ll_rcc == 1)
[STM32_HW] <.u. [LL_RCC] : RCC registers R/W
!endif

@enduml

Configuration table

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

group CCB_Configuration_Table

Configuration inside the CCB driver

Config defines

Description

Default value

Note

PRODUCT

from IDE

NA

Ex:STM32C5XXxx.

USE_ASSERT_DBG_PARAM

from IDE

None

Enable the parameters asserts.

USE_ASSERT_DBG_STATE

from IDE

None

Enable the state asserts.

USE_HAL_CHECK_PARAM

from hal_conf.h

0U

Parameters runtime check.

USE_HAL_SECURE_CHECK_PARAM

from hal_conf.h

0U

Parameters runtime check for sensitive APIs.

USE_HAL_CCB_MODULE

from hal_conf.h

1U

Enable the HAL CCB module.

USE_HAL_CCB_CLK_ENABLE_MODEL

from hal_conf.h

HAL_CLK_ENABLE_NO

Enable the HAL_CCB_CLK.

USE_HAL_CCB_GET_LAST_ERRORS

from hal_conf.h

0U

Allows retrieving the last error codes.

USE_HAL_CCB_USER_DATA

from hal_conf.h

0U

Allows enabling or disabling user data.