Announcements

From sunburn to sun earn – we’ve got the power! Watch our #poweringgreen videos now.

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
Camstillo
Level 1
Level 1
5 sign-ins First like received First reply posted

Good morning,

I recently bought the DB296 dev board for the IRPS5401. I'm attempting to program it using a generic I2C interface (not the Infineon programmer) made of an STM32 dev board. After loading it up in normal mode (not setting MTP to 3.3V before going to program), I read register 56 over I2C and see that all the programmable images have been used. I was hoping to use this dev board to get a workable image for my product, but from what I see the memory is completely flashed. Was it supposed to come from the factory completely programmed? The datasheet for the dev board has no full part number to indicate whether it was the fully programmed option. Neither does the chip on the board. Is there a way to change the selected image over I2C instead of changing the MTP resistor? That way I could at least do some testing of the current capabilities and noise characterization. 

I made an image using the PowIR Center application, and made an attempt to flash it, but I don't think it did anything because after reading important memory locations, I hadn't changed anything. 

Thank you!

0 Likes
1 Solution
Nishanth
Moderator
Moderator
Moderator
100 solutions authored 10 likes given 100 replies posted

Hello @Camstillo ,

Thank you for contributing to the Infineon community.

0x56[13:8] shows the total images that can be stored in NVM. It does not indicate the number of images that are already programmed.

Nishanth_0-1691738344812.png

Kindly check 0x58 and 0x5A to verify the number of user images programmed.

Nishanth_1-1691738344814.png

For example: If 0x58[15:0] + 0x5A[15:0] = 00000000 00000000 00000000 00011111, This means that 5 user images have been programmed.

The part in the evaluation board comes with one single image configuration file loaded.

The prog_max register is set to 0 in the evaluation board and hence the feature is disabled.

Irrespective of the RMTP value the last single image configuration file that is programmed will be loaded.

If the prog_max function is used then the following conditions hold true:

  • If prog_max is smaller than the number of programmed segments, the last segment will be used.
  • If prog_max is bigger than the number of programmed segments and RMTP points to a valid segment, this segment will be used
  • If RMTP points to an unprogrammed segment, the part does not start.

Kindly find the documents below that will aid you in doing the programming of the part.

https://www.infineon.com/dgdl/Infineon-DC-DC_POL_IRPS5401_Programming_Guide-AdditionalTechnicalInfor...

https://www.infineon.com/dgdl/Infineon-UG-IRSP5401Demoboard-UM-v01_02-EN.pdf?fileId=5546d4625e37f35a...

Regards,

Nishanth

View solution in original post

6 Replies
lock attach
Attachments are accessible only for community members.
Camstillo
Level 1
Level 1
5 sign-ins First like received First reply posted

