E-Fuse#

Introduction#

Electrically programmable fuses or eFUSEs contains one-time programmable memory that are used to store configuration or data in integrated circuits (ICs). E-fuse use 32-bit addressing with each address containing 8 bits. 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 suitable for storing critical data that cannot be altered.

  • eFUSEs find application in various areas, including

  1. Supports eFuse programming and read operations

  2. Supports memory mapped and FSM based read operation

Configuration#

The following apis allows users to read and write into the E-fuse 256-bit address.

  1. sl_si91x_efuse_fsm_read_byte or sl_si91x_efuse_memory_mapped_read_byte or sl_si91x_efuse_memory_mapped_read_word

  2. sl_si91x_efuse_write_bit

Usage#

The Efuse application provides an example of how to use various write and read operations to write to and read from OTP (one-time programmable) memory. The WRITE_ENABLE macro must first be enabled before an application may write to memory. By default, only read operations are carried out at the designated memory address. The efuse can be initialized and configured using the following apis in default mode. And it also has other apis where one can use them as per requirements which are discussed in functions.

  1. sl_si91x_efuse_init

  2. sl_si91x_efuse_set_address

  3. sl_si91x_efuse_get_address

  4. sl_si91x_efuse_write_bit

  5. sl_si91x_efuse_fsm_read_byte can be used to read byte when the mode of read is FSM.

  6. sl_si91x_efuse_memory_mapped_read_byte can be used to read byte when the mode of read is Memory mapped mode.

  7. sl_si91x_efuse_memory_mapped_read_word can be used to read word when the mode of read is Memory mapped mode.

  8. sl_si91x_efuse_deinit

Modules#

sl_efuse_version_t

Variables#

uint8_t
uint8_t
uint8_t

Functions#

This API is used to get the release, sqa and dev version of EFUSE.

sl_status_t

This API is used to enable peripheral clock for efuse.

sl_status_t

This API is used to disable peripheral clock for efuse.

sl_status_t

This API is used to Initialize the eFUSE.

sl_status_t

This API is used to un-initialize the eFUSE.

sl_status_t
sl_si91x_efuse_set_address(uint16_t address)

This API is used to set the eFUSE address for read and write operations.

sl_status_t
sl_si91x_efuse_get_address(uint16_t *read_address)

This API is used to get the eFUSE address for read and write operations.

sl_status_t
sl_si91x_efuse_write_bit(uint16_t address, uint8_t bit_pos, uint32_t hold_time)

This API is used to write the bit in the position of an 8-bit location in eFUSE specified address.

sl_status_t
sl_si91x_efuse_memory_mapped_read_word(uint16_t address, uint16_t *read_word, uint32_t soc_clk)

This API is used to read the 1 word (16 bits) of data from 32x8 byte eFUSE memory (OTP) in memory mapped mode.

sl_status_t
sl_si91x_efuse_memory_mapped_read_byte(uint16_t address, uint8_t *read_byte, uint32_t soc_clk)

This API is used to read a 1 byte of data from 32x8 byte eFUSE memory(OTP) in memory mapped mode.

sl_status_t
sl_si91x_efuse_fsm_read_byte(uint16_t address, uint8_t *read_byte, uint32_t soc_clk)

This API is used to read a 1 byte of data from 32x8 byte eFUSE memory (OTP) in fsm mode.

__STATIC_INLINE void

This API is used to enable the EFUSE.

__STATIC_INLINE void

This API is used to Disable the EFUSE.

Variable Documentation#

release#

uint8_t sl_efuse_version_t::release

Definition at line 70 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h

major#

uint8_t sl_efuse_version_t::major

Definition at line 71 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h

minor#

uint8_t sl_efuse_version_t::minor

Definition at line 72 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h

Function Documentation#

sl_si91x_efuse_get_version#

sl_efuse_version_t sl_si91x_efuse_get_version (void )

This API is used to get the release, sqa and dev version of EFUSE.

Parameters
N/A

Returns


Definition at line 84 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 )

This API is used to enable peripheral clock for efuse.

Parameters
N/A

