macsbug

Just another WordPress.com site

1GB ROM READER of Arduino Mega 2560

leave a comment »

EEPROM 1GByte(27C1001) の ROM READER を Arduino MEGA 2560 で製作。

配線:プログラム中に記載。

出力:Arduinoのシリアルモニターに、INTEL HEX Format 又は HEX表示。

Reader

 

 

 

 

 

 

メモ:EEPROM 1GByte(27C1001)を解析する為に製作した。

_ 以前に基盤で製作した512kBのROM READERを1GB用に改修。内容はアドレス線をA16まで追加。

_ ブレットボードやジャンパーワイヤーは不安定である。特にグランドワーヤーが問題。

_ 基盤で配線をした形が良い。

_ 解析:ブラウザーで Disassemble する事ができる場所 -> ODA – The Online Disassembler

__ 例:CPU 8088:HEXを左に入れ、Arch=i8086、必要ならばBase Addressを入力。Disassembllyを押す。

_ 解析:Disassemblerアプリは、Windowsで、DIS8051,disasmx,disasm-1.0.0,dasm153m等で解析可能。

 

//=========================================================================
// Arduino Mega 2560 27C1001 ROM READ Program
// ORG : INTEL HEX FORMAT & HEX DUMP               2014.11.11 s.ono
//=========================================================================
//   Arduino Mega 2560 ROM READER SCHEMATIC
//          ARDUINO MEGA                           ROM 27C1001
//   +5V    -----------                            -----------
//   |      |     PE1 |  1 -> Serial Tx         32 | VCC     |
//   -| SW  |     PE0 |  0 <- Serial Rx         16 | GND     |
//   |      |     PB6 | 12 -> 330ohm - LED - GND   |         |
//   +----> | 11  PB5 |        +5 -- 10Kohm --> 31 | P_      |
//   |      |         |                            |         |
//  10Kohm  |     PL0 | 49 ------------------->  2 | A16     |
//   |      |     PF7 |  7 ------------------->  3 | A15     |
//  GND     |     PF6 |  6 -------------------> 29 | A14     |
//          |     PF5 |  5 -------------------> 28 | A13     |
//          |     PF4 |  4 ------------------->  4 | A12     |
//          |     PF3 |  3 -------------------> 25 | A11     |
//          |     PF2 |  2 -------------------> 23 | A10     |
//          |     PF1 |  1 -------------------> 26 | A9      |
//          |     PF0 |  0 -------------------> 27 | A8      |
//          |     PK7 |  8 ------------------->  5 | A7      |
//          |     PK6 |  9 ------------------->  6 | A6      |
//          |     PK5 | 10 ------------------->  7 | A5      |
//          |     PK4 | 11 ------------------->  8 | A4      |
//          |     PK3 | 12 ------------------->  9 | A3      |
//          |     PK2 | 13 -------------------> 10 | A2      |
//          |     PK1 | 14 -------------------> 11 | A1      |
//          |     PK0 | 15 -------------------> 12 | A0      |
//          |         |                            |         |
//          |     PA2 | 24 -------------------> 24 | OE_     |
//          |     PA0 | 22 -------------------> 22 | CE_     |
//          |         |                            |         |
//          |     PC7 | 30 <------------------- 21 | Q7      |
//          |     PC6 | 31 <------------------- 20 | Q6      |
//          |     PC5 | 32 <------------------- 19 | Q5      |
//          |     PC4 | 33 <------------------- 18 | Q4      |
//          |     PC3 | 34 <------------------- 17 | Q3      |
//          |     PC2 | 35 <------------------- 15 | Q2      |
//          |     PC1 | 36 <------------------- 14 | Q1      |
//          |     PC0 | 37 <------------------- 13 | Q0      |
//          -----------                            -----------
//=========================================================================
/*   Arduino Mega 2560 ROM READER PIN LAYOUT   []  AREF
                  ( Parts SIDE )               []  GND 
                                               []  PB7 
     RESET []                                  []  PB6 
     3V3   []                                  []  PB5 
     5V    []                                  []  PB4 
     GND   []                                  []  PH6 
     GND   []        1 ()VPP     5V() 32       []  PH5 
     VIN   []        2 ()A16     P_() 31       []  PH4 
                       ()A15     NA()          []  PH3 
     PF0   []          ()A12    A14()          []  PE3 
     PF1   []          ()A7     A13()          []  PG5 
     PF2   []          ()A6      A8()          []  PE5 
     PF3   []          ()A5      A9()          []  PE4 
     PF4   []          ()A4     A11()          []  PE1 TX 
     PF5   []          ()A3     OE_() 24       []  PE0 RX 
     PF6   []          ()A2     A10()                      
     PF7   []          ()A1     CE_() 22       []  PJ1 TX3 
                       ()A0      Q7()          []  PJ0 RX3 
     PK0   []          ()Q0      Q6()          []  PH1 TX2 
     PK1   []          ()Q1      Q5()          []  PH0 RX2 
     PK2   []          ()Q2      Q4()          []  PD0 TX1 
     PK3   []       16 ()GND     Q3() 17       []  PD1 RX1 
     PK4   []                                  []  PD2 SDA 
     PK5   []  P P P P P P P P P P P P P P P P []  PD3 SCL
     PK6   []  B B L L L L G D C C C C A A A A            
     PK7   []  1 3 1 3 5 7 1 7 1 3 5 7 6 4 2 0                      
         GND [][][][][][][][][][][][][][][][][][] 5V        
         GND [][][][][][][][][][][][][][][][][][] 5V                            
               P P P P P P P P P P P P P P P P            
               B B L L L L G D C C C C A A A A             
               0 2 0 2 4 6 0 2 0 2 4 6 7 5 3 1            
*/
//=========================================================================
#define OE  24                            // ROM OE_  PA2
#define CE  22                            // ROM CE_  PA0
#define SW  11                            // Switch   PB5
#define LED 12                            // LED      PB6
int dt;                                   // READ DATA
int sum;                                  // sum check
//========================================//===============================
void setup() {                            //
 delay(500); // 76543210                  // PORT MODE SET
 DDRK = DDRK | B11111111;                 // PORT K = OUTPUT : LO  ADDRESS
 DDRF = DDRF | B11111111;                 // PORT F = OUTPUT : HI  ADDRESS
 DDRL = DDRL | B11111111;                 // PORT L = OUTPUT : A16 ADDRESS
 DDRA = DDRA | B11111111;                 // PORT A = OUTPUT : CONTROL
 DDRC = DDRC | B00000000;                 // PORT C =  INPUT : DATA
 pinMode ( SW ,  INPUT );                 // SWITCH
 pinMode ( LED, OUTPUT );                 // LED
 PORTA =       B11111111;                 // PA0(OE_),PA2(CE_)=1
 PORTK =       B00000000;                 // LO  ADDRESS = 0
 PORTF =       B00000000;                 // HI  ADDRESS = 0
 PORTL =       B00000000;                 // A16 ADDRESS = 0
 digitalWrite (LED, LOW);                 // LED ON
 Serial.begin (115200);                   //
 delay(500);                              // LED ON TIME
}
//========================================//===============================
void loop() {                             //
 digitalWrite (LED, HIGH);                // LED OFF
 if ( digitalRead ( SW ) == HIGH ){       // Push Switch ON
  digitalWrite (LED, LOW);                // LED ON
  Serial.println(" ROM READ START");      //
  Serial.println("");                     //
  for ( int ad16=0; ad16<2; ad16++ ){     // A16 PL   0,         0
   for ( int ad_h=0; ad_h<256; ad_h++ ){  // HI  PF 7-0, 0000 0000
    for ( int ad_l=0; ad_l<256; ad_l++ ){ // LO  PK 7-0, 0000 0000
     PORTL = ad16;                        // A16 address set
     PORTF = ad_h;                        // HI  address set
     PORTK = ad_l;                        // LO  address set
     digitalWrite (CE, LOW);              // ROM CE_ select, PA0
     digitalWrite (OE, LOW);              // ROM OE_ select, PA2
     dt = PINC;                           // PORT C 8bit ROM Data Raed
     digitalWrite (OE, HIGH);             // ROM OE_ Reset , PA2
     digitalWrite (CE, HIGH);             // ROM CE_ Reset , PA0
     ihex_dump( ad16, ad_h, ad_l, dt );   // dump:intel HEX
   //hex_dump( ad_l, dt );                // dump:HEX
    }                                     //
   }                                      //
  }                                       //
  Serial.println("");                     //
  Serial.println(" ROM READ END");        // message
  delay(1000);                            //
  digitalWrite (LED, HIGH);               // LED OFF
 }                                        // LOOP
}
//========================================//===============================
void ihex_dump(int a16,int ah,int al,int dt){ // HEX DUMP
  int p = 0;                              //
  if ( ( al & B1111 ) == 0 ){             // First Line , LO BYTE CHECK
    Serial.print(":10");                  // Start
    if ( a16 < 16 ){ Serial.print("0");}  // 0 OUTPUT
    Serial.print( a16, HEX );             // A16
    if ( ah < 16 ) { Serial.print("0");}  // 0 OUTPUT
    Serial.print( ah, HEX );              // HI ADDRESS XX OUTPUT
    if ( al < 16 ) { Serial.print("0");}  // 0 OUTPUT
    Serial.print( al, HEX );              // LO ADDRESS XX OUTPUT
  //--------------------------------------//-------------------------------
    if ( (ah == 255) && (al == 240)){     // LAST , FF F0
      Serial.print("01");                 // data end 01h : LAST DATA
      p =  1;                             // sum = sum + 01h
      } else { Serial.print("00");        //
    }                                     //
    sum = 16 + a16 + ah + al + p;         // sum calculate
   }                                      //
  //--------------------------------------//-------------------------------
  if ( dt < 16 ){ Serial.print("0");}     // 0 OUTPUT
  Serial.print( dt, HEX );                // HEX DATA OUTPUT
  sum = sum + dt;                         // sum calculate
  //--------------------------------------//-------------------------------
  if ( ( al & B1111 ) == 15 ){            // 1 line output action
    sum = sum & B11111111;                // sum 8 bit mask
    sum = ( sum ^ B11111111 ) + 1;        // sumcheck : 2 no hosuu
    sum = sum & B11111111;                // sum 8 bit mask
    if ( sum < 16 ){ Serial.print("0");}  // 0X
    Serial.println(sum,HEX);              // sum HEX DATA OUTPUT
  }                                       //
}
//========================================//===============================
void hex_dump( int al, int dt ){          // HEX DUMP
  if ( dt < 16 ){ Serial.print("0");}     // 0X
  Serial.print( dt, HEX );                // DATA Print
  if ( ( al & B1111 ) == 15 ){            // 1 line output action
    Serial.println("");                   //
  }                                       //
} 
//========================================//===============================

Written by macsbug

11月 15, 2014 @ 1:07 am

カテゴリー: Arduino

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。