AN4536 Application Note Rev. 2.0 1/2014
Freescale Semiconductor
3
OTP Overview
During a power-up, the TBBOTP registers behave as follows:
•
The contents of the TBBOTP registers are initialized to zero when a valid VIN is first applied.
•
The values that are then loaded into the TBBOTP registers depend on the setting of the VDDOTP pin, and
on the value of the TBB_POR, and the FUSE_POR_XOR bits. Refer to
Table 1
.
•
If VDDOTP = VCOREDIG (1.5 V), the TBBOTP values are loaded from ROM.
•
If VDDOTP = 0 V, TBB_POR = 0 and FUSE_POR_XOR = 1; the TBBOTP values are loaded from the fuses.
•
If VDDOTP = 0, TBB_POR = 0 and FUSE_POR_XOR=0; the TBBOTP registers remain initialized at zero.
•
The initial value of TBB_POR is always “0”, only when VDDOTP = 0 V and TBB_POR is set to “1”, are the
values from the TBBOTP registers maintained and not loaded from a different source.
The contents of the TBBOTP registers may be modified by I
2
C. To communicate with I
2
C, VIN must be valid and
VDDIO, to which SDA and SCL are pulled up, must be powered by a 1.7 V to 3.6 V supply. VIN or the coin cell
voltage must be valid to maintain the contents of the TBBOTP registers. To power on with the contents of the
TBBOTP registers, a valid turn-on event must occur with the following conditions: a valid VIN, optional LICELL,
VDDOTP = 0 V, TBB_POR = 1.
2.2
OTP Programming Example
The One-Time-Programmable memory is realized using fuses. The startup configuration can be programmed into
the MMPF0100 by changing the state of these fuses as required during the OTP programming process.
There are 10 banks of fuses with each bank consisting of 26 fuses. Of the 26 fuses in a bank, 20 are programmable
by the user. The remaining 6 are redundant fuses that allow implementation of Error Correction. An Error Correction
Code within the MMPF0100 corrects single bit errors if they occur in the bank.
The following is an example of programming the MMPF0100 and MMPF0100A. MMPF0100A refers to the newer
silicon version of MMPF0100. Refer to the product Data Sheet for complete details.
Note that the programming voltage and time-delay during fuse programming is different between the two silicon
revisions. The programming voltage should have a tolerance of +/-3% and OTP programming should be done at
room temperature. For reliability reasons, do not OTP program a given part more than once.
Note: All code examples in this document represent a script using the KITPFPGMEVME and the associated GUI.
Command syntax may vary if the user utilizes a different tool for communication.
//---------------------------------------------------------------------------
// F0 - Sample Configuration
// Set VDDOTP = 0 V, PWRON = HIGH, LICELL = 3.0 V (Optional), VIN = VDDIO = 3.3 V
//---------------------------------------------------------------------------
WRITE_I2C:7F:01
// Access PF0100 EXT Page1
//[Extended Page 1 Registers: 0xA0 - 0xAF] ----------------------------------
WRITE_I2C:A0:2B
// Sw1AB Voltage = 1.375 V
WRITE_I2C:A1:01
// Sw1AB Sequence = 1
WRITE_I2C:A2:05
// Sw1AB Freq = 2MHZ, Mode = Single phase
WRITE_I2C:A8:2B
// Sw1c Voltage = 1.375 V
WRITE_I2C:A9:02
// Sw1c Sequence = 2
WRITE_I2C:AA:01
// Sw1c Freq = 2 MHZ
WRITE_I2C:AC:72
// Sw2 Voltage = 3.30 V
WRITE_I2C:AD:05
// Sw2 Sequence = 5
WRITE_I2C:AE:01
// Sw2 Freq = 2 MHZ
//[Extended Page 1 Registers: 0xB0 - 0xBF] ----------------------------------
WRITE_I2C:B0:2C
// Sw3A Voltage = 1.500 V