Returns

  • returns status 0 if successful, else error code.

    • SL_STATUS_INVALID_PARAMETER - The parameter is an invalid argument

    • SL_STATUS_OK - Success


Definition at line 94 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 )

This API is used to disable peripheral clock for efuse.

Parameters
N/A

Returns

  • returns status 0 if successful, else error code.

    • SL_STATUS_INVALID_PARAMETER - The parameter is an invalid argument

    • SL_STATUS_OK - Success


Definition at line 112 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 )

This API is used to Initialize the eFUSE.

Parameters
N/A

This API first enables the efuse clock and then efuse.

Returns

  • returns status 0 if successful,else error code.

    • SL_STATUS_INVALID_PARAMETER - The parameter is an invalid argument

    • SL_STATUS_OK - Success


Definition at line 123 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 )

This API is used to un-initialize the eFUSE.

Parameters
N/A

This API first disables the efuse and then efuse clock.

Returns

  • returns status 0 if successful,else error code.

    • SL_STATUS_INVALID_PARAMETER - The parameter is an invalid argument

    • SL_STATUS_OK - Success


Definition at line 142 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)

This API is used to set the eFUSE address for read and write operations.

Parameters
[in]address

- Holds the address at which the data has to be written in the efuse Max is 0x31.

Returns

  • returns status 0 if successful, else error code.

    • SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is invalid argument

    • SL_STATUS_OK - Success


Definition at line 158 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)

This API is used to get the eFUSE address for read and write operations.

Parameters
[out]read_address

- Pointer holds the address at which the data has to be written in the efuse

Returns

  • returns status 0 if successful, else error code as follow:

    • SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is invalid argument

    • SL_STATUS_OK - Success


Definition at line 175 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)

This API is used to write the bit in the position of an 8-bit location in eFUSE specified address.

Parameters
[in]address

- Holds the address at which the data has to be written in the efuse Max is 0x31.

[in]bit_pos

- Variable that holds the position of bit on which the data will be placed (1 - 7).

[in]hold_time

- eFUSE strobe hold time, depends on clock frequency of eFUSE controller

There is only one programming scheme, which is single bit programming.

Returns

  • returns status 0 if successful, else error code as follow.

    • SL_STATUS_NULL_POINTER (0x0022) - The parameter is a null pointer

    • SL_STATUS_OK - Success


Definition at line 195 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)

This API is used to read the 1 word (16 bits) of data from 32x8 byte eFUSE memory (OTP) in memory mapped mode.

Parameters
[in]address

- Holds the address from where we are reading the 1 word (max value is 0x31). of data (max value is 0x31).

[out]read_word

- Pointer that points to the data which is stored in the efuse

[in]soc_clk

- It is input clock frequency of eFUSE controller in range between (1000000 -180000000).

Returns

  • returns status 0 if successful, else error code as follow.

    • SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is an invalid argument

    • SL_STATUS_NULL_POINTER (0x0022) - The parameter is a null pointer

    • SL_STATUS_OK - Success


Definition at line 219 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)

This API is used to read a 1 byte of data from 32x8 byte eFUSE memory(OTP) in memory mapped mode.

Parameters
[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

- It is input clock frequency in range between (1000000 -180000000).

Returns

  • returns status 0 if successful, else error code as follow.

    • SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is an invalid argument

    • SL_STATUS_NULL_POINTER (0x0022) - The parameter is a null pointer

    • SL_STATUS_OK - Success


Definition at line 241 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)

This API is used to read a 1 byte of data from 32x8 byte eFUSE memory (OTP) in fsm mode.

Parameters
[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

- It is input clock frequency in range between (1000000 -180000000).

Returns

  • returns status 0 if successful, else error code as follow.

    • SL_STATUS_INVALID_PARAMETER (0x0021) - The parameter is an invalid argument

    • SL_STATUS_NULL_POINTER (0x0022) - The parameter is a null pointer

    • SL_STATUS_OK - Success


Definition at line 263 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 )

This API is used to enable the EFUSE.

Parameters
N/A

Returns

  • none


Definition at line 273 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 )

This API is used to Disable the EFUSE.

Parameters
N/A

Returns

  • none


Definition at line 291 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_efuse.h