- Cyclone IV
- NIOS II Soft Core Processor
- EPCQ128 A used for holding fabric images
- Programming file = .rpd (each byte bit swapped before writing to flash per documentation)
So in our system, we have an EPCQ128 A which houses 3 images. A factory image, and two application images which live at 0x600000 and 0xB00000 offsets respectively.
I am able to talk with the Remote Update IP effectively. I can trigger a reconfiguration event (which fails), change the boot address and read the status registers. However, any reconfiguration event fails, and falls back to the default (factory) image. When this happens, I read the RU_RECONFIG_TRIGGER_CONDITIONS register, I get a value of 0x4 which indicates "Bit 2—nstatus_source: nSTATUS asserted by an external device as the result of an error"
There is no further description of this error, and I'm not sure how to debug this. What exactly does this error mean, and how do I go about resolving it?
Am I using the wrong programming file? (Some documentation says .rpd others say .rbf)
Any thoughts on this?
I've tried every file type I know how, still with no luck.
- I made sure to generate the .rpd file using a version of Quartus that supports EPCQ128A
- I've tried both big and small endian versions of the above .rpd file
- I made sure to bit swap every byte before writing it to flash memory
- I can write and read back the memory contents of EPCQ128A accurately (aka confirmed data is getting written properly)
I've since resolved this issue. I believe the root of the issue was that I wasn't doing bit swapping as I thought during my experiments. Once I grabbed the right file, and bit swapped the payload, I was able to confirm that the load from .jic and .rpd were binary equivalents to each other. At this point, I was able to succeed in a reconfiguration event.
Note: The .rpd that finally worked was created for an EPCS128, even though I am using an EPCQ128A flash memory device. It turns out in my use case (although not every use case) this file format works just fine.