-
Notifications
You must be signed in to change notification settings - Fork 251
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Attempting to Flash SPI PROM of a custom board - Dragon-L #460
Comments
Yes. To be able to use openFPGALoader with a FPGA not already supported you have to update list of idcode (Yes, A better way is to import for some family all variants to avoid this type of issue). But to update the flash with a bitstream you needs a sort of bridge (called spiOverJtag). For Xilinx you can't directly have access to the flash by using JTAG and you needs to load a gateware to interconnect these two interfaces. But unfortunately one bitstream is required by FPGA type (family, size, package), this why spiOverJtag directory contains a bunch of bitstreams. For this step you have to follow approach similar to this commit |
Thank you so much for getting back to me. The way Xilinx accesses the SPI over JTAG is interesting. I will try looking around and getting the bitstream for |
I figured out how to generate the bitstream:
I've pushed all the changes I've made here for your reference. |
Jedec ID seems wrong must be 0x2014. There is a problem with communication but I suspect the chip is in quad mode instead of SPI mode. But I must check if it's possible for your board. |
In fact there is no schematics available... Could you also try with other JTAG cable? like ftdi? |
I'm not too sure about quad mode. I will also contact the board manufacturer to see if I can get more details and maybe the schematic. Regarding another JTAG cable, I'll have to order one. Regarding another JTAG cable, do you think I can use this to program the FPGA? I've never worked with FPGAs before, so I'm a little unsure about how I should go ahead. |
any FTDI do the job, the only you have to check is the pin voltage: usually for a jtag probe, jtag pins are powered by a power pins from the board. |
That is weird. I will try dirty JTAG on Bluepill, an ST-Link v2 clone and a Raspberry Pi pico to see if I can get it to work. In the event it doesn't, I will purchase this FTDI cable and try again. In the meantime, is there any signal that you would want me to verify by using an oscilloscope? |
I think the best way is I have a physical to a similar board. Its not always easy to see reasons why an issue like here. |
I flashed a Bluepill board I had lying around with the I'm starting to think this is because I'm not using all the JTAG pins. I'm only using the I will try buying a smaller 14-pin connector and connecting the remaining pins ( Attaching a picture for your reference. |
Don't buy anything: it's not required. Tests with altera blaster and dirtyJTAG are enough: the problem isn't related to the cable... |
Oh okay. Do you think its because the Pasting the output of ❯ export PATH=$PATH:/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64
❯ python3 build.py xc6slx25tcsg324
Successfully created the directory tmp_xc6slx25tcsg324
xtclsh spiOverJtag.tcl
INFO:HDLCompiler:1845 - Analyzing Verilog file
"/home/srikar/projects/dragon-l/openFPGALoader/spiOverJtag/xilinx_spiOverJtag
.v" into library work
INFO:ProjectMgmt - Parsing design hierarchy completed successfully.
INFO:TclTasksC:2116 - The automatic calculation of top has been turned-off.
Please set the new top explicitly by running the "project set top" command.
To re-calculate the new top automatically, set the "Auto Implementation Top"
property to true.
xtclsh spiOverJtag_run.tcl spiOverJtag.xise
INFO:HDLCompiler:1845 - Analyzing Verilog file
"/home/srikar/projects/dragon-l/openFPGALoader/spiOverJtag/xilinx_spiOverJtag
.v" into library work
INFO:ProjectMgmt - Parsing design hierarchy completed successfully.
Started : "Synthesize - XST".
Running xst...
Command Line: xst -intstyle ise -ifn "/home/srikar/projects/dragon-l/openFPGALoader/spiOverJtag/tmp_xc6slx25tcsg324/spiOverJtag.xst" -ofn "/home/srikar/projects/dragon-l/openFPGALoader/spiOverJtag/tmp_xc6slx25tcsg324/spiOverJtag.syr"
Reading design: spiOverJtag.prj
=========================================================================
* HDL Parsing *
=========================================================================
Analyzing Verilog file "/home/srikar/projects/dragon-l/openFPGALoader/spiOverJtag/xilinx_spiOverJtag.v" into library work
Parsing module <spiOverJtag>.
=========================================================================
* HDL Elaboration *
=========================================================================
Elaborating module <spiOverJtag>.
Elaborating module <BSCAN_SPARTAN6(JTAG_CHAIN=1)>.
=========================================================================
* HDL Synthesis *
=========================================================================
Synthesizing Unit <spiOverJtag>.
Related source file is "/home/srikar/projects/dragon-l/openFPGALoader/spiOverJtag/xilinx_spiOverJtag.v".
Found 1-bit register for signal <csn>.
Summary:
inferred 1 D-type flip-flop(s).
inferred 1 Multiplexer(s).
Unit <spiOverJtag> synthesized.
=========================================================================
HDL Synthesis Report
Macro Statistics
# Registers : 1
1-bit register : 1
# Multiplexers : 1
1-bit 2-to-1 multiplexer : 1
=========================================================================
=========================================================================
* Advanced HDL Synthesis *
=========================================================================
=========================================================================
Advanced HDL Synthesis Report
Macro Statistics
# Registers : 1
Flip-Flops : 1
=========================================================================
=========================================================================
* Low Level Synthesis *
=========================================================================
Optimizing unit <spiOverJtag> ...
Mapping all equations...
Building and optimizing final netlist ...
Found area constraint ratio of 100 (+ 5) on block spiOverJtag, actual ratio is 0.
Final Macro Processing ...
=========================================================================
Final Register Report
Macro Statistics
# Registers : 1
Flip-Flops : 1
=========================================================================
=========================================================================
* Partition Report *
=========================================================================
Partition Implementation Status
-------------------------------
No Partitions were found in this design.
-------------------------------
=========================================================================
* Design Summary *
=========================================================================
Clock Information:
------------------
-----------------------------------+------------------------+-------+
Clock Signal | Clock buffer(FF name) | Load |
-----------------------------------+------------------------+-------+
sck_OBUF | NONE(fsm_csn) | 1 |
-----------------------------------+------------------------+-------+
INFO:Xst:2169 - HDL ADVISOR - Some clock signals were not automatically buffered by XST with BUFG/BUFR resources. Please use the buffer_type constraint in order to insert these buffers to the clock signals to help prevent skew problems.
Asynchronous Control Signals Information:
----------------------------------------
No asynchronous control signals found in this design
Timing Summary:
---------------
Speed Grade: -3
Minimum period: No path found
Minimum input arrival time before clock: 1.985ns
Maximum output required time after clock: 3.597ns
Maximum combinational path delay: 3.187ns
=========================================================================
Process "Synthesize - XST" completed successfully
Started : "Translate".
Running ngdbuild...
Command Line: ngdbuild -intstyle ise -dd _ngo -nt timestamp -uc /home/srikar/projects/dragon-l/openFPGALoader/spiOverJtag/constr_xc6s_t_csg324.ucf -p xc6slx25t-csg324-3 spiOverJtag.ngc spiOverJtag.ngd
Command Line: /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/unwrapped/ngdbuild -intstyle
ise -dd _ngo -nt timestamp -uc
/home/srikar/projects/dragon-l/openFPGALoader/spiOverJtag/constr_xc6s_t_csg324.u
cf -p xc6slx25t-csg324-3 spiOverJtag.ngc spiOverJtag.ngd
Reading NGO file
"/home/srikar/projects/dragon-l/openFPGALoader/spiOverJtag/tmp_xc6slx25tcsg324/s
piOverJtag.ngc" ...
Gathering constraint information from source properties...
Done.
Annotating constraints to design from ucf file
"/home/srikar/projects/dragon-l/openFPGALoader/spiOverJtag/constr_xc6s_t_csg324.
ucf" ...
Resolving constraint associations...
Checking Constraint Associations...
Done...
Checking expanded design ...
Partition Implementation Status
-------------------------------
No Partitions were found in this design.
-------------------------------
NGDBUILD Design Results Summary:
Number of errors: 0
Number of warnings: 0
Writing NGD file "spiOverJtag.ngd" ...
Total REAL time to NGDBUILD completion: 1 sec
Total CPU time to NGDBUILD completion: 1 sec
Writing NGDBUILD log file "spiOverJtag.bld"...
NGDBUILD done.
Process "Translate" completed successfully
Started : "Map".
Running map...
Command Line: map -intstyle ise -p xc6slx25t-csg324-3 -w -logic_opt off -ol high -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -mt off -detail -ir off -pr off -lc off -power off -o spiOverJtag_map.ncd spiOverJtag.ngd spiOverJtag.pcf
Using target part "6slx25tcsg324-3".
Mapping design into LUTs...
Running directed packing...
Running delay-based LUT packing...
Updating timing models...
INFO:Map:215 - The Interim Design Summary has been generated in the MAP Report
(.mrp).
Running timing-driven placement...
Total REAL time at the beginning of Placer: 2 secs
Total CPU time at the beginning of Placer: 2 secs
Phase 1.1 Initial Placement Analysis
Phase 1.1 Initial Placement Analysis (Checksum:2d6449dc) REAL time: 2 secs
Phase 2.7 Design Feasibility Check
Phase 2.7 Design Feasibility Check (Checksum:2d6449dc) REAL time: 2 secs
Phase 3.31 Local Placement Optimization
Phase 3.31 Local Placement Optimization (Checksum:d656dd77) REAL time: 2 secs
Phase 4.2 Initial Placement for Architecture Specific Features
Phase 4.2 Initial Placement for Architecture Specific Features
(Checksum:d656dd77) REAL time: 2 secs
Phase 5.36 Local Placement Optimization
Phase 5.36 Local Placement Optimization (Checksum:d656dd77) REAL time: 2 secs
Phase 6.30 Global Clock Region Assignment
Phase 6.30 Global Clock Region Assignment (Checksum:d656dd77) REAL time: 2 secs
Phase 7.3 Local Placement Optimization
Phase 7.3 Local Placement Optimization (Checksum:d656dd77) REAL time: 2 secs
Phase 8.5 Local Placement Optimization
Phase 8.5 Local Placement Optimization (Checksum:d656dd77) REAL time: 2 secs
Phase 9.8 Global Placement
..
..
Phase 9.8 Global Placement (Checksum:e414247b) REAL time: 2 secs
Phase 10.5 Local Placement Optimization
Phase 10.5 Local Placement Optimization (Checksum:e414247b) REAL time: 2 secs
Phase 11.18 Placement Optimization
Phase 11.18 Placement Optimization (Checksum:887b616b) REAL time: 2 secs
Phase 12.5 Local Placement Optimization
Phase 12.5 Local Placement Optimization (Checksum:887b616b) REAL time: 2 secs
Phase 13.34 Placement Validation
Phase 13.34 Placement Validation (Checksum:887b616b) REAL time: 2 secs
Total REAL time to Placer completion: 2 secs
Total CPU time to Placer completion: 2 secs
Running post-placement packing...
Writing output files...
Design Summary:
Number of errors: 0
Number of warnings: 0
Slice Logic Utilization:
Number of Slice Registers: 0 out of 30,064 0%
Number of Slice LUTs: 2 out of 15,032 1%
Number used as logic: 2 out of 15,032 1%
Number using O6 output only: 1
Number using O5 output only: 0
Number using O5 and O6: 1
Number used as ROM: 0
Number used as Memory: 0 out of 3,664 0%
Slice Logic Distribution:
Number of occupied Slices: 2 out of 3,758 1%
Number of MUXCYs used: 0 out of 7,516 0%
Number of LUT Flip Flop pairs used: 2
Number with an unused Flip Flop: 2 out of 2 100%
Number with an unused LUT: 0 out of 2 0%
Number of fully used LUT-FF pairs: 0 out of 2 0%
Number of slice register sites lost
to control set restrictions: 0 out of 30,064 0%
A LUT Flip Flop pair for this architecture represents one LUT paired with
one Flip Flop within a slice. A control set is a unique combination of
clock, reset, set, and enable signals for a registered element.
The Slice Logic Distribution report is not meaningful if the design is
over-mapped for a non-slice resource or if Placement fails.
IO Utilization:
Number of bonded IOBs: 6 out of 190 3%
Number of LOCed IOBs: 6 out of 6 100%
IOB Flip Flops: 1
Specific Feature Utilization:
Number of RAMB16BWERs: 0 out of 52 0%
Number of RAMB8BWERs: 0 out of 104 0%
Number of BUFIO2/BUFIO2_2CLKs: 0 out of 32 0%
Number of BUFIO2FB/BUFIO2FB_2CLKs: 0 out of 32 0%
Number of BUFG/BUFGMUXs: 0 out of 16 0%
Number of DCM/DCM_CLKGENs: 0 out of 4 0%
Number of ILOGIC2/ISERDES2s: 0 out of 272 0%
Number of IODELAY2/IODRP2/IODRP2_MCBs: 0 out of 272 0%
Number of OLOGIC2/OSERDES2s: 1 out of 272 1%
Number used as OLOGIC2s: 1
Number used as OSERDES2s: 0
Number of BSCANs: 1 out of 4 25%
Number of BUFHs: 0 out of 160 0%
Number of BUFPLLs: 0 out of 8 0%
Number of BUFPLL_MCBs: 0 out of 4 0%
Number of DSP48A1s: 0 out of 38 0%
Number of GTPA1_DUALs: 0 out of 1 0%
Number of ICAPs: 0 out of 1 0%
Number of MCBs: 0 out of 2 0%
Number of PCIE_A1s: 0 out of 1 0%
Number of PCILOGICSEs: 0 out of 2 0%
Number of PLL_ADVs: 0 out of 2 0%
Number of PMVs: 0 out of 1 0%
Number of STARTUPs: 0 out of 1 0%
Number of SUSPEND_SYNCs: 0 out of 1 0%
Average Fanout of Non-Clock Nets: 1.10
Peak Memory Usage: 680 MB
Total REAL time to MAP completion: 2 secs
Total CPU time to MAP completion: 2 secs
Mapping completed.
See MAP report file "spiOverJtag_map.mrp" for details.
Process "Map" completed successfully
Started : "Place & Route".
Running par...
Command Line: par -w -intstyle ise -ol high -mt off spiOverJtag_map.ncd spiOverJtag.ncd spiOverJtag.pcf
Constraints file: spiOverJtag.pcf.
Loading device for application Rf_Device from file '6slx25t.nph' in environment /opt/Xilinx/14.7/ISE_DS/ISE/.
"spiOverJtag" is an NCD, version 3.2, device xc6slx25t, package csg324, speed -3
Initializing temperature to 85.000 Celsius. (default - Range: 0.000 to 85.000 Celsius)
Initializing voltage to 1.140 Volts. (default - Range: 1.140 to 1.260 Volts)
INFO:Par:282 - No user timing constraints were detected or you have set the option to ignore timing constraints ("par
-x"). Place and Route will run in "Performance Evaluation Mode" to automatically improve the performance of all
internal clocks in this design. Because there are not defined timing requirements, a timing score will not be
reported in the PAR report in this mode. The PAR timing summary will list the performance achieved for each clock.
Note: For the fastest runtime, set the effort level to "std". For best performance, set the effort level to "high".
Device speed data version: "PRODUCTION 1.23 2013-10-13".
Device Utilization Summary:
Slice Logic Utilization:
Number of Slice Registers: 0 out of 30,064 0%
Number of Slice LUTs: 2 out of 15,032 1%
Number used as logic: 2 out of 15,032 1%
Number using O6 output only: 1
Number using O5 output only: 0
Number using O5 and O6: 1
Number used as ROM: 0
Number used as Memory: 0 out of 3,664 0%
Slice Logic Distribution:
Number of occupied Slices: 2 out of 3,758 1%
Number of MUXCYs used: 0 out of 7,516 0%
Number of LUT Flip Flop pairs used: 2
Number with an unused Flip Flop: 2 out of 2 100%
Number with an unused LUT: 0 out of 2 0%
Number of fully used LUT-FF pairs: 0 out of 2 0%
Number of slice register sites lost
to control set restrictions: 0 out of 30,064 0%
A LUT Flip Flop pair for this architecture represents one LUT paired with
one Flip Flop within a slice. A control set is a unique combination of
clock, reset, set, and enable signals for a registered element.
The Slice Logic Distribution report is not meaningful if the design is
over-mapped for a non-slice resource or if Placement fails.
IO Utilization:
Number of bonded IOBs: 6 out of 190 3%
Number of LOCed IOBs: 6 out of 6 100%
IOB Flip Flops: 1
Specific Feature Utilization:
Number of RAMB16BWERs: 0 out of 52 0%
Number of RAMB8BWERs: 0 out of 104 0%
Number of BUFIO2/BUFIO2_2CLKs: 0 out of 32 0%
Number of BUFIO2FB/BUFIO2FB_2CLKs: 0 out of 32 0%
Number of BUFG/BUFGMUXs: 0 out of 16 0%
Number of DCM/DCM_CLKGENs: 0 out of 4 0%
Number of ILOGIC2/ISERDES2s: 0 out of 272 0%
Number of IODELAY2/IODRP2/IODRP2_MCBs: 0 out of 272 0%
Number of OLOGIC2/OSERDES2s: 1 out of 272 1%
Number used as OLOGIC2s: 1
Number used as OSERDES2s: 0
Number of BSCANs: 1 out of 4 25%
Number of BUFHs: 0 out of 160 0%
Number of BUFPLLs: 0 out of 8 0%
Number of BUFPLL_MCBs: 0 out of 4 0%
Number of DSP48A1s: 0 out of 38 0%
Number of GTPA1_DUALs: 0 out of 1 0%
Number of ICAPs: 0 out of 1 0%
Number of MCBs: 0 out of 2 0%
Number of PCIE_A1s: 0 out of 1 0%
Number of PCILOGICSEs: 0 out of 2 0%
Number of PLL_ADVs: 0 out of 2 0%
Number of PMVs: 0 out of 1 0%
Number of STARTUPs: 0 out of 1 0%
Number of SUSPEND_SYNCs: 0 out of 1 0%
Overall effort level (-ol): High
Router effort level (-rl): High
Starting initial Timing Analysis. REAL time: 1 secs
Finished initial Timing Analysis. REAL time: 1 secs
Starting Router
Phase 1 : 17 unrouted; REAL time: 2 secs
Phase 2 : 15 unrouted; REAL time: 2 secs
Phase 3 : 1 unrouted; REAL time: 2 secs
Phase 4 : 1 unrouted; (Par is working to improve performance) REAL time: 2 secs
Updating file: spiOverJtag.ncd with current fully routed design.
Phase 5 : 0 unrouted; (Par is working to improve performance) REAL time: 2 secs
Phase 6 : 0 unrouted; (Par is working to improve performance) REAL time: 2 secs
Phase 7 : 0 unrouted; (Par is working to improve performance) REAL time: 2 secs
Phase 8 : 0 unrouted; (Par is working to improve performance) REAL time: 2 secs
Phase 9 : 0 unrouted; (Par is working to improve performance) REAL time: 2 secs
Phase 10 : 0 unrouted; (Par is working to improve performance) REAL time: 2 secs
Total REAL time to Router completion: 2 secs
Total CPU time to Router completion: 2 secs
Partition Implementation Status
-------------------------------
No Partitions were found in this design.
-------------------------------
Generating "PAR" statistics.
INFO:Par:459 - The Clock Report is not displayed in the non timing-driven mode.
Timing Score: 0 (Setup: 0, Hold: 0)
Asterisk (*) preceding a constraint indicates it was not met.
This may be due to a setup or hold violation.
------------------------------------------------------------------------------------------------------
Constraint | Requested | Actual | Logic | Absolute |Number of
| | | Levels | Slack |errors
------------------------------------------------------------------------------------------------------
All constraints were met.
Generating Pad Report.
All signals are completely routed.
Total REAL time to PAR completion: 2 secs
Total CPU time to PAR completion: 2 secs
Peak Memory Usage: 626 MB
Placer: Placement generated during map.
Routing: Completed - No errors found.
Number of error messages: 0
Number of warning messages: 0
Number of info messages: 2
Writing design to file spiOverJtag.ncd
PAR done!
Process "Place & Route" completed successfully
Started : "Generate Post-Place & Route Static Timing".
Running trce...
Command Line: trce -intstyle ise -v 3 -s 3 -n 3 -fastpaths -xml spiOverJtag.twx spiOverJtag.ncd -o spiOverJtag.twr spiOverJtag.pcf
Loading device for application Rf_Device from file '6slx25t.nph' in environment
/opt/Xilinx/14.7/ISE_DS/ISE/.
"spiOverJtag" is an NCD, version 3.2, device xc6slx25t, package csg324, speed
-3
Analysis completed Tue Jun 4 12:39:53 2024
--------------------------------------------------------------------------------
Generating Report ...
Number of warnings: 0
Total time: 1 secs
Process "Generate Post-Place & Route Static Timing" completed successfully
Started : "Generate Programming File".
Running bitgen...
Command Line: bitgen -intstyle ise -f spiOverJtag.ut spiOverJtag.ncd
Process "Generate Programming File" completed successfully
INFO:TclTasksC:1850 - process run : Generate Programming File is done. |
I must admit its hard to said. Flow looks good and your constraints file too... Maybe trying to disable flash at powerup time using a wire between CS and VCC to have an empty FPGA (flash be reserved by gateware loaded at boot time). |
I will try disabling the flash as the FPGA powers up and let you know how that works. Besides that, I've had success flashing the SPI of the FPGA using the KNJN USBFX2-JTAG development board and the KNJN JTAG cable along with the |
A small update on this. I was trying to get OpenOCD running with the altera blaster and my FPGA. I think the Altera Blaster is at fault here, but I'm not sure. Flashing to SRAM works perfectly as expected. Here is dragon-l-sram.cfg
The command run for the above is as follows: openocd -f dragon-l-sram.cfg
Open On-Chip Debugger 0.12.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
Info : usb blaster interface using libftdi
Info : This adapter doesn't support configurable speed
Info : JTAG tap: xc6s.tap tap/device found: 0x24024093 (mfg: 0x049 (Xilinx), part: 0x4024, ver: 0x2)
Warn : gdb services need one or more targets defined
shutdown command invoke Now, I have a configuration that is probably working, since the SPI flash gets corrupted as after running the command, and the SPI flash is detected correctly. Below is configuration
This is the output of the same: openocd -f dragon-l-spi.cfg
Open On-Chip Debugger 0.12.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
Info : usb blaster interface using libftdi
Info : This adapter doesn't support configurable speed
Info : JTAG tap: xc6s.tap tap/device found: 0x24024093 (mfg: 0x049 (Xilinx), part: 0x4024, ver: 0x2)
Info : JTAG tap: xc6s.tap tap/device found: 0x24024093 (mfg: 0x049 (Xilinx), part: 0x4024, ver: 0x2)
Info : Found flash device 'st m25p80' (ID 0x142020)
Info : sector 0 took 636 ms
Info : sector 1 took 591 ms
Info : sector 2 took 558 ms
Info : sector 3 took 576 ms
read 244520 bytes from file ledglow.bit and flash bank 0 at offset 0x00000000 in 2.178538s (109.610 KiB/s)
contents differ
diff 0 address 0x00000001. Was 0x00 instead of 0x09
diff 1 address 0x00000002. Was 0x00 instead of 0x0f
diff 2 address 0x00000003. Was 0x00 instead of 0xf0
diff 3 address 0x00000004. Was 0x00 instead of 0x0f
diff 4 address 0x00000005. Was 0x00 instead of 0xf0
diff 5 address 0x00000006. Was 0x00 instead of 0x0f
diff 6 address 0x00000007. Was 0x00 instead of 0xf0
diff 7 address 0x00000008. Was 0x00 instead of 0x0f
diff 8 address 0x00000009. Was 0x00 instead of 0xf0
diff 9 address 0x0000000c. Was 0x00 instead of 0x01
diff 10 address 0x0000000d. Was 0x00 instead of 0x61
diff 11 address 0x0000000f. Was 0x00 instead of 0x1e
diff 12 address 0x00000010. Was 0x00 instead of 0x4c
diff 13 address 0x00000011. Was 0x00 instead of 0x45
diff 14 address 0x00000012. Was 0x00 instead of 0x44
diff 15 address 0x00000013. Was 0x00 instead of 0x67
diff 16 address 0x00000014. Was 0x00 instead of 0x6c
diff 17 address 0x00000015. Was 0x00 instead of 0x6f
diff 18 address 0x00000016. Was 0x00 instead of 0x77
diff 19 address 0x00000017. Was 0x00 instead of 0x2e
diff 20 address 0x00000018. Was 0x00 instead of 0x6e
diff 21 address 0x00000019. Was 0x00 instead of 0x63
diff 22 address 0x0000001a. Was 0x00 instead of 0x64
diff 23 address 0x0000001b. Was 0x00 instead of 0x3b
diff 24 address 0x0000001c. Was 0x00 instead of 0x55
diff 25 address 0x0000001d. Was 0x00 instead of 0x73
diff 26 address 0x0000001e. Was 0x00 instead of 0x65
diff 27 address 0x0000001f. Was 0x00 instead of 0x72
diff 28 address 0x00000020. Was 0x00 instead of 0x49
diff 29 address 0x00000021. Was 0x00 instead of 0x44
diff 30 address 0x00000022. Was 0x00 instead of 0x3d
diff 31 address 0x00000023. Was 0x00 instead of 0x30
diff 32 address 0x00000024. Was 0x00 instead of 0x78
diff 33 address 0x00000025. Was 0x00 instead of 0x46
diff 34 address 0x00000026. Was 0x00 instead of 0x46
diff 35 address 0x00000027. Was 0x00 instead of 0x46
diff 36 address 0x00000028. Was 0x00 instead of 0x46
diff 37 address 0x00000029. Was 0x00 instead of 0x46
diff 38 address 0x0000002a. Was 0x00 instead of 0x46
diff 39 address 0x0000002b. Was 0x00 instead of 0x46
diff 40 address 0x0000002c. Was 0x00 instead of 0x46
diff 41 address 0x0000002e. Was 0x00 instead of 0x62
diff 42 address 0x00000030. Was 0x00 instead of 0x0e
diff 43 address 0x00000031. Was 0x00 instead of 0x36
diff 44 address 0x00000032. Was 0x00 instead of 0x73
diff 45 address 0x00000033. Was 0x00 instead of 0x6c
diff 46 address 0x00000034. Was 0x00 instead of 0x78
diff 47 address 0x00000035. Was 0x00 instead of 0x32
diff 48 address 0x00000036. Was 0x00 instead of 0x35
diff 49 address 0x00000037. Was 0x00 instead of 0x74
diff 50 address 0x00000038. Was 0x00 instead of 0x63
diff 51 address 0x00000039. Was 0x00 instead of 0x73
diff 52 address 0x0000003a. Was 0x00 instead of 0x67
diff 53 address 0x0000003b. Was 0x00 instead of 0x33
diff 54 address 0x0000003c. Was 0x00 instead of 0x32
diff 55 address 0x0000003d. Was 0x00 instead of 0x34
diff 56 address 0x0000003f. Was 0x00 instead of 0x63
diff 57 address 0x00000041. Was 0x00 instead of 0x0b
diff 58 address 0x00000042. Was 0x00 instead of 0x32
diff 59 address 0x00000043. Was 0x00 instead of 0x30
diff 60 address 0x00000044. Was 0x00 instead of 0x31
diff 61 address 0x00000045. Was 0x00 instead of 0x35
diff 62 address 0x00000046. Was 0x00 instead of 0x2f
diff 63 address 0x00000047. Was 0x00 instead of 0x31
diff 64 address 0x00000048. Was 0x00 instead of 0x32
diff 65 address 0x00000049. Was 0x00 instead of 0x2f
diff 66 address 0x0000004a. Was 0x00 instead of 0x31
diff 67 address 0x0000004b. Was 0x00 instead of 0x31
diff 68 address 0x0000004d. Was 0x00 instead of 0x64
diff 69 address 0x0000004f. Was 0x00 instead of 0x09
diff 70 address 0x00000050. Was 0x00 instead of 0x30
diff 71 address 0x00000051. Was 0x00 instead of 0x39
diff 72 address 0x00000052. Was 0x00 instead of 0x3a
diff 73 address 0x00000053. Was 0x00 instead of 0x30
diff 74 address 0x00000054. Was 0x00 instead of 0x39
diff 75 address 0x00000055. Was 0x00 instead of 0x3a
diff 76 address 0x00000056. Was 0x00 instead of 0x34
diff 77 address 0x00000057. Was 0x00 instead of 0x34
diff 78 address 0x00000059. Was 0x00 instead of 0x65
diff 79 address 0x0000005b. Was 0x00 instead of 0x03
diff 80 address 0x0000005c. Was 0x00 instead of 0xba
diff 81 address 0x0000005d. Was 0x00 instead of 0xca
diff 82 address 0x0000005e. Was 0x00 instead of 0xff
diff 83 address 0x0000005f. Was 0x00 instead of 0xff
diff 84 address 0x00000060. Was 0x00 instead of 0xff
diff 85 address 0x00000061. Was 0x00 instead of 0xff
diff 86 address 0x00000062. Was 0x00 instead of 0xff
diff 87 address 0x00000063. Was 0x00 instead of 0xff
diff 88 address 0x00000064. Was 0x00 instead of 0xff
diff 89 address 0x00000065. Was 0x00 instead of 0xff
diff 90 address 0x00000066. Was 0x00 instead of 0xff
diff 91 address 0x00000067. Was 0x00 instead of 0xff
diff 92 address 0x00000068. Was 0x00 instead of 0xff
diff 93 address 0x00000069. Was 0x00 instead of 0xff
diff 94 address 0x0000006a. Was 0x00 instead of 0xff
diff 95 address 0x0000006b. Was 0x00 instead of 0xff
diff 96 address 0x0000006c. Was 0x00 instead of 0xff
diff 97 address 0x0000006d. Was 0x00 instead of 0xff
diff 98 address 0x0000006e. Was 0x00 instead of 0xaa
diff 99 address 0x0000006f. Was 0x00 instead of 0x99
diff 100 address 0x00000070. Was 0x00 instead of 0x55
diff 101 address 0x00000071. Was 0x00 instead of 0x66
diff 102 address 0x00000072. Was 0x00 instead of 0x30
diff 103 address 0x00000073. Was 0x00 instead of 0xa1
diff 104 address 0x00000075. Was 0x00 instead of 0x07
diff 105 address 0x00000076. Was 0x00 instead of 0x20
diff 106 address 0x00000078. Was 0x00 instead of 0x31
diff 107 address 0x00000079. Was 0x00 instead of 0xa1
diff 108 address 0x0000007a. Was 0x00 instead of 0x04
diff 109 address 0x0000007b. Was 0x00 instead of 0x88
diff 110 address 0x0000007c. Was 0x00 instead of 0x31
diff 111 address 0x0000007d. Was 0x00 instead of 0x41
diff 112 address 0x0000007e. Was 0x00 instead of 0x3d
diff 113 address 0x0000007f. Was 0x00 instead of 0x08
diff 114 address 0x00000080. Was 0x00 instead of 0x31
diff 115 address 0x00000081. Was 0x00 instead of 0x61
diff 116 address 0x00000082. Was 0x00 instead of 0x09
diff 117 address 0x00000083. Was 0x00 instead of 0xee
diff 118 address 0x00000084. Was 0x00 instead of 0x31
diff 119 address 0x00000085. Was 0x00 instead of 0xc2
diff 120 address 0x00000086. Was 0x00 instead of 0x04
diff 121 address 0x00000087. Was 0x00 instead of 0x02
diff 122 address 0x00000088. Was 0x00 instead of 0x40
diff 123 address 0x00000089. Was 0x00 instead of 0x93
diff 124 address 0x0000008a. Was 0x00 instead of 0x30
diff 125 address 0x0000008b. Was 0x00 instead of 0xe1
diff 126 address 0x0000008d. Was 0x00 instead of 0xcf
diff 127 address 0x0000008e. Was 0x00 instead of 0x30
More than 128 errors, the rest are not printed. I'm not sure what I'm missing here, but I'm able to detect the flash chip, and I'm able to (sort of) wipe it. Any idea what the issue might be? I got the |
I think I figured out why its happening. I modified the configuration file as follows:
and upon running the above configuration, I got the following output:
I think we have to send a WREN (Write enable) instruction before we attempt to write to the flash (as per the datasheet) |
Hi, |
Thank you for the update. I'm glad you received a board for testing, as that should indeed help with faster debugging. It's interesting that the WREN bit is always set before erasing or writing a sector. Since you mentioned that the WREN isn't the issue, could you elaborate on what you think might be causing the problem? Any additional information you can provide would be helpful in understanding the issue better. Let me know how else I can assist in troubleshooting this problem. |
Hi Sorry for late answer: Issue with my board was related to a wrong USB connector (VCC connected to GND, and GND to VCC). Next step: adding spiflash and board definition, and a edalize's PR to allows user to provides more configurations. |
This is such good news! Thank you so much for debugging and finding a fix. However, I still have one small issue. I'm trying to use the
Please let me know if I'm missing something. Thank you once again! |
To program the dragonL you have simply to use: openFPGALoader -c usb-blaster -b dragonL -f YourBitStream |
Oh got it, that works perfectly. Thank you! |
I am attempting to flash a bitstream to a custom FPGA board, called the Dragon-L. It has a
Spartan-6 XC6SLX25T-CSG324
FPGA on board. I am using an Altera USB Blaster as the JTAG adapter.I have built and tried the latest openFPGALoader. Upon trying to flash a bitstream, I got the following error:
Then, I did some research and figured out I could add my the IDCODE to
src/part.hpp
. I added the following and recompiled:Then, I was able to flash to the SRAM of the FPGA with the following output:
I wanted to take it a step ahead and see if I could flash the same onto the onboard SPI flash, and tried adding the
-f
flag, and errored out with the following output:I did some more research and I figured out I could add the
--fpga-part
flag, and ran the same, but I still got an error:Since the error mentioned the flag --uprotect-flash, I tried that too, but still failed with a timeout error:
I've double checked the pinout for the SPI PROM and it should be fine. I am not sure what I'm missing here, and I hope to make some changes and add official support to this board.
The flash chip in use is an
25P80VP
by STMicroelectronics. I believe this is the datasheet for the same.I'm not sure what I'm missing here, hope to find some insights and direction for the same. Thanks!
The text was updated successfully, but these errors were encountered: