AnsweredAssumed Answered

NO SUCCESS with the OTP script - MMPF0100NPAEP

Question asked by Matthew Cook on Jul 6, 2016
Latest reply on Oct 26, 2016 by Matthew Cook

I cannot seem to program this PMIC. PMIC part number: MMPF0100NPAEP. I am using the PF Series Programmer KITPFPGMEVME and PF0100 EVK Control GUO (Revision 3). I tried using the KITPFGUI 4.0 but it does not see any device connected.

I have successfully programmed the PMIC using the TBB script.

But have had NO SUCCESS with the OTP script.

 

Referring to the application note page 28 Section 3, item 3.

     An 9.5 V/9.25 V, 100 mA power supply at VDDOTP bypassed by 2 x 10 μF capacitors. The voltage depends on the      silicon revision used. See section OTP Programming Example for details.

What voltage should I see at VDDOTP?

My measured VDDOTP voltage measures to be 8.35 volts during programming.

I have not seen PWRON toggle ON.

 

My script is:

 

///---------------------------------------------------------------------------

// PF0100 FPGA PMIC OTP Configuration

// 6-30-2016 (Rev A)

// v1.0.0

// Set VDDOTP = 8 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:00 // Sw1AB Voltage = 0.300 V

WRITE_I2C:A1:14 // Sw1AB Sequence = 20

WRITE_I2C:A2:05 // Sw1AB Freq = 2 MHZ, Mode = Single phase

WRITE_I2C:A8:3F // Sw1c Voltage = 1.875 V Supplies U15

WRITE_I2C:A9:14 // Sw1c Sequence = 20

WRITE_I2C:AA:01 // Sw1c Freq = 2.0 MHZ

WRITE_I2C:AC:00 // Sw2 Voltage = 0.4 V

WRITE_I2C:AD:14 // Sw2 Sequence = 20

WRITE_I2C:AE:01 // Sw2 Freq = 2 MHZ

//[Extended Page 1 Registers: 0xB0 - 0xBF] ----------------------------------

WRITE_I2C:B0:63 // Sw3A Voltage = 2.55 V

WRITE_I2C:B1:14 // Sw3A Sequence = 20

WRITE_I2C:B2:01 // Sw3A Freq = 2 MHZ, Mode = Single phase

WRITE_I2C:B4:63 // Sw3B Voltage = 2.55 V

WRITE_I2C:B5:14 // Sw3B Sequence = 20

WRITE_I2C:B6:01 // Sw3B Freq = 2 MHZ

WRITE_I2C:B8:00 // Sw4 Voltage = 0.4 V

WRITE_I2C:B9:14 // Sw4 Sequence = 20

WRITE_I2C:BA:01 // Sw4 Freq = 2 MHZ

WRITE_I2C:BC:00 // Swbst Voltage = 5.0 V

WRITE_I2C:BD:14 // Swbst Sequence = 20

//[Extended Page 1 Registers: 0xC0 - 0xCF] ----------------------------------

WRITE_I2C:C0:00 // Vsnvs Voltage = 1.0 V

WRITE_I2C:C4:14 // Vsnvs Sequence = 20

WRITE_I2C:C8:00 // Vgen1 Voltage = 0.8 V

WRITE_I2C:C9:14 // Vgen1 Sequence = 20

WRITE_I2C:CC:00 // Vgen2 Voltage = 0.8 V

WRITE_I2C:CD:14 // Vgen2 Sequence = 20

//[Extended Page 1 Registers: 0xD0 - 0xDF] ----------------------------------

WRITE_I2C:D0:00 // Vgen3 Voltage = 1.8 V

WRITE_I2C:D1:14 // Vgen3 Sequence = 20

WRITE_I2C:D4:00 // Vgen4 Voltage = 1.8 V

WRITE_I2C:D5:14 // Vgen4 Sequence = 20

WRITE_I2C:D8:00 // Vgen5 Voltage = 1.8 V

