summaryrefslogtreecommitdiffstats
path: root/README
blob: 4668172aebd2cd0748e7f6059e55d288388c2f15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
## -----------------------------------------------------------------------
##
##   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 -o 'p;de1flash.sof'

	# Second, execute either of these commands
	quartus_stp -t de1flash.tcl read      filespec...
	quartus_stp -t de1flash.tcl write     filespec...
	quartus_stp -t de1flash.tcl writeonly filespec...
	quartus_stp -t de1flash.tcl crc32     filespec...
	quartus_stp -t de1flash.tcl erase     filespec...
	quartus_stp -t de1flash.tcl eraseall

The "write" command is equivalent to the "erase" command followed by
the "writeonly" command.  Therefore it is NOT necessary to issue an
explicit erase before writing; the utility will automatically erase
any sectors that are being written (but not any other sectors.)  The
"eraseall" command is available to clear out the entire flash.  The
utility will not erase any sectors that are already blank.

A "filespec" is of the following form:

	[filename][@[address][,length]]

The default starting address is 0 for the first file and whatever byte
follows the previous file for subsequent files; the default length is
the length of the file for write or erase commands or the total size
of the flash for read commands.

A filespec without a filename is ignored (except for computing the
next default address) for the read and writeonly commands and means
"erase only" for the write and erase commands.  For the crc32 command
the filename doesn't matter and is only used to get the default length.

Reads are substantially slower than writes.  This appears to be a
limitation of the Altera JTAG stack.  To verify correct writing, use
the crc32 command; the crc32 used is the same as used by zip/gzip.