Below are some comments regarding working with i.MX51 fuses.
1. How to read a fuse?
Once sensing is done at boot, every read access is done directly in this shadow
registers rather than physically. Shadow registers integrity is guaranteed by
automatic parity generation/checking circuitry.
It is not needed to take care of this.
So, to read a fuse state is as simple as reading a register. The memory map is
described in Chapter 6 (Fuse Map) of the Reference Manual.
NOTE: there are references in some register fields to the sensing mechanism. It
can be done, if it is allowed for the bank, to force a physical read, but it is
not recommended, and actually useless cause of the shadow registers.
2. How to program a fuse?
The first step in programming a fuse is to write the fuse address into the upper
and lower address registers.
This address is the bit address of the fuse to be programmed. Address bits 13:11
select the bank in which the fuse resides, bits 10:3 select the byte to be
programmed, and bits 2:0 select the bit within the byte.
Bits 7:0 of the address are written into the LA register and bits 13:8 into the
UA register.
Next, please use algorithm, described in section 41.3.5.3 (Programming Sequence)
of the Reference Manual.
Let me remind, "In Read mode, Freescale recommends VDD_FUSE be floated or
grounded.
Tying VDD_FUSE to a positive supply (3.0 V3.3 V) increases the possibility of
inadvertently blowing fuses and is not recommended."
3. Build the fuse address:
Example code:
#define SHIFT_BANK_13_11 11
#define MASK_BANK 0x7
#define SHIFT_ROW_10_3 3
#define MASK_ROW 0xFF
#define MASK_BIT 0x7
int addr, upper_addr, lower_addr;
addr = ((BANK & MASK_BANK) << SHIFT_BANK_13_11) | ((ROW & MASK_ROW) <<
SHIFT_ROW_10_3) | (BANK & MASK_BIT);
upper_addr = (addr >> 8) & 0xFF;
lower_addr = addr & 0xFF;
Have a great day,
Yuri
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Below are some comments regarding working with i.MX51 fuses.
1. How to read a fuse?
Once sensing is done at boot, every read access is done directly in this shadow
registers rather than physically. Shadow registers integrity is guaranteed by
automatic parity generation/checking circuitry.
It is not needed to take care of this.
So, to read a fuse state is as simple as reading a register. The memory map is
described in Chapter 6 (Fuse Map) of the Reference Manual.
NOTE: there are references in some register fields to the sensing mechanism. It
can be done, if it is allowed for the bank, to force a physical read, but it is
not recommended, and actually useless cause of the shadow registers.
2. How to program a fuse?
The first step in programming a fuse is to write the fuse address into the upper
and lower address registers.
This address is the bit address of the fuse to be programmed. Address bits 13:11
select the bank in which the fuse resides, bits 10:3 select the byte to be
programmed, and bits 2:0 select the bit within the byte.
Bits 7:0 of the address are written into the LA register and bits 13:8 into the
UA register.
Next, please use algorithm, described in section 41.3.5.3 (Programming Sequence)
of the Reference Manual.
Let me remind, "In Read mode, Freescale recommends VDD_FUSE be floated or
grounded.
Tying VDD_FUSE to a positive supply (3.0 V3.3 V) increases the possibility of
inadvertently blowing fuses and is not recommended."
3. Build the fuse address:
Example code:
#define SHIFT_BANK_13_11 11
#define MASK_BANK 0x7
#define SHIFT_ROW_10_3 3
#define MASK_ROW 0xFF
#define MASK_BIT 0x7
int addr, upper_addr, lower_addr;
addr = ((BANK & MASK_BANK) << SHIFT_BANK_13_11) | ((ROW & MASK_ROW) <<
SHIFT_ROW_10_3) | (BANK & MASK_BIT);
upper_addr = (addr >> 8) & 0xFF;
lower_addr = addr & 0xFF;
Have a great day,
Yuri
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------