fx3 reset issue

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

cross mob
JoSc_1279791
Level 1
Level 1

We have a custom board including an FX3 and a Xilinx Kintex Ultrascale device. The FX3 is connected to I2C EEPROMs (24FC1025-I/SM) for boot purposes. The pmode pins are set to "I2C boot with USB fall-back). The RESET_n pin of the FX3 is connected to one of the Xilinx GPIOs as well as to a push button with a weak pull-up (20k).

During JTAG loading of the Xilinx, I noticed that  sometimes the FX3 would come up with the bootloader PID, indicating that it hadn't booted from I2C as expected. So I included  a startup state machine to hold the RESET_n pin low for 10ms at power up, but that seems to fail some times as well. The indication is always that the FX3 comes up with the bootloader PID (04b4:00f3). At that point, even pressing the push button (which grounds the reset pin) doesn't seem to help and the only resolution is to power cycle the board.

Any ideas what could be happening there? Are there any conditions on how the RESET_n needs to be asserted?

0 Likes
1 Solution

Hello,

- Can you please capture the waveform on the RESET pin of FX3 along with the SDA line?

- Also, in case you can capture the I2C trace using a protocol analyzer, it would be easier to identify the data that is being transferred.

EDIT: When the FX3 RESET_n pin asserted during the boot-up process is going on, the I2C line might be at any state (either HIGH or LOW). If the FX3 is reset when either of the I2C line is LOW, the FX3 I2C master will assume that the I2C bus is being in use by another I2C master and hence the reading of firmware from EEPROM will fail. To overcome this, the I2C EEPROM power needs to be recycled. FX3 RESET_n assertion would not resolve this issue.


Hence, it is essential that the I2C lines are logic HIGH during the boot process.

Best regards,
Srinath S

View solution in original post

0 Likes
15 Replies
NoriTan
Employee
Employee
25 sign-ins 5 questions asked 10 sign-ins

It seems that the I2C boot sequence failed to start with the bootloader.

What is the I2C bus clock speed?

The I2C speed is specified by the 3rd byte of the I2C EEPROM.

If you specified higher I2C speed like 1MHz, please try with slower clock speed.

Regards,

Noriaki

0 Likes

I am compiling the I2C image with the flag "-i2cconf 1E". So if I interpret the manual correctly, this should mean that the I2C speed bits are 01, which should put the speed at 400kHz. This doesn't seem to be the issue.

0 Likes

Hello,

- Have you built the firmware IMG file through the Eclipse IDE?

- Did you program the IMG file onto the EEPROM through the Cypress USB Control Center?

- Are there any activities on the I2C lines during the boot-up of FX3?

- FX3 RESET pin needs to be de-asserted for the boot-loader to run. So, only after the RESET pin is de-asserted, the FX3 boot-loader loads the firmware from the EEPROM.

- Is the RESET pulse de-asserted at least 1ms after the VCC supply is stable?

Best regards,

Srinath S

0 Likes

- Yes, the image has been built through the Eclipse IDE

- Yes, the image has been programmed through the Cypress USB Control Center

- I have not checked yet any specifics of the I2C transactions during boot, but I do see I2C activity

-

- The reset is de-asserted 100ms after power up, so that should be plenty of time for he VCC to be stable

0 Likes

Hello,

- Please check the I2C lines for any activity during boot-up. Are the initial 'CY' signature bytes sent successfully?

- Have you used an EEPROM that has been mentioned in the AN76405 and ensured that the bits are correspondingly set?

Best regards,

Srinath S

0 Likes

We are using two Microchip 24FC1025-I/SM memories to store the image for the FX3. Those are operated at 1.8V. The bits set in the image are 0x1E, which means the I2C transactions are at 400kHz, 128kB memory, which sounds correct to me.Also, when I don't do the reset, the boot seems to complete correctly, so the image must be correct. I have checked that I see I2C activity during boot, but have not analyzed the individual transactions, yet.

0 Likes

Please let me confirm the size of .img file.

If the size is larger than 128kB, multiple I2C EEPROMs are required to store the binary.

Regards,

Noriaki

0 Likes

Yes, that is correct. We are using two of these devices, with the address bits set accordingly

0 Likes

pastedImage_0.png

0 Likes

I found an old document in 2011 which is obsoleted now.

GS004180.png

It seems that the connection of the address pins are correct.

Please let me confirm if the VIO5 is connected to the 1.8V power supply.

Regards,

Noriaki

0 Likes

Yes, VIO5 (as well as VIO1_1, VIO1, VIO2, VIO3, VIO4) are all connected to 1.8V

0 Likes

Hello,

- Can you please provide more information on the below statement? Kindly, explain the sequence followed.

"Also, when I don't do the reset, the boot seems to complete correctly"

- When the failure is happening, please capture the I2C line captures and let me know the observations.

Best regards,

Srinath S

0 Likes

What is meant by this statement is the following:

Our design has an FPGA pin connected to the RESET_n line of the FX3. When I tri-state this pin, so that now signal if going from the FPGA to the FX3 RESET_n, then the boot process succeeds.

I will try to attach a scope to the I2C lines and will let you know what I observe, might be a few days until I can get to that, though.

0 Likes

I looked at the SDA pin on the EEPROM for the two different cases:

This first picture is when boot was working. One can see the I2C transaction starting at power up, then there is a small pause, and then it loads again:

DSC_0832.JPG

Here then is the picture, when the boot fails after the reset from the FPGA:

DSC_0831.JPG

0 Likes

Hello,

- Can you please capture the waveform on the RESET pin of FX3 along with the SDA line?

- Also, in case you can capture the I2C trace using a protocol analyzer, it would be easier to identify the data that is being transferred.

EDIT: When the FX3 RESET_n pin asserted during the boot-up process is going on, the I2C line might be at any state (either HIGH or LOW). If the FX3 is reset when either of the I2C line is LOW, the FX3 I2C master will assume that the I2C bus is being in use by another I2C master and hence the reading of firmware from EEPROM will fail. To overcome this, the I2C EEPROM power needs to be recycled. FX3 RESET_n assertion would not resolve this issue.


Hence, it is essential that the I2C lines are logic HIGH during the boot process.

Best regards,
Srinath S

0 Likes