|
CAT724_EEPROM †CAT724には512バイトのeepromが内蔵されています。キロでもメガでもなく、512バイトです。
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; } コマンドラインからの操作例 †ダンプ †# 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上から書き換えるシェルスクリプトを乗せます。 キモは dd コマンドを使い、 seek=256 として後半の 0x100番地オフセットから書き込んでいます。 echo $@ | dd of=$EEPROM bs=1 seek=256 関連 † |