E-Fuse#
Introduction#
Electrically programmable fuses or eFuses are one-time programmable memory elements used to store configuration or data in integrated circuits (ICs). eFuses use 32-bit addressing with each address holding 8 bits of data. The eFuse controller is used to program and read these bits.
Once information is programmed into an eFuse, it is typically irreversible. Due to their irreversible nature, eFuses are ideal for storing critical data that cannot be altered.
eFuses find application in various areas, including:
Supports eFuse programming and read operations.
Supporting both memory mapped and FSM-based read operations.
Configuration#
eFuse API's use for reading and writing into the E-fuse 256-bit address are:
Read:
Read 1 byte of data from 32x8 byte eFuse memory (OTP) in FSM mode using sl_si91x_efuse_fsm_read_byte.
Read 1 byte of data from 32x8 byte eFuse memory(OTP) in memory-mapped mode using sl_si91x_efuse_memory_mapped_read_byte.
Read the 1 word (16 bits) of data from 32x8 byte eFuse memory (OTP) in memory-mapped mode using sl_si91x_efuse_memory_mapped_read_word.
Write a bit to a specific 8-bit location in the eFuse at the designated address using sl_si91x_efuse_write_bit
Usage#
The eFuse application used to various read and write operations with OTP (one-time programmable) memory. The WRITE_ENABLE macro must be enabled before an application can write to memory. By default, only read operations are carried out at the designated memory address.
An eFuse can be initialized and configured using the following APIs in default mode:
Initializes the eFuse:sl_si91x_efuse_init
Set the eFuse address for read and write operations:sl_si91x_efuse_set_address
Get the eFuse address for read and write operations:sl_si91x_efuse_get_address
Write the bit in the position of an 8-bit location in eFuse specified address:sl_si91x_efuse_write_bit
Read 1 byte of data from 32x8 byte eFuse memory (OTP) in FSM mode:sl_si91x_efuse_fsm_read_byte
Read 1 byte of data from 32x8 byte eFuse memory(OTP) in memory mapped mode:sl_si91x_efuse_memory_mapped_read_byte
Read the 1 word (16 bits) of data from 32x8 byte eFuse memory (OTP) in memory mapped mode:sl_si91x_efuse_memory_mapped_read_word
Un-initializes the eFuse:sl_si91x_efuse_deinit
Modules#
Functions#
To retrieve the release, major and minor version of eFuse.
To enable the peripheral clock for eFuse.
To disable the peripheral clock for eFuse.
To initialize the eFuse by enabling its clock and the eFuse itself.
To un-initialize the eFuse by disabling the eFuse and its clock.
To set the eFuse address for read and write operations.
To get the eFuse address for read and write operations.
To write a bit in the position of an 8-bit location in the specified eFuse address.
To read a 1-word (16 bits) of data from the 256-byte eFuse memory (OTP) in memory-mapped mode.
To read 1 byte of data from 32x8 byte eFuse memory (OTP) in memory-mapped mode.
To read 1 byte of data from 32x8 byte eFuse memory (OTP) in FSM mode.
To enable the eFuse by enabling its clock.
To disable the eFuse by disabling its clock.
Function Documentation#
sl_si91x_efuse_get_version#
sl_efuse_version_t sl_si91x_efuse_get_version (void )
To retrieve the release, major and minor version of eFuse.
N/A |
The API is used to retrieve the release, major, and minor version of eFuse.
Returns
sl_efuse_version_t type structure containing the version information.
93
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h
sl_si91x_efuse_enable_clock#
sl_status_t sl_si91x_efuse_enable_clock (void )
To enable the peripheral clock for eFuse.
N/A |
The API is used to enable the peripheral clock for eFuse.
Returns
sl_status_t Status code indicating the result:
SL_STATUS_OK (0x0000) - Successfully enabled the peripheral clock.
SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is an invalid argument.
For more information on the status documentation, see SL STATUS DOCUMENTATION.
107
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h
sl_si91x_efuse_disable_clock#
sl_status_t sl_si91x_efuse_disable_clock (void )
To disable the peripheral clock for eFuse.
N/A |
The API is used to disable the peripheral clock for eFuse.
Pre-conditions:
Returns
sl_status_t Status code indicating the result:
SL_STATUS_OK (0x0000) - Successfully disabled the peripheral clock.
SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is an invalid argument.
For more information on the status documentation, see SL STATUS DOCUMENTATION.
127
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h
sl_si91x_efuse_init#
sl_status_t sl_si91x_efuse_init (void )
To initialize the eFuse by enabling its clock and the eFuse itself.
N/A |
The API first enables the eFuse clock and then enables the eFuse.
Returns
sl_status_t Status code indicating the result:
SL_STATUS_OK (0x0000) - Successfully initialized the eFuse.
SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is an invalid argument.
For more information on the status documentation, see SL STATUS DOCUMENTATION.
141
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h
sl_si91x_efuse_deinit#
sl_status_t sl_si91x_efuse_deinit (void )
To un-initialize the eFuse by disabling the eFuse and its clock.
N/A |
The API first disables the eFuse and then disables the eFuse clock.
Pre-conditions:
Returns
sl_status_t Status code indicating the result:
SL_STATUS_OK (0x0000) - Success.
SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is an invalid argument.
For more information on the status documentation, see SL STATUS DOCUMENTATION.
161
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h
sl_si91x_efuse_set_address#
sl_status_t sl_si91x_efuse_set_address (uint16_t address)
To set the eFuse address for read and write operations.
[in] | address | Holds the address at which the data has to be written in the eFuse range 0x0 to 0x31. |
The API is used to set the eFuse address for read and write operations.
Returns
sl_status_t Status code indicating the result:
SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is an invalid argument.
SL_STATUS_OK (0x0000) - Success.
For more information on the status documentation, see SL STATUS DOCUMENTATION.
179
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h
sl_si91x_efuse_get_address#
sl_status_t sl_si91x_efuse_get_address (uint16_t * read_address)
To get the eFuse address for read and write operations.
[out] | read_address | Pointer holds the address at which the data has to be written in the eFuse. |
The API is used to retrieve the eFuse address for read and write operations.
Pre-conditions:
Returns
sl_status_t Status code indicating the result:
SL_STATUS_OK (0x0000) - Success.
SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is an invalid argument.
For more information on the status documentation, see SL STATUS DOCUMENTATION.
200
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h
sl_si91x_efuse_write_bit#
sl_status_t sl_si91x_efuse_write_bit (uint16_t address, uint8_t bit_pos, uint32_t hold_time)
To write a bit in the position of an 8-bit location in the specified eFuse address.
[in] | address | Holds the address at which the data has to be written in the eFuse range 0x0 to 0x31. |
[in] | bit_pos | Variable that holds the position of the bit on which the data will be placed (0 - 7). |
[in] | hold_time | eFuse strobe hold time, depends on the clock frequency of the eFuse controller. |
The API writes a bit to a specific 8-bit location position at the designated eFuse address. There is only one programming scheme, which is single bit programming.
Pre-conditions:
Returns
sl_status_t Status code indicating the result:
SL_STATUS_OK (0x0000) - Success.
SL_STATUS_NULL_POINTER (0x0022) - The parameter is a null pointer.
For more information on the status documentation, see SL STATUS DOCUMENTATION.
225
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h
sl_si91x_efuse_memory_mapped_read_word#
sl_status_t sl_si91x_efuse_memory_mapped_read_word (uint16_t address, uint16_t * read_word, uint32_t soc_clk)
To read a 1-word (16 bits) of data from the 256-byte eFuse memory (OTP) in memory-mapped mode.
[in] | address | Holds the address from where we are reading the 1 word (max value is 0x31). |
[out] | read_word | Pointer that points to the data which is stored in the eFuse. |
[in] | soc_clk | Input clock frequency of eFuse controller in range between (1000000 - 180000000). |
The API is used to read a 1-word (16 bits) of data from the 256-byte eFuse memory (OTP) in memory-mapped mode.
Returns
sl_status_t Status code indicating the result:
SL_STATUS_OK (0x0000) - Success.
SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is an invalid argument.
SL_STATUS_NULL_POINTER (0x0022) - The parameter is a null pointer.
For more information on the status documentation, see SL STATUS DOCUMENTATION.
249
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h
sl_si91x_efuse_memory_mapped_read_byte#
sl_status_t sl_si91x_efuse_memory_mapped_read_byte (uint16_t address, uint8_t * read_byte, uint32_t soc_clk)
To read 1 byte of data from 32x8 byte eFuse memory (OTP) in memory-mapped mode.
[in] | address | Holds the address from where we are reading the 1 byte of data (max value is 0x31). |
[out] | read_byte | Pointer that points to the 8-bit data which is stored in the eFuse. |
[in] | soc_clk | Input clock frequency in range between (1000000 - 180000000). |
The API is used to read 1 byte of data from 32x8 byte eFuse memory (OTP) in memory-mapped mode.
Returns
sl_status_t Status code indicating the result:
SL_STATUS_OK (0x0000) - Success.
SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is an invalid argument.
SL_STATUS_NULL_POINTER (0x0022) - The parameter is a null pointer.
For more information on the status documentation, see SL STATUS DOCUMENTATION.
273
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h
sl_si91x_efuse_fsm_read_byte#
sl_status_t sl_si91x_efuse_fsm_read_byte (uint16_t address, uint8_t * read_byte, uint32_t soc_clk)
To read 1 byte of data from 32x8 byte eFuse memory (OTP) in FSM mode.
[in] | address | Holds the address from where we are reading the 1 byte of data (max value is 0x31). |
[out] | read_byte | Pointer that points to the 8-bit data which is stored in the eFuse. |
[in] | soc_clk | Input clock frequency in range between (1000000 - 180000000). |
The API is used to read 1 byte of data from 32x8 byte eFuse memory (OTP) in FSM mode.
Returns
sl_status_t Status code indicating the result:
SL_STATUS_OK (0x0000) - Success.
SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is an invalid argument.
SL_STATUS_NULL_POINTER (0x0022) - The parameter is a null pointer.
For more information on the status documentation, see SL STATUS DOCUMENTATION.
297
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h
sl_si91x_efuse_enable#
__STATIC_INLINE void sl_si91x_efuse_enable (void )
To enable the eFuse by enabling its clock.
N/A |
The API is used to enable the eFuse by enabling its clock.
307
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h
sl_si91x_efuse_disable#
__STATIC_INLINE void sl_si91x_efuse_disable (void )
To disable the eFuse by disabling its clock.
N/A |
The API is used to disable the eFuse by disabling its clock.
Pre-conditions:
324
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h