with reference to above mentioned issue, i have provided my spi and flash drivers, please check this and help me in solving this issue.
void flash_write()
{
unsigned int memaddress = 0x00,address = 0x00;;
unsigned char check[10] = {0x0B,0x0B,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB};
spi_write(SPI_FLASH_CS, FLASH_WREN, 1,&dummy,0);
do
{
spi_read(SPI_FLASH_CS, FLASH_RDSR, 1,&status,1);
}while(status & 0x01);
memaddress = (FLASH_PW << 24) | 0x11;
spi_write(SPI_FLASH_CS, memaddress, 4,&check,10);
}
void flash_read()
{
unsigned int memaddress = 0x00,address = 0x00;
memaddress = (FLASH_READ << 24) | 0x10;
spi_read(SPI_FLASH_CS, memaddress, 4,&chk_rd[0],10);
}
/*
* spi.c
*
* Created on: Nov 14, 2013
* Author: satheeshr
*/
#define SPI_BAUD 32
#define SPI_CTL ENUM_SPI_CTL_SCKLO | ENUM_SPI_CTL_SCKBEG | ENUM_SPI_CTL_MASTER | ENUM_SPI_CTL_EN
#define SPI_SLVSEL_RESET 0x0000FE00
#define SPI_FLASH ENUM_SPI_SLVSEL_SSEL1_EN
void spi_init()
{
*pREG_SPI0_SLVSEL = SPI_SLVSEL_RESET | SPI_FLASH;
*pREG_SPI0_CLK = SPI_BAUD;
*pREG_SPI0_CTL = SPI_CTL;
*pREG_SPI0_RXCTL = ENUM_SPI_RXCTL_RX_EN | ENUM_SPI_RXCTL_OVERWRITE;
*pREG_SPI0_TXCTL = ENUM_SPI_TXCTL_TX_EN | ENUM_SPI_TXCTL_ZERO | ENUM_SPI_TXCTL_TTI_EN;
}
int spi_write(unsigned int device,unsigned int address,unsigned char addressLength,unsigned char *data,int count)
{
unsigned int index = 0,mask = 0;
unsigned char dummy;
*pREG_SPI0_SLVSEL &= ~device;
do
{
--addressLength;
mask = addressLength * 8;
*pREG_SPI0_TFIFO = ((address >> mask) & 0xFF);
Delay(40);
while(!(*pREG_SPI0_STAT & ENUM_SPI_STAT_TFIFO_EMPTY))
dummy = *pREG_SPI0_RFIFO;
}while(addressLength > 0);
Delay(40);
while(index < count)
{
*pREG_SPI0_TFIFO = data[index++]; // Transfer a byte
while(!(*pREG_SPI0_STAT & ENUM_SPI_STAT_TFIFO_EMPTY))
dummy = *pREG_SPI0_RFIFO;
Delay(40);
}
*pREG_SPI0_SLVSEL |= device;
return 0;
}
int spi_read(unsigned int device,unsigned int address,unsigned char addressLength,unsigned char *data,int count)
{
unsigned char value,dummy;
unsigned int index = 0,mask = 0;
*pREG_SPI0_SLVSEL &= ~device;
do
{
--addressLength;
mask = addressLength * 8;
*pREG_SPI0_TFIFO = ((address >> mask) & 0xFF);
Delay(40);
while(!(*pREG_SPI0_STAT & ENUM_SPI_STAT_TFIFO_EMPTY));
dummy = *pREG_SPI0_RFIFO;
}while(addressLength > 0);
while(!(*pREG_SPI0_STAT & ENUM_SPI_STAT_RFIFO_E))
dummy = *pREG_SPI0_RFIFO;
while(index < count)
{
*pREG_SPI0_TFIFO = 0x00;
while(*pREG_SPI0_STAT & BITM_SPI_STAT_RFE);
data[index++] = *pREG_SPI0_RFIFO; // Read data byte
Delay(40);
}
*pREG_SPI0_SLVSEL |= device;
Delay(40);
return 0;
}