WRITE_I2C:D9:14 // Vgen5 Sequence = 20

WRITE_I2C:DC:00 // Vgen6 Voltage = 1.8 V

WRITE_I2C:DD:14 // Vgen6 Sequence = 20

//[Extended Page 1 Registers: 0xE0 - 0xEF] ----------------------------------

WRITE_I2C:E0:07 // Power-up DVS = 6.25 mV/us, SeqCLK = 4 ms, PWRON config = 0

WRITE_I2C:E1:07 // Power-up DVS = 6.25 mV/us, SeqCLK = 4 ms, PWRON config = 0

WRITE_I2C:E2:07 // Power-up DVS = 6.25 mV/us, SeqCLK = 4 ms, PWRON config = 0

WRITE_I2C:E8:00 // Power Good = Disabled

//[Extended Page 1 Registers: 0xF0 - 0xFF] ----------------------------------

WRITE_I2C:FF:08 // I2C Device Address = 0x08

//===========================================================================

// PROGRAMMING COMMANDS FOLLOW

//===========================================================================

WRITE_I2C:E4:02 // FUSE POR=1 (This Enables OTP Programming)

WRITE_I2C:E5:02 // FUSE POR=1 (This Enables OTP Programming)

WRITE_I2C:E6:02 // FUSE POR=1 (This Enables OTP Programming)

//---------------------------------------------------------------------------

WRITE_I2C:F0:1F // Enable ECC for fuse banks 1 to 5

WRITE_I2C:F1:1F // Enable ECC for fuse banks 6 to 10

WRITE_I2C:7F:02 // Access PF0100 EXT Page2

WRITE_I2C:D0:1F // Set Auto ECC for fuse banks 1 to 5

WRITE_I2C:D1:1F // Set Auto ECC for fuse banks 6 to 10

//---------------------------------------------------------------------------

WRITE_I2C:F1:00 // Reset Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F2:00 // Reset Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F3:00 // Reset Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F4:00 // Reset Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F5:00 // Reset Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F6:00 // Reset Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F7:00 // Reset Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F8:00 // Reset Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F9:00 // Reset Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:FA:00 // Reset Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

//---------------------------------------------------------------------------

VPGM:ON // Turn ON 9.5 V supply for PF0100A. Turn ON 9.0 V supply for PF0100.

// VPGM:ON turns on supply to the VDDOTP pin

DELAY:500 // Adds 500 msec delay to allow VPGM time to ramp up

//---------------------------------------------------------------------------

// PF0100 OTP MANUAL-PROGRAMMING (BANK 1 thru 10)

//---------------------------------------------------------------------------

// BANK 1

//---------------------------------------------------------------------------

WRITE_I2C:F1:03 // Set Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F1:0B // Set Bank 1 ANTIFUSE_EN

DELAY:100 // Allow 100 ms for PF0100A. Use 50 ms for PF0100.

WRITE_I2C:F1:03 // Reset Bank 1 ANTIFUSE_EN

WRITE_I2C:F1:00 // Reset Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

//---------------------------------------------------------------------------

// BANK 2

//---------------------------------------------------------------------------

WRITE_I2C:F2:03 // Set Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F2:0B // Set Bank 2 ANTIFUSE_EN

DELAY:100 // Allow 100 ms for PF0100A. Use 50 ms for PF0100.

WRITE_I2C:F2:03 // Reset Bank 2 ANTIFUSE_EN

WRITE_I2C:F2:00 // Reset Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

//---------------------------------------------------------------------------

// BANK 3

//---------------------------------------------------------------------------

WRITE_I2C:F3:03 // Set Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F3:0B // Set Bank 3 ANTIFUSE_EN

DELAY:100 // Allow 100ms for PF0100A. Use 50 ms for PF0100.

WRITE_I2C:F3:03 // Reset Bank 3 ANTIFUSE_EN

WRITE_I2C:F3:00 // Reset Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

