Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

MSP430F2132 通过串口实现自定义升级:txt解析问题

$
0
0

大家好,用串口实现在线升级:

工程环境是CCS.

FLASH空间分配:

APP   :0xE000 --0XEFFF //这么小,主要是因为我没看到2132 flash 到底有多大,知道的同学请告诉我,在哪看的,另外RAM多大也顺便告诉我吧

BOOT:0xF000 -- 0xFFFF //

BOOT 程序主体:  //网上借鉴的别人的,可是我不清楚理论上应该是怎样解析txt,并烧录到具体的flash空间上,麻烦大神们帮忙解释解释,多谢


  init_uart();                                // 初始化串口
  EraseFlash(0);//擦除应用程序Flash区
 // uart_send("Update Ready !");               // 发送确认
/* 下面一段函数为串口数据接收和处理程序 */
  while(1)
  {
    if(IFG2 & UCA0RXIFG)//if(UCA0IFG & UCRXIFG)   //while (!(IFG2&UCA0TXIFG));
    {
      RxTemp=UCA0RXBUF;
#if 1
   //***********for test ********************
      if(RxTemp=='@')
      {
       P2OUT ^= BIT0; //LED
      }
   //*******************************************
#endif
      RecBuf[RecCnt++]=RxTemp;
    if(RxTemp==0x0A && RecCnt>0 )   //有收到串口数据
 {
    if(RecBuf[0]=='q') //quit
   {
    //_NOP();
    //return;
       asm(" mov &0xEFFE, PC;");  //检测到 ‘q’,接收完毕
    }
  else if(RecBuf[0]=='@') //address
    {
  P2OUT &= ~BIT0; //LED
     i=1;
     Addr=0;
     while(1)
       {
  if(RecBuf[i]<'0')
    break;
  Addr<<=4;
  Addr+=AsciiToHex(RecBuf[i]);
  i++;
       }
  //set address here
     }
   else //number
     {
      RecTemp=0;
      j=0;
      for(i=0; i<400; i++)
       {
  if(RecBuf[i]<'0')
    {
      if(RecBuf[i]==0x0A)
        { break;}
      if(NumberFlag)
        {  NumberFlag=0;
         WriterBuf[j++]=RecTemp;
         }
    }
         else if(RecBuf[i]>='0')
    {
      RecTemp <<= 4;
      RecTemp += AsciiToHex(RecBuf[i]);
      NumberFlag=1;
           }
        }
     if(j>0)
       {
  //write data
  WriteFlash(Addr,WriterBuf,j);
  Addr += j;
  j=0;
        }
     NumberFlag=0;
     }
  RecCnt=0;
  RxTemp=0;
 }
      if(RecCnt>400)
 {
         
       P2OUT &= ~BIT2;       //错误指示
 }
    }
  }
}


Viewing all articles
Browse latest Browse all 3634

Trending Articles