玄箱Pro、直します。

超初心者が、玄箱PROでLinuxを勉強する無謀なブログです。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
別窓 | スポンサー広告
∧top | under∨

NANDフラッシュ

NANDフラッシュの仕組みを調べています。
「ページ単位」とか「ブロック単位」というのがどこから出てくるのか知りたいので、いろいろと参考にさせてもらってます。

メモリセル個別の概略は理解できましたが、全然わからないのが全体で考えたときです。

・ページという単位はビット・ワード線で言えばどういう関係なのか
・ブロックという単位はビット・ワード線で言えばどういう関係なのか
・ソース/ドレインは同一ビット線上の各メモリセルで連続しているのか
・選択トランジスタで挟まれたワード線の本数

東芝の論文や各大学の研究資料にも目を通しましたがわかりません。
てか玄箱関係ないやん(笑)。

ビット線で信号をセンスするのであれば、ビット線で一度に扱える電流は「0」か「1」かしかないと思うのです。
書き込みの際はコントロールゲートであるワード線電圧のH・Lで任意のフローティングゲートに電子を取り込むことが一度にできるのはわかるのですが、「読み込みもページ単位」という箇所が理解できません。

ひょっとしてワード線ごとに電圧の昇降を操作して、一つずつ読み出してページバッファしているのだろうか・・。
だから「読み出しに時間がかかる」わけかな?

いやいや。
書きながらワケがわからなくなってきた。

(2008.2.20追記)
図にして理解に努めました。

1.書き込みの際
複数のビット線に対して1本のワード線で同時に1ページ(16896ビット)分のデータを記録します。

n_w.jpg

・選択トランジスタに4.5V
・書き込み対象メモリセルのソース/ドレインをグラウンド
・それ以外のソース/ドレインに3.3V
・該当ページのワード線に18V


2.読み込みの際
書き込み時と同様、複数のビット線に対して1本のワード線で同時に1ページ(16896ビット)分のデータを読み出します。

n_r.jpg

・選択トランジスタに4.5V
・該当ページ以外のワード線にも4.5V(該当ページのワード線はグラウンド)


3.消去の際
ソース/ドレインに高電圧をかけるため、どうしても複数のワード線(ページ)をまたぐ格好になる。
選択トランジスタが囲む範囲のソース/ドレインにしか影響を及ぼさないので、その範囲を64本分のワード線にしたのかな・・。

n_d.jpg

・選択トランジスタに4.5V(64本のワード線を囲む)
・ブロック内ワード線(64本)はグラウンド
・全ソース/ドレインに20V


これでつじつまが合いそうな気がしています。
ただ、「読み込ませない」「書き込ませない」というセルに絡むソース/ドレインやワード線に電圧かけるのって・・スマートじゃない気が。
また違うのかな・・もう少し研究します。

(2008.2.20追記2)
いろいろと見当違いな事を書いていたようです。

まず、各動作時の各電圧はもっともーーーーーっと難しい技術が必要なようで、図中にある数字はほぼ不正確です。
基本原理は合っている気がしますが、日本語を含むどの言語の読解力にも自信がありませんので断言できません(笑)。
ディスターブモードやフローティング各方式が難しすぎて理解できていないことが原因です。

次に「読み込みには時間がかかる」という件。
NORフラッシュはDRAM同様のマトリックス状にメモリセルを配置・接続しているため、ビットごとのランダムな読み出しに対応しています。
具体的には、読み出したいメモリセルの選択トランジスタをH、ワード線もHにすれば1ビットがセンスできます。

対してNANDフラッシュは、どうしてもページ全体を読み込んでしまうため、一度1ページまるごとをバッファした後にシリアルで出力しているようです。
バッファデータの中から該当アドレスの1ビットを読み出すため時間がかかるらしいのです。
スポンサーサイト
別窓 | 日記のようなもの | コメント:0 | トラックバック:0
∧top | under∨

mtdとmtdblock

まだ言ってんのかよ、と突っ込まれそうなくらい理解が遅い・・。
/dev/mtdと/dev/mtdblock、デバイスのメジャー番号とマイナー番号が一致しています。
/dev/mtd0と/dev/mtdblock0は共に31と0、/dev/mtd2と/dev/mtdblock2は共に31と2。
これってつまり「同じデバイス」ってことなのかな。
確かにルートへの変更は/dev/mtd2にも/dev/mtdblock2にも同じように反映されているみたい。

でもなぜ同じブロックデバイスを2種類用意する必要があったんだろうか。
/dev/mtdがキャラクタデバイスで/dev/mtdblockがブロックデバイス、と言うのだったら理解できる。
/proc/devicesを覗くと/dev/mtdはキャラクタデバイスになってるけど/dev覗くとブロックデバイスになっていて、ここも謎。

そして、同じデバイスならどうしてroot=/dev/mtd2とカーネルコマンド渡しても起動できないのかわからない。

/proc/devicesで「/dev/mtdはキャラクタデバイス」と言ってるなら/dev/mtdはキャラクタデバイスなのかな。
キャラクタデバイスをブロックデバイスのように扱う仕組みがあってそれを見落としてるのかなぁ・・。
ひょっとしてMTDサブシステム自体がその役割を担っている?!

いやいやいやいや・・・無理があるなぁぁぁ・・・。
別窓 | 日記のようなもの | コメント:0 | トラックバック:0
∧top | under∨
| 玄箱Pro、直します。 |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。