I've made some modification to the FPGA image of Pluto, and using JTAG to update the FPGA image works perfectly. But when I build the firmware and load it (either mount or DFU mode) the firmware doesn't get updated.
I've integrated my code in HDL submodule of the firmware repo at https://github.com/analogdevicesinc/plutosdr-fw. I do make at the top directory and it builds the new FPGA bit file along the way. I use this bit file for JTAG programming and it works perfectly. I don't get any errors, you can find the log attached (It has both stdout and stderr outputs). But when I use mount or DFU mode to flash the device, the flashing goes smoothly as expected (blinking and all), but the firmware is not updated and I get the default image behavior. I even tried only sending 0xDEADBEEF out, but again it sends me normal samples from the default image. The interesting thing is when I wanted to update the default firmware from the website, using normal copy in Windows worked, but for the new image trying Windows or Linux did not change the problem either.
I would appreciate any suggestions or pointers to how I can debug this issue.
P.S.: after updating the image with JTAG I have to unbind and rebind the AXI dmas on the integrated ARM to receive the data, but that's not the case when updating the firmware and it brings up the default image.
Sorry for the late reply. Pluto questions need to be put in the Virtual Classroom subforum, and I can't move things here.
Anyway, it seems like there is something wrong with the way you are creating your custom firmware images. Does the HDF file in the build folder match the expected HDF file when you build things manually from the "hdl" directory (by comparing checksums)?
Thank you Travis for your response. I diffed the hdf files (the one you mentioned with the hdf file in hdl/projects/pluto/pluto.sdk/) and they are the same. Also I check the pluto_vivado.log in hdl/projects/pluto to make sure my module is there during the build. system_top.bit file in build folder is also the same as the one I use for programming.
P.S.: Per your suggestion I tried posting the question to Virtual Classroom subforum, but it was marked as spam!
With the custom firmware loaded, can you provide the "Version Information" table from the index.html on Pluto's mass storage device.
There is an info.html with the following content:
After I load my firmware this file doesn't change (diffed). Somehow new firmware is not loading, although I follow the linux firmware loading steps from wiki.analog.com/.../firmware
I've also tested diagnostic_report = 1, but still less than a minute the drive shows up and there is no generated files. Even the config file is reset and diagnostic_report is 0.
I'm gonna do 2 more tests, 1) solder a wire to the TX to see if it generates any messages during the failing upgrade, 2) update the repo and rebuild the image. Please let me know if you think I can do something else.
Here is output of serial bus in normal reset (power cycle):
And when I upload the firmware image and set diagnostic_report to 1:
Not sure if those missing index_*.html is a sign or dhcpd failure.
Can you try dropping the entire zip of an older firmware (not v0.30) and ejecting the device. Then check the index.html page to make sure that it is changing.
I tried with v0.29 and v0.25, again the process finishes earlier than it should and no change. I loaded boot.frm alongside pluto.frm, or all the contents of the zip file, or the zip file itself, still no change. Even I tried DFU mode and it didn't downgrade:
and here is the log on serial which seems to be correct (I used ssh and device_reboot sf to go to DFU mode):
I guess I can change the question to "help, stuck firmware!"
P.S.: dfu-util needs sudo but it was not mentioned in https://wiki.analog.com/university/tools/pluto/users/firmware
This sounds like a protected flash.
Can you break into u-boot via the UART terminal on the JTAG pins.
While the system boots conterminously press CTRL-C.
At the u-boot prompt enter:
sf probe && sf protect unlock 0 100000 && sf protect lock 0 100000