⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bldbgprc.c

📁 本程序为ST公司开发的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
   {
   SelectSdram(SELECT_SDRAM);  	
    return 0;
   }

  
  //!!}
  //!! else
  //!! {
  //!! bl_bspi_ptr->sf_id = bl_bspi_rdid(bl_bspi_ptr); 
  //!!if(bl_sf_erase(bl_bspi_ptr) == 0)
  //!!{
  //!! return 0;
  //!! }	
  //!!}
  

  // Xsfer Patch Code Into RAM_A Patch Code area.

  //!!if(bl->dwn_ctrl_flags.sdram_connected)
  //!!{
  //!! SelectSdram(SELECT_BSPI);	
  //!!}


  bl_code_addr_ptr = (uint32 *)BL_RAM_A_BASE_ADDR; // 0x4000 0000
  bl_mem_size = bl->patch_area_size    ;           // 0x18000/0xA000

  bl_sf_addr = BL_SF_PATCH_AREA_START_ADDR;        // 0x0000 0000
  for(i = 0; i < (bl_mem_size>>8); i++)
  {
   // Each Cycle is 256 bytes (0x100)
   j = 0;
   while(j < 256)
   {

     bl->code_word.all = *bl_code_addr_ptr;
     bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
     bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
     bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
     bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
     bl_code_addr_ptr++;
   }



   if(bl_sf_pp(bl_sf_addr, 256, bl_bspi_ptr) == 0)
   {
    SelectSdram(SELECT_SDRAM);  	
    return 0;
   }
   bl_sf_addr += 0x100;



  }

  // Verify


  bl_code_addr_ptr = (uint32 *)BL_RAM_A_BASE_ADDR;
  //[Opt] bl_mem_size = BL_PATCH_AREA_SIZE;
  bl_sf_addr = BL_SF_PATCH_AREA_START_ADDR;


  for(i = 0; i < (bl_mem_size>>8); i++)
  {
   // Each Cycle is 256 bytes (0x100)


   bl_sf_read(bl_sf_addr, 256, &bl->bspi);



    j = 0;
    while (j < 256)
    {
      bl->code_word.all = *bl_code_addr_ptr;
      if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
       || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
       || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
       || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
      {
        SelectSdram(SELECT_SDRAM);
        return 0;
      }
      bl_code_addr_ptr++;
    }


   bl_sf_addr += 0x100;
  }

  // Xfer Overlay Code, DSP Code and Further Info to SDRAM
  //if(bl->dwn_ctrl_flags.sdram_connected)
  //{
   // Something has been Trasferred into SDRAM
   if(bl->dwn_ctrl_flags.patch_code_activated)
   {
    SelectSdram(SELECT_SDRAM);

    bl_code_addr_ptr = (uint32 *)BL_SDRAM_BASE_ADDR;	// 0x8000 0000
    // 0x80000 - 0x14000 - 0x100.
    //bl_mem_size = BL_OVERLAY_AREA_SIZE*BL_OVERLAY_QTY;
    bl_mem_size = bl->sf_data_4_sdram_size ;
    bl_sf_addr = bl->sf_overlay_area_start_addr;
    for(i = 0; i < (bl_mem_size>>8); i++)
    {
     // Each Cycle is 256 bytes (0x100)
     j = 0;
     while(j < 256)
     {

      bl->code_word.all = *bl_code_addr_ptr;
      bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
      bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
      bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
      bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
      bl_code_addr_ptr++;
     }

     SelectSdram(SELECT_BSPI);

     if(bl_sf_pp(bl_sf_addr, 256, bl_bspi_ptr) == 0)
     {
     SelectSdram(SELECT_SDRAM);
      return 0;
     }
     bl_sf_addr += 0x100;

     SelectSdram(SELECT_SDRAM);

    }

    // Verify


    bl_code_addr_ptr = (uint32 *)BL_SDRAM_BASE_ADDR;
    //[Opt] bl_mem_size = bl->sf_data_4_sdram_size ;
    bl_sf_addr = bl->sf_overlay_area_start_addr;
    
    for(i = 0; i < (bl_mem_size>>8); i++)
    {
     // Each Cycle is 256 bytes (0x100)
     SelectSdram(SELECT_BSPI);

     bl_sf_read(bl_sf_addr, 256, bl_bspi_ptr);

     SelectSdram(SELECT_SDRAM);

      j = 0;
      while (j < 256)
      {
        bl->code_word.all = *bl_code_addr_ptr;
        if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
         || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
         || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
         || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
        {
          return 0;
        }
        bl_code_addr_ptr++;
      }

     bl_sf_addr += 0x100;
    }
   }
  

  if(bl_StoreDwlInfo(&bl->bspi))
  {
  	return 1;
  }
  else
  {
  	return 0;
  }
}



