« そういえば年賀状 | トップページ | 中華Arduinoが壊れる »

2015年12月27日 (日)

EEPROMでFAT

EEPROMを使った回路が無事に動いたので、次はEEPROMに複数のバイナリデータを入れることを考えよう。
ファイルサイズごとに、アドレスを系手で計算して入れるのは面倒だから、EEPROMの中に、FATのようなものを作ってアクセスすることはできないだろうか。
誰か作ってくれたらいいのに。もちろん私は嫌だ。

私としては他人が作ったものを利用して楽をしたいのだが、みんな同じ気持ちなのか、ネットではそういうものは見つからなかった。
そこで考えたのが、zip形式を利用する方法である。
そこらのアーカイバで非圧縮zipファイルを作り、それをそのままEEPROMに書き込むのだ。
これならファイルの連結はもちろん、ファイルサイズの計算もすべてアーカイバがやってくれる。
調べたところ、zipファイルは、こんなファイル構造になっているらしい。

 ヘッダ   ファイル   ヘッダ   ファイル   ヘッダ   ファイル   ヘッダ   ファイル 

ヘッダとファイルが交互に並んでいて、これが延々と繰り返される。
よって、ファイルの先頭だけで、アーカイブされているファイル名の一覧は得られない。それでも自分で作ることを考えたら100倍マシだ。
ヘッダはこんな構造をしている。

struct ZipHeader {
	unsigned int signature;		// 0x04034B50(リトルエンディアンでPK+0x0304)
	unsigned short needver;		// version = 1.0 = 10
	unsigned short option;		// 0x0000
	unsigned short comptype;	// 非圧縮=0x0000
	unsigned short filetime;	// 時間
	unsigned short filedate;	// 日付
	unsigned int crc32;		// CRCチェックサム
	unsigned int compsize;		// 非圧縮だとファイルサイズと同じはず
	unsigned int uncompsize;	// ファイルサイズ
	unsigned short fnamelen;	// ファイル名の長さ
	unsigned short extralen;	// 0x0000
};

これをFATに見立てれば、ファイル名を利用したアクセスもできそうだ。
これはいい手抜きができそうだ。

Microsoftも私と同じことを考え付いたようだ。
たとえば、Wordのファイル形式であるdocxだそうだ。拡張子docxををzipにリネームすると、普通に解凍してファイルを取り出すことができる。

« そういえば年賀状 | トップページ | 中華Arduinoが壊れる »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/24707/63237615

この記事へのトラックバック一覧です: EEPROMでFAT:

« そういえば年賀状 | トップページ | 中華Arduinoが壊れる »

最近のトラックバック