This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430G2755串口固件升级问题,急求助

Other Parts Discussed in Thread: MSP430G2755

各位好,现用G2755做串口升级,写flash中总是随机有一行写入失败而且出现在0x8000-0x8200之间。串口升级程序无中断。

贴上code,

时钟:

void Clock_Init(void)
{
DCOCTL = 0; // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_8MHZ; // Set DCO
DCOCTL = CALDCO_8MHZ;

BCSCTL1 &=~XTS; //XT1低频模式
BCSCTL1 |= DIVA_0 + XT2OFF; //关闭XT2,XT1不分频
BCSCTL2 |= SELM_0 + DIVM_0+DIVS_3;//+ SELS //MCLK选择DCO时钟,不分频,SMCLK选择DCO,分频
BCSCTL3 |=LFXT1S_2; //ACLK为VLO=12KHz

}

flash:

void Flash_Init()
{
FCTL2 = FWKEY +FSSEL_2 + FN1;
}

void EraseFlash(unsigned int waddr,unsigned int APP_START_ADDRESS,unsigned int APP_SEG_NUM,unsigned int FLASH_PAGE_SIZE)
{
char i = 0;
waddr = APP_START_ADDRESS;
__disable_interrupt(); // 关闭总中断
for(i = 0;i < APP_SEG_NUM; i++)
{
FCTL3 = FWKEY;
FCTL1 = FWKEY + ERASE; // 擦除操作
*(unsigned char*)waddr=0; // 虚拟的擦除段操作
while(FCTL3 & BUSY);
waddr += FLASH_PAGE_SIZE;
}
FCTL3=FWKEY+LOCK;

// __enable_interrupt(); //打开全局中断
}

unsigned char WriteFlash(unsigned int addr,unsigned char *pdata,
unsigned char length)
{
unsigned char ErrorFlag = 0;
unsigned char i;

while(FCTL3 & BUSY);

__disable_interrupt();

FCTL3 = FWKEY; // 清除锁
FCTL1 = FWKEY + WRT; // 设置WRT位为写操作
for(i=0;i<length;i++)
{
*(unsigned char*)addr=*pdata; // 写一个字节
/* if(ReadFlash(addr)!=*pdata) // 验证,写比较.正确或错误
{
ErrorFlag = 1; // 设置错误标志
} */
addr++;pdata++;
}
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;

// __enable_interrupt(); //打开全局中断

return ErrorFlag;
}