Код
void Write2Flash (void)
{
unsigned short i=0;
unsigned short *tempd= (unsigned short*)&uCalibrate; //указатель на структуру данных
unsigned short data;
unsigned short AppStartAddr =0x7400; //адресс начала данных во flash
for(i = AppStartAddr; i < 0x7800; i += 0x200) //очистим 2 блока по 512 байт
{
FEEMOD =0x0108;//разрешить запись
FEEADR = AppStartAddr; // set data address
FEECON = 0x05; // erase page command
while (!(FEESTA & 0x03)){ }
}
for(i=0;i<(sizeof(struct CalibrateStruct));i+=2)
{
data = (*(tempd+i));
FEEMOD = 0x0108; //разрешить запись
FEEADR = AppStartAddr; // set data address
FEEDAT = data; // set data value (16 bit register)
FEECON = 0x02; // single Write command
while (!(FEESTA&0x03)){ }
AppStartAddr += 1;
}
}
{
unsigned short i=0;
unsigned short *tempd= (unsigned short*)&uCalibrate; //указатель на структуру данных
unsigned short data;
unsigned short AppStartAddr =0x7400; //адресс начала данных во flash
for(i = AppStartAddr; i < 0x7800; i += 0x200) //очистим 2 блока по 512 байт
{
FEEMOD =0x0108;//разрешить запись
FEEADR = AppStartAddr; // set data address
FEECON = 0x05; // erase page command
while (!(FEESTA & 0x03)){ }
}
for(i=0;i<(sizeof(struct CalibrateStruct));i+=2)
{
data = (*(tempd+i));
FEEMOD = 0x0108; //разрешить запись
FEEADR = AppStartAddr; // set data address
FEEDAT = data; // set data value (16 bit register)
FEECON = 0x02; // single Write command
while (!(FEESTA&0x03)){ }
AppStartAddr += 1;
}
}
И считать при старте:
Код
void ReadFlash (void)
{
unsigned short i=0;
unsigned short *tempd= (unsigned short*)&uCalibrate;
unsigned short AppStartAddr =0x7400;
for(i=0;i<(sizeof(struct CalibrateStruct));i+=2)
{
FEEMOD = 0x0100;
FEEADR = AppStartAddr;
FEECON = 0x01; //Single Read
*(tempd+i)=FEEDAT;
AppStartAddr += 2;
}
}
{
unsigned short i=0;
unsigned short *tempd= (unsigned short*)&uCalibrate;
unsigned short AppStartAddr =0x7400;
for(i=0;i<(sizeof(struct CalibrateStruct));i+=2)
{
FEEMOD = 0x0100;
FEEADR = AppStartAddr;
FEECON = 0x01; //Single Read
*(tempd+i)=FEEDAT;
AppStartAddr += 2;
}
}
В результате имеем чистую структуру (что совсем не то, что ожидалось), или считаны/записаны (проверить не могу из-за отсутствия jtag ) только первые 2 байта.
Собственно вопрос - как писать и читать с флэша ?