Not only that, but another issue is that the PROG_MAX register does not have enough bits to accommodate 26 user images. In the IRPS5401 FAQ (linked below), it says: "The first 15 images can be accessed with the help of an MTP resistor. PROG_MAX register defines the maximum number (maximum is 15) of USER images that can be selected by the resistor at the MTP pin. If the number of written images exceeds 15, the last written image will be loaded. If the value selected by the resistor points to an unprogrammed segment, no image will be loaded." So between the MTP resistor and the cnfg_nvm_prog_max (actual name, it's really confusing that they call it prog_max) register, there are not enough options to select the 26 bits. It says that the resistor selects USER images, so how would you then select images which were preprogrammed? Do the values from the cnfg_nvm_prog_max register add with the resistor or something? On that same dev board as described above, the resistor used is 12.1k, which is greater than the maximum offset resistance of 11k. Does that make it an offset greater than +14, or does that mean the resistor has no effect on the offset? If the resistor has no effect, how do I select the image which is being used?

To test this, I wrote a value between 0 and F to register 0x00, bits [11:8], in normal operation mode. I then checked register 0x52, bits [11:8], which show the user image selected. I was able to change this but saw no change on the output voltage. As stated in the first post, register 0x56, bits [13:8], say that I have 26 images programmed. This means at least one of the changes I made above should have resulted in a change in output voltage, but nothing happened. Any help would be much appreciated.

Thanks!

Nishanth
Moderator
Moderator
Moderator
100 solutions authored 10 likes given 100 replies posted

Hello @Camstillo ,

Thank you for contributing to the Infineon community.

0x56[13:8] shows the total images that can be stored in NVM. It does not indicate the number of images that are already programmed.

Nishanth_0-1691738344812.png

Kindly check 0x58 and 0x5A to verify the number of user images programmed.

Nishanth_1-1691738344814.png

For example: If 0x58[15:0] + 0x5A[15:0] = 00000000 00000000 00000000 00011111, This means that 5 user images have been programmed.

The part in the evaluation board comes with one single image configuration file loaded.

The prog_max register is set to 0 in the evaluation board and hence the feature is disabled.

Irrespective of the RMTP value the last single image configuration file that is programmed will be loaded.

If the prog_max function is used then the following conditions hold true:

  • If prog_max is smaller than the number of programmed segments, the last segment will be used.
  • If prog_max is bigger than the number of programmed segments and RMTP points to a valid segment, this segment will be used
  • If RMTP points to an unprogrammed segment, the part does not start.

Kindly find the documents below that will aid you in doing the programming of the part.

https://www.infineon.com/dgdl/Infineon-DC-DC_POL_IRPS5401_Programming_Guide-AdditionalTechnicalInfor...

https://www.infineon.com/dgdl/Infineon-UG-IRSP5401Demoboard-UM-v01_02-EN.pdf?fileId=5546d4625e37f35a...

Regards,

Nishanth

lock attach
Attachments are accessible only for community members.

Thank you for clearing that up! The difference between the MTP resistor and prog_max register is a little confusing, but I guess it makes sense for cases with preprogrammed devices that wouldn't be connected over I2C. 

I have more questions though. I finally just bought the Infineon programmer that goes with the PowIR software, and I was able to flash an image that I created onto the dev board. I want to be able to flash that same image to devices on my product. I'm using a logic analyzer to view the I2C lines and basically copy those commands to a processor on my product at initialization. I noticed that while flashing the dev board, the programmer never puts the device into its "program" state. If you look on page 3 of the programming guide, there is a configuration that the IC needs to be in to be able to flash the OTP section (at least as I understand it). You have to pull all the enable lines low and put +3.3V on the MTP pin for at least 10ms before POR. On the dev board, I cannot see a mechanism in the schematic for the I2C to perform a POR at all. I did not put the board in a program mode before flashing, I just pulled the enable lines low using the switches to disable the outputs. The programmer still somehow managed to flash the board since after POR, I got the same voltages I had expected (with the programmer disconnected). Based my understanding from the programming guide, I should have had to put the device into program mode before flashing, but clearly this is not the case. Can you expand on how this was possible? Perhaps could you point to any documents which would explain how the OTP works which goes into more detail? I have the memory map, but that only helps with decoding the I2C.

Thank you for your assistance,

Cameron

0 Likes
Nishanth
Moderator
Moderator
Moderator
100 solutions authored 10 likes given 100 replies posted

Hello @Camstillo ,

Pulling the enable lines low and applying 5V to the Vcc pin is sufficient to do the OTP programming.

3.3V is applied to the MTP pin only when you want to operate the device in test mode. In test mode, the I2C address is fixed at 0Ah (7-bit) no matter what value is stored in the I2C register.  If test mode is not used  I2C address of a device is determined by the content of register 0x20[14:8].

Kindly refer to section 1 programming overview in the programming guide document and section 9.1 One-time Programmable (OTP) Memory in the datasheet for details pertaining to OTP.

Regards,

Nishanth

 

 

 

lock attach
Attachments are accessible only for community members.

I can see that you're correct because the programmer works, but the programming guide's instructions say that the MTP pin has to be pulled to 3.3V to program. Clearly, you don't have to be in this test mode, and you should really change your documentation if that's not the case because you wouldn't know that from just reading the guide.

Okay so another question then. I'm looking at the programmer output through a logic analyzer to pick figure out which commands are sent from the Infineon programmer to the board to change the NVM. In the programming guide, it makes it sound like you have to program each memory page individually. From the output on my analyzer, the programmer is not doing this. From what I can see, your programmer seems to be sending a bunch of PMBus commands to set volatile memory registers, then somehow flashes those into the NVM. The programming guide gives no guidance on how this is done, or why this is preferred to programming the way it says in the guide. Are there any documents that break down the usage of PMBus for programming? I'm trying to go through the PMBus documentation as well as the memory map for the device, but it is difficult to determine which of the instructions is a command, register address, or data. 

I made an excel file which shows the commands for programming. It seems that the first section uses PMBus commands to set registers, and the second part checks all registers and verifies it with the .txt file generated by PowIR Center. 

Is there any way I could set up a meeting with one of your applications engineers? I feel that I could sort this out talking on the phone much faster.

Thanks!

0 Likes
Nishanth
Moderator
Moderator
Moderator
100 solutions authored 10 likes given 100 replies posted

Hello @Camstillo ,

Section 3.1 of the programming guide mentions about both normal operation and test mode operation. It states that 

"In this guide, the test mode will be used for all register read and write operations."

Nishanth_0-1692125279401.png

Test mode is not a necessity to perform the programming.

Programming can be done through PMBUS commands using the USB005 and PowIRCenter GUI.

Programming can also be done by following the procedure in the programming guide.

In both cases, you will be able to correctly flash the device.

The purpose of the programming guide is to provide the user with the information required to perform the programming steps in their own programming environment.

There are no other documents available that break down the usage of PMBUS for programming.

IRPS5401 command set document explains about all the PMBUS commands that are used for the programming.

Regards,

Nishanth

 

 

0 Likes