//---------------------------------------------------------------------------

// BANK 4

//---------------------------------------------------------------------------

WRITE_I2C:F4:03 // Set Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F4:0B // Set Bank 4 ANTIFUSE_EN

DELAY:100 // Allow 100ms for PF0100A. Use 50 ms for PF0100.

WRITE_I2C:F4:03 // Reset Bank 4 ANTIFUSE_EN

WRITE_I2C:F4:00 // Reset Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

//---------------------------------------------------------------------------

// BANK 5

//---------------------------------------------------------------------------

WRITE_I2C:F5:03 // Set Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F5:0B // Set Bank 5 ANTIFUSE_EN

DELAY:100 // Allow 100 ms for PF0100A. Use 50 ms for PF0100.

WRITE_I2C:F5:03 // Reset Bank 5 ANTIFUSE_EN

WRITE_I2C:F5:00 // Reset Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

//---------------------------------------------------------------------------

// BANK 6

//---------------------------------------------------------------------------

WRITE_I2C:F6:03 // Set Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F6:0B // Set Bank 6 ANTIFUSE_EN

DELAY:100 // Allow 100ms for PF0100A. Use 50 ms for PF0100.

WRITE_I2C:F6:03 // Reset Bank 6 ANTIFUSE_EN

WRITE_I2C:F6:00 // Reset Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

//---------------------------------------------------------------------------

// BANK 7

//---------------------------------------------------------------------------

WRITE_I2C:F7:03 // Set Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F7:0B // Set Bank 7 ANTIFUSE_EN

DELAY:100 // Allow 100 ms for PF0100A. Use 50 ms for PF0100.

WRITE_I2C:F7:03 // Reset Bank 7 ANTIFUSE_EN

WRITE_I2C:F7:00 // Reset Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

//---------------------------------------------------------------------------

// BANK 8

//---------------------------------------------------------------------------

WRITE_I2C:F8:03 // Set Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F8:0B // Set Bank 8 ANTIFUSE_EN

DELAY:100 // Allow 100 ms for PF0100A. Use 50 ms for PF0100.

WRITE_I2C:F8:03 // Reset Bank 8 ANTIFUSE_EN

WRITE_I2C:F8:00 // Reset Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

//---------------------------------------------------------------------------

// BANK 9

//---------------------------------------------------------------------------

WRITE_I2C:F9:03 // Set Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:F9:0B // Set Bank 9 ANTIFUSE_EN

DELAY:100 // Allow 100 ms for PF0100A. Use 50 ms for PF0100.

WRITE_I2C:F9:03 // Reset Bank 9 ANTIFUSE_EN

WRITE_I2C:F9:00 // Reset Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

//---------------------------------------------------------------------------

// BANK 10

//---------------------------------------------------------------------------

WRITE_I2C:FA:03 // Set Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

WRITE_I2C:FA:0B // Set Bank 10 ANTIFUSE_EN

DELAY:100 // Allow 100 ms for PF0100A. Use 50 ms for PF0100.

WRITE_I2C:FA:03 // Reset Bank 10 ANTIFUSE_EN

WRITE_I2C:FA:00 // Reset Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits

//---------------------------------------------------------------------------

WRITE_I2C:D0:00 // Clear

WRITE_I2C:D1:00 // Clear

//---------------------------------------------------------------------------

VPGM:OFF // Turn off 8.5 V Boost Supply

DELAY:500 // Adds delay to allow VPGM to bleed off

PWRON:LOW // PWRON LOW to reload new OTP data

DELAY:500

PWRON:HIGH

//After OTP programming is complete by following the above steps, read the registers 0xA0 to 0xE8

//in Extended Page 1 and compare to the required register values as in the script. Additionally,

//read the ECC Interrupt bit, OTP_ECCI in register 0x0E. If there is an error in the programmed

//values or if the OTP_ECCI bit is set to 1, reject the part as the programming process resulted in errors.

Outcomes