TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP432P401R的Flash Scetor 0 的Earse問題

你好,

目前我有需求是想要透過外部Uart將需要更新的開機碼燒錄到Flash裡面,因為硬體當初沒規劃好,所以不能用BSL,我的想法是將程式碼傳過去以後,用Erase和Program的方式,將程式碼從Flash Sector 0開始重寫。

但是當我執行下面程式的時候,

bool tmp ;

              MAP_FlashCtl_unprotectSector(FLASH_MAIN_MEMORY_SPACE_BANK0,FLASH_SECTOR0);

               tmp = MAP_FlashCtl_isSectorProtected(FLASH_MAIN_MEMORY_SPACE_BANK0 ,FLASH_SECTOR0);
               tmp = MAP_FlashCtl_performMassErase();
  //                             if(!MAP_FlashCtl_eraseSector(0x00000000))
  //                                while(1);

無論是Mass Erase或是EraseSector,都會跳出錯誤無法執行。

請問這有辦法解決嗎?

Susan Yang:

您的UART BSL pins: P1.2 – BSLRXD, P1.3 – BSLTXD都被占用了?

Legend Chang:

回复 Susan Yang:

是的,都拿去做別的用途,無法從這個port做BSL的動作

Susan Yang:

回复 Legend Chang:

那您是必须使用UART吗?下面的引脚呢
SPI BSL pins: P1.4 – BSLSTE, P1.5 – BSLCLK, P1.6 – BSLSIMO, P1.7 – BSLSOMII2C BSL pins: P3.6 – BSLSDA, P3.7 – BSLSCL

是否也都被使用?

另外还有使用无线方式的OTA,需要外接无线芯片

dev.ti.com/…/msp432_ota_wifi_updates.html

Legend Chang:

回复 Susan Yang:

因為硬體接線已經固定了,這幾個port已經接地或是做別的用途。只剩下唯一的外部通訊Uart。

都是有線的連接。

Susan Yang:

回复 Legend Chang:

那关于flash,请您看一下

dev.ti.com/…/node

/* Filling our buffer and writing it to memory using the blocking program* API*/memset(writeBuffer, 0x00, 4096);MAP_FlashCtl_unprotectSector(FLASH_MAIN_MEMORY_SPACE_BANK1, FLASH_SECTOR0);MAP_FlashCtl_programMemory(writeBuffer, (void*) FLASH_ERASE_LOCATION, 4096);

Legend Chang:

回复 Susan Yang:

這個範例是可以執行的,但是一旦我將FLASH_MAIN_MEMORY_SPACE_BANK1改成FLASH_MAIN_MEMORY_SPACE_BANK0
FLASH_ERASE_LOCATION改成從0x00000000開始,一樣又會發生錯誤

Legend Chang:

回复 Susan Yang:

這樣看起來好像沒法從一般Uart來重寫Flash。

我看了一下規格,請問有可能從Flash mailbox來做這件事情嗎?

www.ti.com/…/slau690e.pdf

我是看上面這份文件,裡面的JTAG/SWD Lock Firmware Update這部分有提到可以利用flash mailbox更新firmware,但是上面的範例是寫到0x00001000,不曉得可不可以寫到0x00000000?

赞(0)
未经允许不得转载:TI中文支持网 » MSP432P401R的Flash Scetor 0 的Earse問題
分享到: 更多 (0)