(BLE) CC2640R2 SPI驅動(基於TI Drivers) 注意點

系統升級功能須要 把內部flash數據發送到外部flash作備份等操做。 注意,內部flash起始地址爲0,和NULL是同樣的,函數

所以在使用驅動接口的時候,對於第一個page的flash,會看成NULL處理, 這就引起bug,SPI驅動會認爲TX-BUF爲NULL而使用默認的0x00做爲填充數據!ui

因此對於這個特別的page,先拷貝到ram再發送到驅動層, 且注意,不要使用memcpy,由於也會進行NULL判斷。code

按照以下方式(代碼來自upgrade.c)接口

//then copy the first page
    
    /******************************************************
      Caution!!!!
      The fisrt flash page start addr is 0 !!!
      That is the same as NULL!!!!
      so copy to ram buffer first!!!
      DO NOT use memcpy!!
    ******************************************************/
    do{
      uint8_t buff[4];
      
      pSrc = (const uint8_t*)INTFLASH_BLE_APP_ADDR;
      dstAddr=extFlashAddr;
      
      ((uint32_t*)buff)[0]=((uint32_t*)pSrc)[0];
      
      if(copy_page_to_sflash(buff,dstAddr,4)!=0)
        return -1;
      
      return copy_page_to_sflash(pSrc+4,dstAddr+4,256-4);
      
    }while(0);

而在BIM中,因爲是按一個一個字節發送數據的,所以此問題不會出現! 但依舊須要注意NULL問題,不要使用 memcpy等函數。flash

相關文章
相關標籤/搜索