## ----------------------------------------------------------------------- ## ## Copyright 2011 H. Peter Anvin - All Rights Reserved ## ## Permission is hereby granted, free of charge, to any person ## obtaining a copy of this software and associated documentation ## files (the "Software"), to deal in the Software without ## restriction, including without limitation the rights to use, ## copy, modify, merge, publish, distribute, sublicense, and/or ## sell copies of the Software, and to permit persons to whom ## the Software is furnished to do so, subject to the following ## conditions: ## ## The above copyright notice and this permission notice shall ## be included in all copies or substantial portions of the Software. ## ## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES ## OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ## NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ## HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ## WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ## FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ## OTHER DEALINGS IN THE SOFTWARE. ## ## ----------------------------------------------------------------------- This is a combination of a FPGA design and a Tcl program to read and write the flash part on a Terasic DE1/Altera Cyclone II Starter Kit FPGA development board. It should be fairly trivial to port to other boards using parallel NOR flash with Altera FPGAs; porting to other vendors will require porting to their specific JTAG solution. Currently this only supports one file and writing from the start of the flash; this I hope to fix in the near future: Usage: # First upload the FPGA design quartus_pgm -m JTAG -p 'p;de1flash.sof' # Second, execute either of these commands quartus_stp -t de1flash.tcl read filename [length] quartus_stp -t de1flash.tcl write filename [length] quartus_stp -t de1flash.tcl eraseall Note that it is NOT necessary to erase before writing; the utility will automatically erase any sectors that are being written.