系統升級功能須要 把內部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