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.

eFuse timinig diagrameFuse timinig diagram

  • eFuses find application in various areas, including:

    1. Supports eFuse programming and read operations.

    2. 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:

  1. Read:

  2. 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:

  1. Initializes the eFuse:sl_si91x_efuse_init

  2. Set the eFuse address for read and write operations:sl_si91x_efuse_set_address

  3. Get the eFuse address for read and write operations:sl_si91x_efuse_get_address

  4. Write the bit in the position of an 8-bit location in eFuse specified address:sl_si91x_efuse_write_bit

  5. Read 1 byte of data from 32x8 byte eFuse memory (OTP) in FSM mode:sl_si91x_efuse_fsm_read_byte

  6. Read 1 byte of data from 32x8 byte eFuse memory(OTP) in memory mapped mode:sl_si91x_efuse_memory_mapped_read_byte

  7. 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

  8. Un-initializes the eFuse:sl_si91x_efuse_deinit

Modules#

sl_efuse_version_t

Functions#

To retrieve the release, major and minor version of eFuse.

sl_status_t

To enable the peripheral clock for eFuse.

sl_status_t

To disable the peripheral clock for eFuse.

sl_status_t

To initialize the eFuse by enabling its clock and the eFuse itself.

sl_status_t

To un-initialize the eFuse by disabling the eFuse and its clock.

sl_status_t
sl_si91x_efuse_set_address(uint16_t address)

To set the eFuse address for read and write operations.

sl_status_t
sl_si91x_efuse_get_address(uint16_t *read_address)

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)

To write a bit in the position of an 8-bit location in the specified eFuse address.

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.

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.

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.

__STATIC_INLINE void

To enable the eFuse by enabling its clock.

__STATIC_INLINE void

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.

Parameters
N/A

The API is used to retrieve the release, major, and minor version of eFuse.

Returns


Definition at line 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.

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


Definition at line 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.

Parameters
N/A

The API is used to disable the peripheral clock for eFuse.

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.


Definition at line 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.

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


Definition at line 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.

Parameters
N/A

The API first disables the eFuse and then disables the eFuse clock.

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.


Definition at line 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.

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


Definition at line 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.

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

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.


Definition at line 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.

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

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.


Definition at line 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.

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


Definition at line 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.

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

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.


Definition at line 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.

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

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.


Definition at line 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.

Parameters
N/A

The API is used to enable the eFuse by enabling its clock.


Definition at line 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.

Parameters
N/A

The API is used to disable the eFuse by disabling its clock.


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