TI中文支持网
TI专业的中文技术问题搜集分享网站

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;
}

灰小子:

奇怪的问题。你的电源稳定吗?flash的擦除和写操作对电压有要求。

yue feng1:

回复 灰小子:

你好,dirtwillfly.

确实奇怪,昨天一直都有这种现象。我的是MSP430G2755搭配76930,今天一上班,断掉电芯用FET供电升级就没问题,之后再接上电芯升级也没出现异常,很奇怪。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430G2755串口固件升级问题,急求助
分享到: 更多 (0)