1 /***************************************************************************//**
2  * @file
3  * @brief System API
4  *******************************************************************************
5  * # License
6  * <b>Copyright 2024 Silicon Laboratories Inc. www.silabs.com</b>
7  *******************************************************************************
8  *
9  * SPDX-License-Identifier: Zlib
10  *
11  * The licensor of this software is Silicon Laboratories Inc.
12  *
13  * This software is provided 'as-is', without any express or implied
14  * warranty. In no event will the authors be held liable for any damages
15  * arising from the use of this software.
16  *
17  * Permission is granted to anyone to use this software for any purpose,
18  * including commercial applications, and to alter it and redistribute it
19  * freely, subject to the following restrictions:
20  *
21  * 1. The origin of this software must not be misrepresented; you must not
22  *    claim that you wrote the original software. If you use this software
23  *    in a product, an acknowledgment in the product documentation would be
24  *    appreciated but is not required.
25  * 2. Altered source versions must be plainly marked as such, and must not be
26  *    misrepresented as being the original software.
27  * 3. This notice may not be removed or altered from any source distribution.
28  *
29  ******************************************************************************/
30 
31 #ifndef _SL_HAL_SYSTEM_H
32 #define _SL_HAL_SYSTEM_H
33 
34 #include "em_device.h"
35 #include "sl_hal_system_generic.h"
36 #include "sl_enum.h"
37 #include <stdint.h>
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 /***************************************************************************//**
44  * @addtogroup system SYSTEM - System Utils
45  * @brief System API
46  * @details
47  *  This module contains functions to read information such as RAM and Flash size,
48  *  device unique ID, chip revision, family, and part number from DEVINFO and
49  *  SCB blocks. Functions to configure and read status from FPU are available for
50  *  compatible devices.
51  * @{
52  ******************************************************************************/
53 
54 /*******************************************************************************
55  ********************************   ENUMS   ************************************
56  ******************************************************************************/
57 
58 /// Family identifiers.
SL_ENUM_GENERIC(sl_hal_system_part_family_t,uint32_t)59 SL_ENUM_GENERIC(sl_hal_system_part_family_t, uint32_t) {
60 #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_1)
61   SL_HAL_SYSTEM_PART_FAMILY_MIGHTY_21 = DEVINFO_PART_FAMILY_MG | (21 << _DEVINFO_PART_FAMILYNUM_SHIFT), ///< EFR32 Mighty Gecko Series 2 Config 1 Value Device Family
62   SL_HAL_SYSTEM_PART_FAMILY_FLEX_21 = DEVINFO_PART_FAMILY_FG | (21 << _DEVINFO_PART_FAMILYNUM_SHIFT),   ///< EFR32 Flex Gecko Series 2 Config 1 Value Device Family
63   SL_HAL_SYSTEM_PART_FAMILY_BLUE_21 = DEVINFO_PART_FAMILY_BG | (21 << _DEVINFO_PART_FAMILYNUM_SHIFT),   ///< EFR32 Blue Gecko Series 2 Config 1 Value Device Family
64   SL_HAL_SYSTEM_PART_FAMILY_MIGHTY_RCP_21 = DEVINFO_PART_FAMILY_MR | (21 << _DEVINFO_PART_FAMILYNUM_SHIFT), ///< EFR32 Mighty RCP Series 2 Config 1 Value Device Family
65 #endif
66 #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_2)
67   SL_HAL_SYSTEM_PART_FAMILY_MIGHTY_22 = DEVINFO_PART_FAMILY_MG | (22 << _DEVINFO_PART_FAMILYNUM_SHIFT), ///< EFR32 Mighty Gecko Series 2 Config 2 Value Device Family
68   SL_HAL_SYSTEM_PART_FAMILY_FLEX_22 = DEVINFO_PART_FAMILY_FG | (22 << _DEVINFO_PART_FAMILYNUM_SHIFT),   ///< EFR32 Flex Gecko Series 2 Config 2 Value Device Family
69   SL_HAL_SYSTEM_PART_FAMILY_BLUE_22 = DEVINFO_PART_FAMILY_BG | (22 << _DEVINFO_PART_FAMILYNUM_SHIFT),   ///< EFR32 Blue Gecko Series 2 Config 2 Value Device Family
70   SL_HAL_SYSTEM_PART_FAMILY_EFM32_PEARL_22 = DEVINFO_PART_FAMILY_PG | (22 << _DEVINFO_PART_FAMILYNUM_SHIFT),     ///< EFM32 Pearl Gecko Series 2 Config 2 Value Device Family
71 #endif
72 #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_3)
73   SL_HAL_SYSTEM_PART_FAMILY_FLEX_23 = DEVINFO_PART_FAMILY_FG | (23 << _DEVINFO_PART_FAMILYNUM_SHIFT),       ///< EFR32 Flex Gecko Series 2 Config 3 Value Device Family
74   SL_HAL_SYSTEM_PART_FAMILY_ZEN_23 = DEVINFO_PART_FAMILY_ZG | (23 << _DEVINFO_PART_FAMILYNUM_SHIFT),        ///< EFR32 Zen Gecko Series 2 Config 3 Value Device Family
75   SL_HAL_SYSTEM_PART_FAMILY_EFM32_PEARL_23 = DEVINFO_PART_FAMILY_PG | (23 << _DEVINFO_PART_FAMILYNUM_SHIFT), ///< EFM32 Pearl Gecko Series 2 Config 3 Value Device Family
76   SL_HAL_SYSTEM_PART_FAMILY_SIDEWALK_23 = DEVINFO_PART_FAMILY_SG | (23 << _DEVINFO_PART_FAMILYNUM_SHIFT),   ///< EFR32 Side Walk Gecko Series 2 Config 3 Value Device Family
77 #endif
78 #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_4)
79   SL_HAL_SYSTEM_PART_FAMILY_MIGHTY_24 = DEVINFO_PART_FAMILY_MG | (24 << _DEVINFO_PART_FAMILYNUM_SHIFT), ///< EFR32 Mighty Gecko Series 2 Config 4 Value Device Family
80   SL_HAL_SYSTEM_PART_FAMILY_FLEX_24 = DEVINFO_PART_FAMILY_FG | (24 << _DEVINFO_PART_FAMILYNUM_SHIFT),   ///< EFR32 Flex Gecko Series 2 Config 4 Value Device Family
81   SL_HAL_SYSTEM_PART_FAMILY_BLUE_24 = DEVINFO_PART_FAMILY_BG | (24 << _DEVINFO_PART_FAMILYNUM_SHIFT),   ///< EFR32 Blue Gecko Series 2 Config 4 Value Device Family
82 #endif
83 #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_5)
84   SL_HAL_SYSTEM_PART_FAMILY_FLEX_25 = DEVINFO_PART_FAMILY_FG | (25 << _DEVINFO_PART_FAMILYNUM_SHIFT),       ///< EFR32 Flex Gecko Series 2 Config 5 Value Device Family
85 #endif
86 #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_6)
87   SL_HAL_SYSTEM_PART_FAMILY_MIGHTY_26 = DEVINFO_PART_FAMILY_MG | (26 << _DEVINFO_PART_FAMILYNUM_SHIFT), ///< EFR32 Mighty Gecko Series 2 Config 6 Value Device Family
88   SL_HAL_SYSTEM_PART_FAMILY_BLUE_26 = DEVINFO_PART_FAMILY_BG | (26 << _DEVINFO_PART_FAMILYNUM_SHIFT),   ///< EFR32 Blue Gecko Series 2 Config 6 Value Device Family
89   SL_HAL_SYSTEM_PART_FAMILY_EFM32_PEARL_26 = DEVINFO_PART_FAMILY_PG | (26 << _DEVINFO_PART_FAMILYNUM_SHIFT), ///< EFM32 Pearl Gecko Series 2 Config 6 Value Device Family
90 #endif
91 #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_7)
92   SL_HAL_SYSTEM_PART_FAMILY_MIGHTY_27 = DEVINFO_PART_FAMILY_MG | (27 << _DEVINFO_PART_FAMILYNUM_SHIFT), ///< EFR32 Mighty Gecko Series 2 Config 7 Value Device Family
93   SL_HAL_SYSTEM_PART_FAMILY_BLUE_27 = DEVINFO_PART_FAMILY_BG | (27 << _DEVINFO_PART_FAMILYNUM_SHIFT),   ///< EFR32 Blue Gecko Series 2 Config 7 Value Device Family
94 #endif
95 #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_8)
96   SL_HAL_SYSTEM_PART_FAMILY_FLEX_28 = DEVINFO_PART_FAMILY_FG | (28 << _DEVINFO_PART_FAMILYNUM_SHIFT),  ///< EFR32 Flex Gecko Series 2 Config 8 Value Device Family
97   SL_HAL_SYSTEM_PART_FAMILY_ZEN_28 = DEVINFO_PART_FAMILY_ZG | (28 << _DEVINFO_PART_FAMILYNUM_SHIFT),   ///< EFR32 Zen Gecko Series 2 Config 8 Value Device Family
98   SL_HAL_SYSTEM_PART_FAMILY_SIDEWALK_28 = DEVINFO_PART_FAMILY_SG | (28 << _DEVINFO_PART_FAMILYNUM_SHIFT),   ///< EFR32 Side Walk Gecko Series 2 Config 8 Value Device Family
99   SL_HAL_SYSTEM_PART_FAMILY_EFM32_PEARL_28 = DEVINFO_PART_FAMILY_PG | (28 << _DEVINFO_PART_FAMILYNUM_SHIFT),  ///< EFM32 Pearl Gecko Series 2 Config 8 Value Device Family
100 #endif
101 #if defined(_SILICON_LABS_32B_SERIES_3_CONFIG_301)
102   SL_HAL_SYSTEM_PART_FAMILY_BLUETOOTH_301 = DEVINFO_PART0_PROTOCOL_BLUETOOTH        \
103                                             | (0x33 << _DEVINFO_PART0_SERIES_SHIFT) \
104                                             | (0x30 << _DEVINFO_PART0_DIECODE0_SHIFT), ///< SI Series 3 Bluetooth Config 1 Value Device Family (BG)
105   SL_HAL_SYSTEM_PART_FAMILY_PROPRIETARY_301 = DEVINFO_PART0_PROTOCOL_PROPRIETARY      \
106                                               | (0x33 << _DEVINFO_PART0_SERIES_SHIFT) \
107                                               | (0x30 << _DEVINFO_PART0_DIECODE0_SHIFT), ///< SI Series 3 Proprietary Config 1 Value Device Family (FG)
108   SL_HAL_SYSTEM_PART_FAMILY_FIFTEENPFOUR_301 = DEVINFO_PART0_PROTOCOL_FIFTEENPFOUR     \
109                                                | (0x33 << _DEVINFO_PART0_SERIES_SHIFT) \
110                                                | (0x30 << _DEVINFO_PART0_DIECODE0_SHIFT), ///< SI Series 3 15.4 Config 1 Value Device Family (MG)
111   SL_HAL_SYSTEM_PART_FAMILY_PEARL_301 = DEVINFO_PART0_PROTOCOL_PEARL            \
112                                         | (0x33 << _DEVINFO_PART0_SERIES_SHIFT) \
113                                         | (0x30 << _DEVINFO_PART0_DIECODE0_SHIFT), ///< SI Series 3 Pearl Config 1 Value Device Family (PG)
114   SL_HAL_SYSTEM_PART_FAMILY_WIFI_301 = DEVINFO_PART0_PROTOCOL_WIFI             \
115                                        | (0x33 << _DEVINFO_PART0_SERIES_SHIFT) \
116                                        | (0x30 << _DEVINFO_PART0_DIECODE0_SHIFT), ///< SI Series 3 Wifi Config 1 Value Device Family (WG)
117   SL_HAL_SYSTEM_PART_FAMILY_ZWAVE_301 = DEVINFO_PART0_PROTOCOL_ZWAVE            \
118                                         | (0x33 << _DEVINFO_PART0_SERIES_SHIFT) \
119                                         | (0x30 << _DEVINFO_PART0_DIECODE0_SHIFT), ///< SI Series 3 Zwave Config 1 Value Device Family (ZG)
120 #endif
121   SL_HAL_SYSTEM_PART_FAMILY_UNKNOWN = 0xFF  ///< Unknown Device Family. Family ID is missing on unprogrammed parts.
122 };
123 
124 /***************************************************************************//**
125  * @brief
126  *   Get the MCU family identifier.
127  *
128  * @return
129  *   Family identifier of MCU.
130  *
131  * @note
132  *   This function retrieves family ID by reading the chip's device info
133  *   structure in flash memory. Users can retrieve family ID directly
134  *   by reading DEVINFO->PART item and decode with mask and shift
135  *   \#defines defined in \<part_family\>_devinfo.h (refer to code
136  *   below for details).
137  ******************************************************************************/
138 sl_hal_system_part_family_t sl_hal_system_get_family(void);
139 
140 /** @} (end addtogroup system) */
141 
142 #ifdef __cplusplus
143 }
144 #endif
145 
146 #endif /* #ifndef _SL_HAL_SYSTEM_H */
147