Чтение 0 страницы во 2 буфер:
Код
void AT45_Mem_to_Buf2(void) // считать страницу из памяти во 2 буфер
{
volatile int n;
unsigned char MEM_status;
SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
*pSPI_TDBR = 0x55;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
//The SPI will be turned off
SPI_OFF();
//Pause before continuing
for(n=0; n<DELAY; n++)
{
asm("nop;");
}
do
{
MEM_status = AT45_Status(); // ожидание готовности памяти
} while (!(MEM_status & 0x80));
}
{
volatile int n;
unsigned char MEM_status;
SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
*pSPI_TDBR = 0x55;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
//The SPI will be turned off
SPI_OFF();
//Pause before continuing
for(n=0; n<DELAY; n++)
{
asm("nop;");
}
do
{
MEM_status = AT45_Status(); // ожидание готовности памяти
} while (!(MEM_status & 0x80));
}
Запись во 2 буфер по адресу 0x02 значения 0xAA
Код
void AT45_Buf2_Write(void) // модификация 2 буфера
{
volatile int n;
//turns on the SPI in single write mode
SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
*pSPI_TDBR = 0x87; // buf 2
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x02; // adr
Wait_For_SPIF();
*pSPI_TDBR = 0xAA; // data
Wait_For_SPIF();
//The SPI will be turned off
SPI_OFF();
//Pause before continuing
for(n=0; n<DELAY; n++)
{
asm("nop;");
}
}
{
volatile int n;
//turns on the SPI in single write mode
SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
*pSPI_TDBR = 0x87; // buf 2
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x02; // adr
Wait_For_SPIF();
*pSPI_TDBR = 0xAA; // data
Wait_For_SPIF();
//The SPI will be turned off
SPI_OFF();
//Pause before continuing
for(n=0; n<DELAY; n++)
{
asm("nop;");
}
}
Запись 2 буфера в память
Код
void AT45_Buf2_to_Mem(void) // запись 2 буфера в память
{
volatile int n;
unsigned char MEM_status;
//turns on the SPI in single write mode
SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
*pSPI_TDBR = 0x86; // buf 2
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
//The SPI will be turned off
SPI_OFF();
//Pause before continuing
for(n=0; n<DELAY; n++)
{
asm("nop;");
}
do
{
MEM_status = AT45_Status(); // ожидание готовности памяти
} while (!(MEM_status & 0x80));
}
{
volatile int n;
unsigned char MEM_status;
//turns on the SPI in single write mode
SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
*pSPI_TDBR = 0x86; // buf 2
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
//The SPI will be turned off
SPI_OFF();
//Pause before continuing
for(n=0; n<DELAY; n++)
{
asm("nop;");
}
do
{
MEM_status = AT45_Status(); // ожидание готовности памяти
} while (!(MEM_status & 0x80));
}
Чтение 0 страницы через 1 буфер
Код
void AT45_Mem_to_Buf1(void) // считать страницу из памяти в 1 буфер
{
volatile int n;
unsigned char MEM_status;
SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
*pSPI_TDBR = 0x53; // buf 1
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
//The SPI will be turned off
SPI_OFF();
//Pause before continuing
for(n=0; n<DELAY; n++)
{
asm("nop;");
}
do
{
MEM_status = AT45_Status(); // ожидание готовности памяти
} while (!(MEM_status & 0x80));
}
{
volatile int n;
unsigned char MEM_status;
SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
*pSPI_TDBR = 0x53; // buf 1
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
//The SPI will be turned off
SPI_OFF();
//Pause before continuing
for(n=0; n<DELAY; n++)
{
asm("nop;");
}
do
{
MEM_status = AT45_Status(); // ожидание готовности памяти
} while (!(MEM_status & 0x80));
}
Чтение из 1 буфера по адресу 0x01
Код
unsigned char AT45_Buf1_Read(void) // чтение из 1 буфера
{
volatile int n;
unsigned char spi_dat;
unsigned long ulDummyRead, ulDummyWrite=0;
unsigned char MEM_status;
SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
*pSPI_TDBR = 0xD1; // buf 1
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x01; // adr
Wait_For_SPIF();
*pSPI_TDBR = 0x00; // 1 Dummy Byte
Wait_For_SPIF();
ulDummyRead = *pSPI_RDBR;
Wait_For_SPIF();
*pSPI_TDBR = ulDummyWrite;
Wait_For_SPIF();
spi_dat = *pSPI_RDBR;
//The SPI will be turned off
SPI_OFF();
//Pause before continuing
for(n=0; n<DELAY; n++)
{
asm("nop;");
}
do
{
MEM_status = AT45_Status(); // ожидание готовности памяти
} while (!(MEM_status & 0x80));
return spi_dat;
}
{
volatile int n;
unsigned char spi_dat;
unsigned long ulDummyRead, ulDummyWrite=0;
unsigned char MEM_status;
SetupSPI( (COMMON_SPI_SETTINGS|TIMOD01) );
*pSPI_TDBR = 0xD1; // buf 1
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x00;
Wait_For_SPIF();
*pSPI_TDBR = 0x01; // adr
Wait_For_SPIF();
*pSPI_TDBR = 0x00; // 1 Dummy Byte
Wait_For_SPIF();
ulDummyRead = *pSPI_RDBR;
Wait_For_SPIF();
*pSPI_TDBR = ulDummyWrite;
Wait_For_SPIF();
spi_dat = *pSPI_RDBR;
//The SPI will be turned off
SPI_OFF();
//Pause before continuing
for(n=0; n<DELAY; n++)
{
asm("nop;");
}
do
{
MEM_status = AT45_Status(); // ожидание готовности памяти
} while (!(MEM_status & 0x80));
return spi_dat;
}
PS Если есть у кого драйвер для загрузки программы в эту флеш или примеры работы с ней, скиньте на 0x05собакаmail.ru