Dear Sir,
We are using TM4C129XCNZAD interface with Macronix 512MB flash.
We are able to read and write data less than 256 but not able to read data more than 256.
We are writing structure to the flash and read flash to again fill the structure.
If data length is less than 256 function working fine but more than 256 reading 0 value.
//*****************************************************************************
//
// This function write data to SSI External Flash
//
//*****************************************************************************
void SSIFlashWrite(uint32_t ulAddress, uint32_t ulLen,uint8_t *pucData)
{
uint32_t ui32Index;
uint8_t*ucData;
uint32_t ulLength;
ucData=pucData;
ulLength=ulLen;
SSILibSendPageProgram(SSI3_BASE,ulAddress,INS_PAGE_PROGRAM);
for(ui32Index=0;ui32Index<ulLength;ui32Index++)
{
SSIDataPut(SSI3_BASE,ucData[ui32Index]);
pui32DataTx[ui32Index]=ucData[ui32Index];
}
SSIAdvDataPutFrameEnd(SSI3_BASE,ucData[ulLength]);
}
//*****************************************************************************
//
// This function read data from SSI External Flash
//
//*****************************************************************************
void SSIFlashRead(uint32_t ulAddress1, uint32_t ulLen1,uint8_t *puc1Data)
{
uint32_t ui32Index;
uint32_t ulAddress;
uint8_t*ucData;
uint32_t ulLength;
ucData=puc1Data;
ulLength=ulLen1;
ulAddress=ulAddress1;
SSILibSendReadDataAdvBi(SSI3_BASE,ulAddress,INS_READ_DATA);
for(ui32Index=0;ui32Index<ulLength;ui32Index++)
{
SSIDataPut(SSI3_BASE,DUMMY_BYTE);
SSIDataGet(SSI3_BASE,&pui32DataRx[ui32Index]);
ucData[ui32Index] = pui32DataRx[ui32Index];
}
SSIAdvDataPutFrameEnd(SSI3_BASE,DUMMY_BYTE);
// SSIDataGet(SSI3_BASE,&pui32DataRx[ui32Index]);
// ucData[ui32Index] = pui32DataRx[ui32Index];
}
/*****************************************************************************
//
// This function read Meter from SSI External Flash
//
//*****************************************************************************
void Meter_Data_read(void)
{
SSIFlashRead(0, DATA_LENGTH, (unsigned char *)(&Meter_data.First_boot));
}
//*****************************************************************************
//
// This function write Meter data to SSI External Flash
//
//*****************************************************************************
void Meter_Data_write(void)
{
SSILibSendEraseCommand(SSI3_BASE,0,INS_SECTOR_ERASE_4KB);
SSIFlashWrite(0, DATA_LENGTH, (unsigned char *)(&Meter_data.First_boot));
}
My structure
_packed struct Stored_Meter_data
{
unsigned char First_boot; //1 //0
float software_ver; //4 //1-4
float hardware_ver; //4 //5-8
unsigned int database_log_cnt; //4 //9-12
unsigned char database_log_ov; //1 //13
char Device_serial_no[11]; //11 //14-24
float PTRatio; //4 //25-28
float CTRatio; //4 //29-32
char Port_no[6]; //5 //33-38
char ip_buffer[16]; //16 //39-54
char null_ip_position; //1 //55
char port_position; //1 //56
unsigned int total_log_cnt; //4 //57
unsigned int reg_database_log_ov; //4 //61
unsigned int reg_log_cnt; //4 //65
unsigned char lattitude[10]; //10 //69
unsigned char longitude[10]; //10 //79
char lattitude_position; //1 //89
char longitude_position; //1 //90
unsigned char E_key[16]; //16 //91-106
unsigned char A_key[16]; //16 //107-122
unsigned char D_key[16]; //16 //123-138
unsigned char S_Title[8]; //8 //139-146
unsigned char S_T[20]; //20 //147-166
unsigned char EKey0[20]; //20 //167-186
unsigned char EKey1[20]; //20 //187-206
unsigned char AKey0[20]; //20 //207-226
unsigned char AKey1[20]; //20 //227-246
unsigned char DKey0[20]; //20 //247-266
unsigned char DKey1[20]; //20 //267-286
}Meter_data; //-------------------------->>287
Attaching file for flash read and write function .
Also show structure which are to be written to flash.