Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
.TH FLASH 3
2
.SH NAME
3
flash \- flash memory
4
.SH SYNOPSYS
5
.nf
6
.BI "bind -a #F" \fR[\fPn\fR]\fP " /dev"
7
.sp 0.3v
8
.B /dev/flash
9
.BI /dev/flash/ part
10
.BI /dev/flash/ part ctl
11
.fi
12
.SH DESCRIPTION
13
The flash memory device serves a two-level directory,
14
giving access to files representing part or all of a bank of flash memory.
15
A platform might have more than one bank of flash, numbered starting from 0.
16
The attach specifier
17
.I n
18
is a decimal integer that selects a particular bank of flash (default: 0).
19
Both NOR and NAND flash is supported.
20
For both types of flash,
21
the driver gives a read/write/erase interface to the raw flash device,
22
which can impose constraints on operations beyond those imposed by the driver.
23
Other drivers such as
24
.IR ftl (3)
25
or
26
.IR logfs (3)
27
implement any higher-level format required,
28
including ECC for NAND flash, for instance.
29
.PP
30
The top level directory contains a single directory named
31
.B flash
32
for bank 0, and
33
.BI flash n
34
for each other bank
35
.IR n .
36
It contains two files for each partition:
37
a data file
38
.I part
39
and an associated control file
40
.IB part ctl ,
41
where
42
.I part
43
is the name of the partition.
44
Each partition represents a region of flash memory that starts and ends
45
on a flash segment (erase unit) boundary.
46
The system initially creates a single standard partition
47
.B flash
48
representing the whole of flash memory, and the corresponding control file
49
.BR flashctl .
50
Other partitions can be created by writing to
51
.B flashctl
52
as described below.
53
.PP
54
The data file
55
.I part
56
provides read and write access to the bytes on the system's flash memory.
57
Bytes can be read and written on any byte boundary:
58
the interface hides any alignment restrictions.
59
A read returns the value of the bytes at the current file offset,
60
where zero is the start of the partition.
61
A write reprograms the flash to the given byte values, at the current
62
file offset (relative to the start of the partition), using the physical
63
device's reprogramming algorithm.
64
An erased flash byte is logically
65
.B 0xFF
66
(regardless of the conventions of the physical flash device).
67
A write can change a bit with value 1 to a 0,
68
but cannot change a 0 bit to 1;
69
that can only be done by erasing one or more flash segments.
70
NAND flash typically has restrictions on the number of writes
71
allowed to a page before requiring a block erase.
72
.\" bad idea:
73
.\" Reads and writes are unbuffered.
74
.PP
75
The control file
76
.IB part ctl
77
can be read and written.
78
A read returns several lines containing decimal and hexadecimal numbers
79
(separated by white space)
80
revealing the characteristics of memory within the partition.
81
The first line gives the 
82
the manufacturer ID,  the flash device ID, the memory width in bytes,
83
and a string giving the flash type
84
(currently either
85
.B nor
86
or
87
.BR nand ).
88
Subsequent lines give characteristics of each group of erase units
89
within the partition,
90
where the erase units within a group have the same properties.
91
Each line gives the start and end (as byte addresses)
92
of the erase units in the region
93
that lie within the partition,
94
followed by the size in bytes of each erase unit, which is followed
95
for NAND flash by the size in bytes of a page.
96
The sizes for NAND flash include the extra bytes per page
97
typically used to hold an ECC and block status.
98
A write contains one of the following textual commands:
99
.TF "erase al"
100
.TP
101
.BI add " name start end"
102
Create a new partition that ranges from
103
.I start
104
to
105
.I end
106
within the current partition.
107
Each value must be numeric (decimal, octal or hexadecimal)
108
and a multiple of the erase unit size.
109
.I Name
110
must not be the name of an existing partition.
111
On success, new files
112
.I name
113
and
114
.IB name ctl
115
will appear in the parent
116
.B flash
117
directory.
118
.TP
119
.B erase all
120
Erase the whole flash partition, setting all bytes to
121
.BR 0xFF ,
122
except those that are hardware write-protected.
123
.TP
124
.BI erase " offset"
125
Erase the segment that begins at the given
126
.I offset
127
within the partition,
128
setting all bytes to
129
.BR 0xFF ,
130
except those that are hardware write-protected.
131
The
132
.I offset
133
is given in bytes, but must be a multiple
134
of the segment (erase unit) size.
135
.TP
136
.BR protectboot " [ " off " ]"
137
By default the system prevents erase unit 0 of the flash from being
138
erased or written, assuming it
139
contains the primary bootstrap.
140
Writing this command with parameter
141
.B off
142
removes that protection.
143
Writing
144
.B protectboot
145
with any other parameter (or none) restores the protection.
146
Note that a manufacturer might also have locked the flash in hardware,
147
and that protection must be removed in a device-dependent way.
148
.TP
149
.B sync
150
If the underlying device must buffer or cache (current devices do not),
151
flush the buffer(s).
152
.PD
153
.PP
154
The syntax of all numbers is that of
155
.I strtoul
156
(in
157
.IR atof (2));
158
the default base is 10.
159
.SH SOURCE
160
.B /sys/src/*/devflash.c
161
.br
162
.B /sys/src/*/flash*.c
163
.SH SEE ALSO
164
.IR flashfs (4),
165
.IR paqfs (4)
166
.SH DIAGNOSTICS
167
A write will return an error if
168
an attempt is made to change a 0 bit to 1,
169
or if the flash memory fails to be programmed correctly.
170
.SH BUGS
171
The flash cannot be written if the kernel is executing directly from flash,
172
because the physical flash cannot be read during programming,
173
and the driver does not copy the programming code to DRAM.