發布日期:2022-04-18 點擊率:44
1 引言
隨鉆測井儀器內部電路由于受到工作環境中沖擊振動因素的影響,往往采用灌膠注封的方法減震,起到保護電路板的目的。在儀器調試工作中難免需要調整各模塊控制功能和程序更新,由于電路板的編程接口被膠密封,加之隨鉆儀器特定的組裝工藝,每次更新電路程序都要消耗大量人力和時間進行拆卸安裝,效率很低。
本文以某隨鉆測井儀器中的MSP430F2XX型單片機為例,設計了一種總線式多單片機在線升級方法,該方法利用上位機PC通過RS485總線對系統內多個模塊在系統狀態實現了程序升級更新,很好的解決了上述問題。
2 MSP430F2XX在線編程方法
MSP430F2XX系列單片機是美國TI公司生產的16位超低功耗單片機,內部具有一定容量的閃速存儲器(Flash)[1],該存儲器是一個可獨立操作的物理存儲單元。全部模塊安排在同一個線性地址空間中, 存儲器被分為多個512字節的段(信息段大小為128/64字節)。各段可單獨擦除,并且在正常工作電壓下程序可對Flash進行擦寫操作,這一特點使得它特別適合在線程序升級。
MSP430FXXX系列單片機在線升級的基本原理[2]就是對其Flash空間進行自定義劃分,并按程序指定地址順序執行。以MSP430F2XX為例,打開Lnk430F2XX.xcl,修改此文件用于重新劃分單片機Flash存儲空間。該型號單片機存儲空間為4KB RAM,120KB+256B Flash[3]。 其原始存儲空間分布和在線編程空間分布如下圖1所示。
圖1中將2100H-FFBEH的Flash空間劃分為了3部分。一小部分用于存放引導程序,一小部分為用戶虛擬中斷地址區,剩下的大部分為用戶的應用程序空間。Flash空間的劃分目的是使程序的存放和程序的執行按地址有序進行。在線編程時的底層程序執行流程[4]如下圖2所示。
圖2 單片機底層程序執行流程圖
第一次對單片機進行燒寫時須通過仿真器將包含引導程序的主程序寫入單片機Flash,通過該程序來選擇引導應用程序,引導程序需要固定在Flash的一個位置上,且保證不能被擦除。以后再次更新程序時即可通過引導程序利用串口與上位機進行交互,完成應用程序的在線更新。
void main(void) {
WDTCTL = WDTPW + WDTHOLD;
if(ResetVectorValid()==1) // 判斷是否已經下載過應用程序
{
Application(); // 執行應用程序
}
Update(); // 執行升級程序
}
每次上電執行時,單片機從引導程序開始執行,首先
判斷應用程序是否存在。若存在,直接執行應用程序;從引導程序進入應用程序只需將PC值轉移到相應的應用程序起始地址位置即可。
void Application(void)
{
asm(" mov &0xF9BE, PC;"); // 在C中調用匯編指令實現地址轉移
}
若不存在,則啟動升級程序。在升級程序中,首先初始化串口,然后根據協議擦除Flash中指定用于存放應用程序的存儲空間,完成后通過串口向上位機發送握手指令,通知上位機發送更新代碼,最后將上位機發送的應用程序可執行文件寫入單片機片內 Flash的應用程序空 間,燒寫完成后執行更新后的應用程序。
void Update(void)
{
InitUart(); // 初始化串口
EraseFlash(unsigned int waddr); // 擦除指定位置Flash
uart_send("Update Ready !"); // 發送確認
while(1)
{
/*接受數據,并將數據寫入Flash指定地址空間*/
}
}
3 應用方案設計
將上述方法擴展,應用于隨鉆測井儀器多模塊電路程序在線升級更新,其總體構架設計如圖3所示。圖3系統中,為實現在系統狀態升級更新,以MSP430F2XX單片機為核心控制器的各子模塊電路,采用RS485總線方式與外部上位機連通,連接處為一塊RS485轉換電路,該電路將PC機發出的RS232串行數據轉換成RS485數據發送到RS485總線上[5]。工作時,上位機PC軟件將各單片機的應用程序的可執行文件通過RS485總線以不同的地址、不同的波特率發送到相應的模塊電路,實現各模塊的在系統狀態程序升級更新。
圖3 RS485總線式
多模塊在線升級更新總體構架
4 方法實現
與單單片機系統在線編程不同,多單片機系統由于存在多個子機,為使上位機程序能準確到達指定的子模塊電路,首先要為各子模塊定義各自的地址和通信波特率,并確保地址和波特率各不相同。當上位機以某一波特率發送地址位時,各子模塊分別以自己的波特率接收,然后對比地址。若接收到的地址與自己地址相同,則該子模塊準備進行程序在線更新;若不相同,則放棄更新,進入各自應用程序。
4.1 底層程序執行流程
對于處于多單片機系統中的各子模塊,其MSP430F2XX單片機存儲空間的重新劃分與單一系統在線編程時相同,見圖1。但其內部底層程序執行流程略有不同,主要體現在引導程序的編寫,如圖4所示。在引導程序中,首先要進行時鐘初始化,串口初始化,設定通信波特率,定時器初始化,然后開啟定時器,等待上位機發送地址。若在規定的時間內接收到上位機發送的地址,且與本子模塊地址相同,則向上位機發送確認信息,等待接收更新后的程序代碼,將其寫入用戶應用程序空間,完成程序在線升級更新;若在規定的時間內沒有接收到地址指令或接收到的地址與本機指定的地址不同,則跳過程序更新,運行原有應用程序。
圖4 多單片機系統下
各子模塊單片機底層程序執行流程
4.2 上位機軟件開發
圖5 上位機界面
上位機軟件采用LabVIEW設計開發[6],LabVIEW是NI公司推出的一種虛擬儀器軟件開發平臺,采用了編譯圖形化編程語言,軟件開發快速,靈活。上位機軟件的功能是當隨鉆測井儀器上電復位后,在規定時間內向指定子模塊發出更新程序指令(即子模塊地址),在收到該子模塊應答的確認信息后,向該子模塊發送程序代碼的可執行文件。上位機界面如圖5所示。在操作時,首先打開PC機與RS485轉換電路相連的串口,根據協議選擇波特率和數據比特,在命令欄輸入擬更新子模塊的地址,點擊“發送”按鈕,發送子模塊地址,待收到確認信息后,選擇要更新的程序文件,點擊“升級”按鈕,就可
以進行子模塊程序的升級更新了。更改地址和波特率,選擇相應的更新文件,即可對系統中其他子模塊進行程序在線升級更新。
5 結束語
將MSP430F2xx在線編程方法擴展到多單片機系統在線升級更新,并將其應用到隨鉆測井儀器在線程序更新,經實踐驗證表明,該升級方式穩定可靠,大大減少了隨鉆測井儀器電路維護的時間成本和人工成本,在實際應用中起到了事半功倍的效果。同時,此種方法同樣適用于采用了MSP430Fxxx系列的其他領域的多單片機系統程序在線更新。
參考文獻:
[1] 潘衛江等.MSP430單片機Flash存儲器的特性及應用[J]. 單片機與嵌入式系統應用,2001,(4):38-41.
[2] 袁娟等.MSP430程序升級方式探討 [J].單片機與嵌入式系統應用,2006,(5):65-67.
[3] MSP430x2xx Family User’s Guide[EB/OL].Literature Number:SLAU144H.
[4] 張園等.MSP430單片機串口的程序升級方法[J].單片機與嵌入式系統應用,2011,(10):23-24.
[5] 沈建華,楊艷琴編著.MSP430系列16位超低功耗單片機原理與實踐[M].北京航空航天大學出版社,2008.
[6] 鄭對元等編著.精通LabVIEW虛擬儀器程序設計[M].清華大學出版社,2012.
下一篇: PLC、DCS、FCS三大控
上一篇: 索爾維全系列Solef?PV