   ArduinoSPI
1.      v.3

#include <SPI.h>
#define SS 4

byte buffer[0xFF];
byte val[256];
int i=0;

void setup()
{
  Serial.begin(115200);
  pinMode(SS,OUTPUT);
  digitalWrite(SS,HIGH);
  SPI.setClockDivider(SPI_CLOCK_DIV2);
  SPI.setBitOrder(MSBFIRST);
  SPI.begin(); 
  delay(10);
}

void WREN()
{
  digitalWrite(SS,LOW);
  SPI.transfer(0x06);
  digitalWrite(SS,HIGH);   
}

void CE()
{
  digitalWrite(SS,LOW);
  SPI.transfer(0x60);
  digitalWrite(SS,HIGH);   
}

void readpage(byte highadr,byte lowadr)
{
  digitalWrite(SS,LOW);
  SPI.transfer(0x03);
  SPI.transfer(highadr);
  SPI.transfer(lowadr);
  SPI.transfer(0x00);
  for(i=0;i<256;i++)
  {
    Serial.write(SPI.transfer(0x00));
  }
  digitalWrite(SS,HIGH);
}

void writepage(byte highadr,byte lowadr)
{
  digitalWrite(SS,LOW);
  SPI.transfer(0x02);
  SPI.transfer(highadr);
  SPI.transfer(lowadr);
  SPI.transfer(0x00);
  for (i=0;i<256;i++)
  {
    SPI.transfer(val[i]);
  }
  digitalWrite(SS,HIGH);
}

void loop()
{
  if (Serial.available() > 0) 
  {
    switch(Serial.read())
    {
      case 'c':
        WREN();
        CE();
      break;
     
      case 'f':
        byte addr[2];
        Serial.flush();
        i=0;
        while(i<2)
        {
          if(Serial.available()>0)
          {
            addr[i]=Serial.read();
            i++;
          }
        }
        Serial.flush();
        memset(val, '\0', 256);
        i=0;
        while(i<256)
        {
          if(Serial.available()>0)
          {
            val[i]=Serial.read();
            i++;
          }
        }

        WREN();
        delay(10);
        digitalWrite(SS,LOW);
        SPI.transfer(0x02);
        SPI.transfer(addr[0]);
        SPI.transfer(addr[1]);
        SPI.transfer(0x00);
        i=0;
        for (int i=0;i<256;i++)
        {
          SPI.transfer(val[i]);
        }
        digitalWrite(SS,HIGH);
        delay(10);
        readpage(addr[0],addr[1]);
      break;
      
      case 'r':
        byte addres[2];
        i=0;
        while(i<2)
        {
          if(Serial.available()>0)
          {
            addres[i]=Serial.read();
            i++;
          }
        }
        readpage(addres[0],addres[1]);
      break;
    }
    }
}  

2.        SPI.  ,     !!!
3.     ,   ,  ""   "".
4.  ""     .         (  = /256)   0xFF (       ).  "  "       .       .
5.  "".      ( "").      .     !!!     "".  ,    .
6.  "".      .     !!!     "".  ,    .
7.         ( "").      .     !!!     "".  ,    .
8.   ( "")         ,   .     : " .  : 0"

P.s.:     .    ,   . 
