summaryrefslogtreecommitdiff
path: root/flash-memory
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2013-03-10 12:13:49 +0100
committerManuel Traut <manut@mecka.net>2013-03-10 12:13:49 +0100
commit9c0f862749f30800837a45aff5abdcb529867dbc (patch)
treeb0ca51fff64f12fac03aea4afaa1fa722376844b /flash-memory
parent33b79c725448efd2c9a72e2ae9a1fb04270492f5 (diff)
parentcea5039322781f6085dd47954af5584ca3f78911 (diff)
Merge branch 'schulung'
updates from current linutronix schulung.git Conflicts: Makefile configpres.tex flash-memory/ubi/handout_ubi_de.tex handout.tex index.txt pres_master.tex vorl.tex vorl1.tex vorl2.tex vorl3.tex vorl4.tex vorl5.tex Signed-off-by: Manuel Traut <manut@mecka.net>
Diffstat (limited to 'flash-memory')
-rw-r--r--flash-memory/flash-filesystems/pres_flashfilesystems_en.tex83
-rw-r--r--flash-memory/technology/Makefile9
-rw-r--r--flash-memory/technology/pres_technology_en.tex181
3 files changed, 245 insertions, 28 deletions
diff --git a/flash-memory/flash-filesystems/pres_flashfilesystems_en.tex b/flash-memory/flash-filesystems/pres_flashfilesystems_en.tex
index 5de794f..718965d 100644
--- a/flash-memory/flash-filesystems/pres_flashfilesystems_en.tex
+++ b/flash-memory/flash-filesystems/pres_flashfilesystems_en.tex
@@ -17,6 +17,7 @@
\subsubsection{Emulation}
\begin{frame}[fragile]
\frametitle{Emulating flash devices}
+Exercise:
\begin{lstlisting}
$ sudo modprobe nandsim
$ cat /proc/mtd
@@ -56,17 +57,26 @@ mtdparts=edb7312-nor:256k(ARMboot)ro,
\begin{frame}[fragile]
\frametitle{Using JFFS2}
+Exercise:
\begin{lstlisting}
# Create JFFS2 image
-$ mkfs.jffs2 -e 131072 \
- -d source_directory \
- -o jffs2.img
+$ /usr/sbin/mkfs.jffs2 -e 131072 \
+ -d source_directory \
+ -o jffs2.img
# Erase flash partition
-$ flash_erase -j /dev/mtd0 0 0
+$ sudo flash_erase -j /dev/mtd0 0 0
# Write jffs2 image
-$ nandwrite /dev/mtd0 jffs2.img
+$ sudo nandwrite -p /dev/mtd0 jffs2.img
+# Load mtdblock module
+$ sudo modprobe mtdblock
# Mounting the image
-$ mount /dev/mtdblock0 /mnt
+$ sudo mount -t jffs2 /dev/mtdblock0 /mnt
+\end{lstlisting}
+Clean-up:
+\begin{lstlisting}
+# Unmount the image and erase flash partition
+$ sudo umount /mnt
+$ sudo flash_erase -j /dev/mtd0 0 0
\end{lstlisting}
\end{frame}
@@ -96,13 +106,14 @@ root=/dev/mtdblock0 rootfstype=jffs2
\begin{frame}[fragile]
\frametitle{Using UBIFS}
+Exercise:
\begin{lstlisting}
-# 1) Attaching UBI to an MTD device
-modprobe ubi
-ubiattach ubiattach -m 0
-# or
-modprobe ubi mtd=0
-# 2) Gathering some information
+# 1) Loading module and attach UBI to MTD device
+$ sudo modprobe ubi
+$ sudo ubiattach ubiattach -m 0
+# or: 1a) Specify the MTD device during module load
+$ sudo modprobe ubi mtd=0
+# 2) Gathering some information:
$ dmesg
UBI: attaching mtd0 to ubi0
UBI: physical eraseblock size: 16384 bytes (16 KiB)
@@ -112,21 +123,29 @@ UBI: sub-page size: 256
UBI: VID header offset: 256 (aligned 256)
UBI: data offset: 512
[...]
-# 3) Creating a volume
-$ ubimkvol /dev/ubi0 -N myvolume -s 64MiB
+# 3) Creating an UBIFS image
+$ /usr/sbin/mkfs.ubifs -r test -m 512 -e 15872 \
+ -c 8450 -o ubifs.img
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Using UBIFS}
+Exercise (cont.):
\begin{lstlisting}
-# 4) Creating an UBIFS image
-$ mkfs.ubifs -r test -m 512 -e 15872 \
- -c 8450 -o ubifs.img
+# 4) Creating a volume
+$ sudo ubimkvol /dev/ubi0 -N myvolume -s 64MiB
# 5) Writing the image
-$ ubiupdatevol /dev/ubi0_0 ubifs.img
+$ sudo ubiupdatevol /dev/ubi0_0 ubifs.img
# 6) Mounting UBIFS
-$ mount -t ubifs ubi0:myvolume /mnt/
+$ sudo mount -t ubifs ubi0:myvolume /mnt/
+\end{lstlisting}
+Clean-up:
+\begin{lstlisting}
+# Unmounting image, detach UBI from MTD device, and erase flash partition
+$ sudo umount /mnt
+$ sudo ubidetach -m 0
+$ sudo flash_erase -j /dev/mtd0 0 0
\end{lstlisting}
\end{frame}
@@ -147,17 +166,23 @@ vol_flags=autoresize
\begin{frame}[fragile]
\frametitle{UBI: Create flash images}
+Exercise:
\begin{lstlisting}
# 1) Create the ubi image
-ubinize -o ubi.img -m 512 -s 256 -p 16384 ubinize.cfg
-# 2) erase the flash partition
-flash_erase /dev/mtd0 0 0
-# 3) Write the image
-nandwrite /dev/mtd0 ubi.img
-# 4) Attach UBI
-ubiattach -m 0
-# 5) Mount UBIFS
-mount -t ubifs ubi0:myvolume /mnt/
+$ /usr/sbin/ubinize -o ubi.img -m 512 -s 256 -p 16384 ubinize.cfg
+# 2) Write the image
+$ sudo nandwrite /dev/mtd0 ubi.img
+# 3) Attach UBI
+$ sudo ubiattach -m 0
+# 4) Mount UBIFS
+$ sudo mount -t ubifs ubi0:myvolume /mnt/
+\end{lstlisting}
+Clean-up:
+\begin{lstlisting}
+# Unmounting image, detach UBI from MTD device, and erase flash partition
+$ sudo umount /mnt
+$ sudo ubidetach -m 0
+$ sudo flash_erase -j /dev/mtd0 0 0
\end{lstlisting}
\end{frame}
@@ -169,7 +194,9 @@ ubi.mtd=0 root=ubi0:myvolume rootfstype=ubifs
\end{verbatim}
\end{frame}
+\subsection{}
\begin{frame}
+\frametitle{References}
\begin{thebibliography}{1}
\bibitem{UBIFS} http://mytechrants.wordpress.com/2010/01/20/ubiubifs-on-nandsim/
\end{thebibliography}
diff --git a/flash-memory/technology/Makefile b/flash-memory/technology/Makefile
new file mode 100644
index 0000000..d641258
--- /dev/null
+++ b/flash-memory/technology/Makefile
@@ -0,0 +1,9 @@
+all:
+ for pdf in `ls -1 *.tex` ; do \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ done
+
+clean:
+ rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out
+
diff --git a/flash-memory/technology/pres_technology_en.tex b/flash-memory/technology/pres_technology_en.tex
new file mode 100644
index 0000000..546a1be
--- /dev/null
+++ b/flash-memory/technology/pres_technology_en.tex
@@ -0,0 +1,181 @@
+\def\lximg{/usr/share/lx/icons/fueller.png}
+
+\input{configpres}
+
+\subsection{Technology}
+
+\title{Flash-Memory Technology}
+\maketitle
+
+\def\lximg{none}
+
+\begin{frame}
+\frametitle{Contents}
+\tableofcontents
+\end{frame}
+
+\subsubsection{Structure and Function}
+\begin{frame}[fragile]
+\frametitle{Single Cell Structure}
+\begin{itemize}
+\item Base element: MOSFET with a floating gate (FGMOS)
+\item Organization of cells in blocks and pages
+\end{itemize}
+\begin{figure}[h]
+\centering
+\includegraphics[scale=0.5]{images/fmtech-fgmos.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Read}
+\begin{figure}[h]
+\centering
+\includegraphics[scale=0.4]{images/fmtech-single_read.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Write (Program)}
+\begin{figure}[h]
+\centering
+\includegraphics[scale=0.4]{images/fmtech-single_program.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Erase}
+\begin{figure}[h]
+\centering
+\includegraphics[scale=0.4]{images/fmtech-single_erase.png}
+\end{figure}
+\end{frame}
+
+\subsubsection{Flash-Memory Types}
+\begin{frame}[fragile]
+\frametitle{Overview}
+\begin{itemize}
+\item NOR
+\item NAND
+\item Single- and Multi-Level Cells
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{NOR}
+\begin{itemize}
+\item direct addressable
+\item usable like RAM/ROM (direct attach to CPU)
+\item pros:
+ \begin{itemize}
+ \item fault tolerant
+ \item high write-rate for small data
+ \end{itemize}
+\item cons:
+ \begin{itemize}
+ \item low data density (multiple gates per bit)
+ \item low write-rate for large data
+ \item cost
+ \end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{NAND}
+\begin{itemize}
+\item matrix organization (blocks and pages)
+\item addressing via controller logic
+\item pros:
+ \begin{itemize}
+ \item cost
+ \item high data density (1 to many bits per gate)
+ \item high read-/write-rate for large data
+ \item no layout change in hardware for more capacity
+ \end{itemize}
+\item cons:
+ \begin{itemize}
+ \item large effort for extensive Error Correction Codes (ECC)
+ \end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Data density}
+\begin{itemize}
+\item Single-Level Cells (SLC)
+ \begin{itemize}
+ \item ca. 100,000 write/delete cycles
+ \item pros:
+ \begin{itemize}
+ \item robust
+ \item low Error Correction Code (ECC) effort
+ \end{itemize}
+ \item cons:
+ \begin{itemize}
+ \item low data density
+ \end{itemize}
+ \end{itemize}
+\end{itemize}
+\pause
+\begin{itemize}
+\item Multi-Level Cells (MLC)
+ \begin{itemize}
+ \item ca. 3,000 to 10,000 write/delete cycles
+ \item pros:
+ \begin{itemize}
+ \item high data density
+ \end{itemize}
+ \item cons:
+ \begin{itemize}
+ \item expensive Error Correction Codes (ECC) like BCH
+ \item wear prone
+ \item low read-rate
+ \end{itemize}
+ \end{itemize}
+\end{itemize}
+\end{frame}
+
+\subsubsection{NAND block operations and side effects}
+\begin{frame}[fragile]
+\frametitle{Read}
+\begin{figure}[h]
+\centering
+\includegraphics[width=10cm]{images/fmtech-read.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Read Disturb}
+\begin{figure}[h]
+\centering
+\includegraphics[width=10cm]{images/fmtech-read_disturb.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Write}
+\begin{figure}[h]
+\centering
+\includegraphics[width=10cm]{images/fmtech-write.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Write Disturb}
+\begin{figure}[h]
+\centering
+\includegraphics[width=10cm]{images/fmtech-write_disturb.png}
+\end{figure}
+\end{frame}
+
+\subsection{}
+\begin{frame}
+\frametitle{References}
+\begin{thebibliography}{99}
+% \bibitem{FLASHMEM} David Woodhouse. Presentation \emph{Flash Memory}, 2012. http://david.woodhou.se/dwmw2-kr-2012-09.odp
+\bibitem{FLASHMEM} David Woodhouse. Presentation \emph{Flash Memory}, 2012.
+\href{http://david.woodhou.se/dwmw2-kr-2012-09.odp}{http://david.woodhou.se/dwmw2-kr-2012-09.odp}
+\end{thebibliography}
+\end{frame}
+
+\input{tailpres}