① MSP430 寫用戶FLASH時 復位/死機 的解決辦法
在寫flash之前需要對相應的扇區進行擦除,否則數據就會出錯。因為430的flash是「與顫顫」結構,只能通過向某一位寫0將該位拉低,比如復位值是0xFF,先寫入0x0F將高4位變成0,如果不擦除(即將該位重新置為0xFF)再向該地址寫入0xF0,該地址的值就會變成0x00,而不是想要的0xF0。
你所出現的死機可能是你擦除或者寫入的時候將原來的程序塊改變了悉賀,比如原來程序是在0x2000地址開始的地方,你寫入的數據睜洞派和它在一個地址就會導致程序錯誤,程序跑飛,使單片機死機。
② MSP430單片機,用戶代碼如何跳轉到內置的BSL代碼執行
JTAG是邊界掃描技術,其在430內部有邏輯介面給JTAG使用,內部有若干個寄存器連接到了430的內部數據地址匯流排上,所以可以用JTAG訪問430內部的所有資源,包括對FLASH的讀寫操作。所以可以用於對MSP430的模擬及編程。主要連接線有TMS、TCK、TDI、TDO、RST、TEST。
2、SBW是SPY-BI-WIRE,可以簡稱兩線制JTAG,主要用SBWTCK(連接到JTAG模擬器的7腳TCK)與SBWTDIO(連接到JTAG模擬器的1腳TDO/TDI),該介面主要用於小於28腳的2系列的430單片機,因為28腳以內的2系列單片機的JTAG介面一般與IO口復用,為了給用戶預留更多的IO口,才推出了SBW介面。同樣SBW介面可以用於模擬器及編程器。
3、BSL是TI在對MSP430出廠時預先固化到MCU內部的一段代碼,有點類似於DSP的bootloader,但又與bootloader有明顯的區別,BSL只能用於對MCU內部的FLASH訪問,不能對其他的資源訪問,所以只能用作編程器介面。BSL通過UART協議與編程器連接通信。編程器可以發送不同的通信命令來對MCU的存儲器做不同的操作。BSL的啟動有些特殊,一般430復位啟動時PC指針指向FFFE 復位向量,但可以通過特殊的啟動方式可以使MCU在啟動是讓PC
指向BSL內部固化的程序。啟動方式一般是由RST引腳與TEST(或TCK)引腳做一個稍復雜的啟動邏輯後產生。BSL啟動後,就可以對MCU進行訪問了。
一般的MCU都有代碼加密功能,430是如何實現的呢?外部對430內部的代碼讀寫只能通過上述的三種方式,所以又引入了熔絲位,熔絲位只存在於JTAG、SBW介面邏輯內。BSL內部沒有熔絲。當熔絲燒斷時(物理破壞,且不可恢復)JTAG與SBW的訪問將被禁止,此時只有BSL可以訪問。而通過BSL對MCU的訪問是需要32個位元組的密碼,該密碼就是用戶代碼的中斷向量表。所以430的加密系統到目前為止尚無被解密的報告。
模擬器的型號一般有UIF(USB介面,支持JTAG、SBW)、PIF (並口,只支持JTAG)、EZ430(USB介面的,只支持SBW模式)。專業編程器有GANG430(串口