Macアドレス有りEEPROM


EEPROM内のMacアドレスをRead

秋月電子で販売されているMacアドレス書き込み済みEEPROMからMacアドレスを読んでみる。

環境

Arduino IDEおよびArduino Unoを利用。

ATMEL AT93C46A/AT93C46D

EEPROM自体はATMEL AT93C46A/AT93C46D。

AT93C46A/AT93C46Dデータシート

秋月電子の本製品のページからたどれる。SPI接続でEEPROM領域へアクセス可能。

参照ソースコード

このEEPROMへのアクセスするソースコードサンプルはここに見つかる。これをほぼそのまま使う。

ソースコード

下記10-13は、ArduinoでSPI接続する場合のピン番号である。

#include "93C46.h"

#define pCS 10
#define pSK 13
#define pDI 11
#define pDO 12

// Prints all words of the buffer
void debugPrint(word* buff, int len) {
  char buf[4];

  Serial.print("\n   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F");
  for(int i = 0; i < len; i++) {
    if(i % 8 == 0) {
      Serial.println();
      sprintf(buf, "%02x", i*2); Serial.print(buf); Serial.print(" ");
    }
    sprintf(buf, "%02x", buff[i] & 0xFF); Serial.print(buf);
    Serial.print(" ");
    sprintf(buf, "%02x", (buff[i] & 0xFF00) >> 8); Serial.print(buf);
    Serial.print(" ");
  }
  Serial.println();
}

void setup() {
  bool longMode = EEPROM_93C46_MODE_16BIT;

  eeprom_93C46 e = eeprom_93C46(pCS, pSK, pDI, pDO);
  e.set_mode(longMode);
  Serial.begin(9600);

  int len = longMode ? 64 : 128;
  word readBuffer[len];
  for(int i = 0; i < len; i++) {
    // Read by address
    word r = e.read(i);
    readBuffer[i] = r;
  }
  debugPrint(readBuffer, len);
  Serial.println();
}

void loop() {}

結果

上記コードの実行結果は下記のとおり。

   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00 40 00 10 00 00 02 cb XX XX XX 00 00 00 00 00 00 
10 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
20 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
30 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
40 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
50 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
60 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
70 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

本EEPROMに関する秋月電子のQ&Aページによると、販売メーカーが取得したベンダーコード「00 02 cb」が見える。その次に続く「XX XX XX」が連番のデータ。

最後に

上述のリンク先のソースコードを利用すれば、EEPROMのMacアドレス領域に書き込めるはず。ただし、Macアドレスのユニーク性が保証されなくなるので注意されたし。