你好,
目前我有需求是想要透過外部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?