/******************************************************************************/
/* Function: bl_StoreDwlInfo                                                  */
/*                                                                            */
/* \brief    It stores download information into last 256 bytes               */
/*           of Serial Flash                                                  */
/*                                                                            */
/* \param    void                                                             */
/*                                                                            */
/* \return   void                                                             */
/* \remark                                                                    */
/*                                                                            */
/******************************************************************************/

uint32 bl_StoreDwlInfo(BL_BSPI_STRUCT *bl_bspi_ptr)
{

  //uint32 i;
  uint32 j;
  //uint32 *bl_code_addr_ptr;
  uint32 bl_sf_addr;
  //uint32 bl_mem_size;
  
  // Xsfer Patch Code Into RAM_A Patch Code area.

  bl_sf_addr = bl->sf_dwn_info;        

  // Each Cycle is 256 bytes (0x100)
  j = 0;
  while(j < 232)
  {
   bl->code_word.all = 0x00;
   //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
   //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
   //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
   //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
   bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);
  }

  bl->code_word.all = bl->max_addr;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
   bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);

  bl->code_word.all = bl->code_size;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
   bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);

  bl->code_word.all = bl->code_checksum;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
   bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);

  bl->code_word.all = bl->max_sdram_addr;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
   bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);

  bl->code_word.all = bl->sdram_code_size;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
   bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);

  
  bl->code_word.all = bl->sdram_code_checksum;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
  //bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
  bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);

  //!!if(bl->dwn_ctrl_flags.sdram_connected)
  //!!{

   SelectSdram(SELECT_BSPI);
   if(bl_sf_pp(bl_sf_addr, 256, bl_bspi_ptr) == 0)
   {
    SelectSdram(SELECT_SDRAM);
    return 0;
   }
   SelectSdram(SELECT_SDRAM);
  //!!}
  //!!else
  //!!{
  //!! if(bl_sf_pp(bl_sf_addr, 256, bl_bspi_ptr) == 0)
  //!! {    
  //!!  return 0;
  //!! }	
  //!!}
  
  // Verify
  
  

  bl_sf_addr = bl->sf_dwn_info ;        


  //!!l->dwn_ctrl_flags.sdram_connected)
  //!!
   SelectSdram(SELECT_BSPI);
   bl_sf_read(bl_sf_addr, 256, bl_bspi_ptr);
   SelectSdram(SELECT_SDRAM);
  //!!
  //!!
  //!!
  //!! bl_sf_read(bl_sf_addr, 256, bl_bspi_ptr);	
  //!!}



  j = 232;


  bl->code_word.all = bl->max_addr;
  if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
  {
     return 0;
  }

  bl->code_word.all = bl->code_size;
  if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
  {
     return 0;
  }

  bl->code_word.all = bl->code_checksum;
  if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
  {
     return 0;
  }

  // Size of the code downloaded into SDRAM
  bl->code_word.all = bl->max_sdram_addr;
  if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
  {
     return 0;
  }

  // Size of the Code downloaded into SDRAM
  bl->code_word.all = bl->sdram_code_size;
  if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
  {
     return 0;
  }

  // Checksum of Code dowloaded into SDRAM
  bl->code_word.all = bl->sdram_code_checksum;
  if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
   || (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
  {
     return 0;
  }



  return 1;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -