CAT724_EEPROM

CAT724には512バイトのeepromが内蔵されています。キロでもメガでもなく、512バイトです。

アドレス(16進数)サイズ(バイト)データ
000-0FF256ユーザエリア
100-1DF240カーネル引数.bootloaderのsetparamで変更
1F0-1F66macアドレス
1F7-1FF10reserve(管理用/使用禁止)

Linux上からのデバイス操作

デバイス名:/sys/class/i2c-dev/i2c-2/device/2-0050/eeprom

C言語からはopen()して read(), write() してください。ユーザ領域である先頭256バイトの範囲は自由に使って構いません。

int eeprom_read(char *addr, int from, int len)
{
	int fd;
	int ret;

/* 引数チェック */
	if(from + len > 512){
		return -1;	/* outof size */
	}

/* デバイスopen() */
	fd = open(DEVNAME,O_RDONLY);
	if(fd<0){
		perror(DEVNAME);
		exit(1);
	}

/* 移動 */
	if(lseek(fd, from, SEEK_SET) < 0){
		perror(DEVNAME);
		exit(2);
	}

/* read() して close() */
	ret = 	read(fd, addr, len);
	close(fd);

	return ret;
}
int eeprom_write(const char *addr, int from, int len)
{
	int fd;
	int ret;

/* 引数チェック */
	if(from + len > 512){
		return -1;	/* outof size */
	}

/* デバイスopen() */
	fd = open(DEVNAME,O_RDWR);
	if(fd<0){
		perror(DEVNAME);
		exit(1);
	}

/* 移動 */
	if(lseek(fd, from, SEEK_SET) < 0){
		perror(DEVNAME);
		exit(2);
	}

/* write() して close() */
	ret = 	write(fd, addr, len);
	close(fd);

	return ret;
}

fileeeprom.c

コマンドラインからの操作例

ダンプ

# hexdump -vC /sys/class/i2c-dev/i2c-2/device/2-0050/eeprom
00000000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
...中略
000000e0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
000000f0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000100  63 6f 6e 73 6f 6c 65 3d  74 74 79 53 43 30 2c 31  |console=ttySC0,1|
00000110  31 35 32 30 30 20 72 6f  6f 74 3d 2f 64 65 76 2f  |15200 root=/dev/|
00000120  6d 74 64 62 6c 6f 63 6b  32 20 72 6f 6f 74 66 73  |mtdblock2 rootfs|
00000130  74 79 70 65 3d 6a 66 66  73 32 20 72 6f 00 69 6e  |type=jffs2 ro.in|
00000140  69 74 3d 2f 62 69 6e 2f  62 61 73 68 20 00 6e 6f  |it=/bin/bash .no|
00000150  5f 63 6f 6e 73 6f 6c 65  5f 73 75 73 70 65 6e 64  |_console_suspend|
00000160  20 00 ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  | ...............|
00000170  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
...中略
00000180  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
000001f0  00 03 82 05 00 30 ff ff  5e 00 ff ff ff ff ff ff  |.....0..^.......|

Linux上での setparam コマンド

カーネル起動引数はアドレス0x100~文字列として記録されています。Linux上から書き換えるシェルスクリプトを乗せます。

filesetparam

キモは dd コマンドを使い、 seek=256 として後半の 0x100番地オフセットから書き込んでいます。

echo $@ | dd of=$EEPROM bs=1 seek=256

関連

Last-modified: 2015-04-16 (木) 15:37:43 (3291d)