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.

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

Other Parts Discussed in Thread: MSP430F2132

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

工程环境是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;       //错误指示
 }
    }
  }
}

  • 比如有个APP代码是这样的:

    @e000
    B2 40 80 5A 20 01 F2 40 11 00 2A 00 D2 C3 29 00
    F2 F0 EF 00 29 00 0C 43 30 41 31 40 00 04 B0 12
    3A E0 0C 43 B0 12 00 E0 B0 12 34 E0 32 D0 10 00
    FD 3F 03 43 03 43 FF 3F 03 43 1C 43 30 41
    @ffde
    FF FF
    @ffe4
    2C E0 2C E0
    @ffea
    2C E0 2C E0 2C E0 2C E0 2C E0 2C E0 2C E0 2C E0
    2C E0 2C E0 1A E0
    q

    具体要怎么操作,帮忙说说,谢谢

  • 1、MSP430F2132: 8KB + 256B Flash Memory, 512B RAM

    2、msp430的txt文件,简单点理解就是:@开头作为绝对位置定位,其他是执行代码