欒婷 王效亮 劉志蕾
摘 要 本文研究一種利用XC164的內(nèi)嵌引導(dǎo)程序加載機(jī)制實(shí)現(xiàn)控制參數(shù)在線調(diào)整的方法。文章介紹了實(shí)現(xiàn)機(jī)制,分析了設(shè)計(jì)原理,完整地給出了上下位機(jī)軟件及接口的設(shè)計(jì)和實(shí)現(xiàn)情況。該方法目前已成功的應(yīng)用在控制系統(tǒng)性能調(diào)試中,操作簡單明了,提高了系統(tǒng)調(diào)試的工作效率,極大地減少了軟件設(shè)計(jì)人員的重復(fù)工作量。
【關(guān)鍵詞】串口 XC164 參數(shù)下載
1 引言
隨著數(shù)字集成電路的高速發(fā)展,電機(jī)驅(qū)動(dòng)多采用單片機(jī)或DSP來控制,控制算法采用軟件編程的方式內(nèi)嵌入控制芯片,實(shí)現(xiàn)控制要求。在控制算法建模完成后,通常需要在真實(shí)系統(tǒng)中對(duì)控制參數(shù)進(jìn)行多次調(diào)整才能滿足控制性能的要求,這需要多次更改代碼中的控制參數(shù),多次編譯程序并燒寫到控制芯片中,稍有不慎,就會(huì)改錯(cuò)地方,或在不期望變動(dòng)的地方產(chǎn)生變動(dòng),出現(xiàn)安全隱患,且對(duì)后期問題的查找?guī)砗芏嗖槐恪1疚慕榻B一種通過串口燒寫控制參數(shù)的參數(shù)在線下載方法。
2 設(shè)計(jì)原理簡析
本文采用英飛凌公司的XC164單片機(jī)作為控制芯片實(shí)現(xiàn)一種不更改程序修改參數(shù)的功能。XC164 的內(nèi)嵌引導(dǎo)程序加載器(BSL)提供了一種加載啟動(dòng)程序的機(jī)制,通過串行接口實(shí)現(xiàn)。BSL機(jī)制可以用來加載Flash器件的編程程序。硬件復(fù)位時(shí),進(jìn)入BSL模式后將自動(dòng)進(jìn)行相應(yīng)的初始化,引腳TxD0設(shè)置為輸出,BLS向提供加載數(shù)據(jù)的主機(jī)返回一個(gè)ID字節(jié)。發(fā)送ID字節(jié)后,BLS通過ASC0接口循環(huán)接收數(shù)據(jù),并將數(shù)據(jù)存入用戶指定的任意地址單元。該數(shù)據(jù)可以是最終的應(yīng)用程序代碼,也可以是更高級(jí)的加載程序,還可以是一段代碼。XC164芯片片上Flash存儲(chǔ)器由多個(gè)可以獨(dú)立進(jìn)行寫保護(hù)、擦除和編程的扇區(qū)組成,基于BSL機(jī)制,可以通過將程序和參數(shù)加載到不同的Flash區(qū)中來實(shí)現(xiàn)參數(shù)下載功能。
原理圖如圖1所示,將Flash空間分配為代碼數(shù)據(jù)存儲(chǔ)區(qū)和下載參數(shù)存儲(chǔ)區(qū),通過上位機(jī)軟件將程序代碼和下載參數(shù)分別寫入Flash的不同區(qū)域中,再通過內(nèi)嵌入XC164芯片的軟件執(zhí)行讀取、使用下載參數(shù)的功能。
3 程序空間使用和分配
要實(shí)現(xiàn)參數(shù)下載首先需要為下載參數(shù)分配Flash空間,下面給出XC164芯片的空間分配情況和參數(shù)下載的空間分配情況。
3.1 XC164芯片空間分配
XC164的存儲(chǔ)器空間為馮諾伊曼體系架構(gòu)。即程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、寄存器和IO口組織在同一個(gè)線性地址空間內(nèi),容量高達(dá)16MB。整個(gè)存儲(chǔ)器空間可按字節(jié)或字訪問。XC164單片機(jī)有兩段片上程序存儲(chǔ)區(qū),可用于代碼數(shù)據(jù)的存儲(chǔ)。第一是程序Flash/ROM,可用于代碼和常量數(shù)據(jù)的存儲(chǔ);第二是程序SRAM,可用于存儲(chǔ)臨時(shí)代碼序列以及其他數(shù)據(jù)信息,掉電后數(shù)據(jù)被擦除。片上Flash存儲(chǔ)器由四個(gè)8KB扇區(qū)、一個(gè)32KB扇區(qū)和一個(gè)64KB扇區(qū)組成。每個(gè)扇區(qū)可分別進(jìn)行寫保護(hù)、擦除和編程。片上Flash模塊扇區(qū)映射見圖2。
扇區(qū)0:0x00C00000~0x00C01FFF(8K);
扇區(qū)1:0x00C02000~0x00C03FFF(8K);
扇區(qū)2:0x00C04000~0x00C05FFF(8K);
扇區(qū)3:0x00C06000~0x00C07FFF(8K);
扇區(qū)4:0x00C08000~0x00C0FFFF(32K);
扇區(qū)5:0x00C10000~0x00C1FFFF(64K)。
3.2 在線下載參數(shù)空間分配
在編譯過程中程序會(huì)自動(dòng)將代碼和常量數(shù)據(jù)存貯在芯片的Flash區(qū)域中,根據(jù)編譯環(huán)境的不同,存儲(chǔ)的位置會(huì)有所差別。本文中使用的編譯環(huán)境為Keil4,扇區(qū)0為代碼和常量的起始存儲(chǔ)位置,扇區(qū)2為數(shù)據(jù)的起始存儲(chǔ)位置,為了給程序留出足夠的存儲(chǔ)空間,避免存儲(chǔ)空間沖突,本設(shè)計(jì)將下載參數(shù)分配到扇區(qū)5,下載控制參數(shù)時(shí)只對(duì)該片F(xiàn)lash區(qū)單獨(dú)擦寫,不會(huì)影響其他區(qū)域的內(nèi)容。
4 參數(shù)下載功能實(shí)現(xiàn)
參數(shù)下載主要需實(shí)現(xiàn)如圖3的3個(gè)步驟,首先通過參數(shù)轉(zhuǎn)換模塊將參數(shù)轉(zhuǎn)換成為能夠燒寫到控制芯片中的格式,然后通過燒寫軟件實(shí)現(xiàn)燒寫功能,燒寫過程中從上位機(jī)到控制芯片需要進(jìn)行電平轉(zhuǎn)換,最后,控制芯片中的控制程序在檢測(cè)到燒寫完成的參數(shù)后將參數(shù)讀出執(zhí)行閉環(huán)控制。
4.1 參數(shù)轉(zhuǎn)換功能實(shí)現(xiàn)
本設(shè)計(jì)中參數(shù)直接由燒錄軟件通過串口燒寫到芯片的Flash中,必須將參數(shù)轉(zhuǎn)換成.H86或.hex文件格式才能燒寫到Flash中。Hex文件的編碼規(guī)則以行為單位,,每行以冒號(hào)開頭,內(nèi)容全部為16進(jìn)制碼(ASCII碼)。將某一值為100的整型參數(shù)放在0x00C10001地址中,編寫的Hex文件如下:
:0200000400C13B
:02000100640067
:00000001FF
:0200000400C03A看作 0x02,0x00,0x00,0x04,0x00,0xc1,0x3b。其中0x02代表數(shù)據(jù)長度,其后的0x00,0x00為地址,0x04為數(shù)據(jù)類型,0x00,0xc1為數(shù)據(jù),0x3a為校驗(yàn)和。其中數(shù)據(jù)類型分為以下幾類:00—數(shù)據(jù)記錄、01—文件結(jié)束記錄、02—擴(kuò)展段地址記錄、03—開始段地址記錄、04—擴(kuò)展線性地址記錄、05—開始線性地址記錄。本行文件數(shù)據(jù)類型為0x04,那么隨后數(shù)據(jù)的基地址為(0x00c1<<16)|0x0000。
:02000100640067看作 0x02,0x00,0x00,0x00,0x64,0x00,0x67。其中0x02代表數(shù)據(jù)長度,其后的0x00,0x01為地址,0x00為數(shù)據(jù)類型,數(shù)據(jù)類型為數(shù)據(jù)記錄,0x64,0x00為數(shù)據(jù),0x67為校驗(yàn)和。由于上一行中數(shù)據(jù)類型為擴(kuò)展線性地址記錄,因此數(shù)據(jù)存儲(chǔ)的地址為(0x00c1<<16)|0x0000+0x0001=0x00C10001。
:00000001FF為每個(gè)Hex文件的最后一行,代表文件結(jié)束。
按照上述規(guī)則,根據(jù)協(xié)議將參數(shù)轉(zhuǎn)換成hex文件。本設(shè)計(jì)中采用C#語言編寫參數(shù)轉(zhuǎn)換功能的界面和轉(zhuǎn)換程序,流程如圖4。
界面如圖5,點(diǎn)擊打開數(shù)據(jù)按鈕打開參數(shù)文件,可直接使用或進(jìn)行更改。點(diǎn)擊啟動(dòng)轉(zhuǎn)換按鈕即可生成需要的hex文件。點(diǎn)擊參數(shù)下載按鈕打開參數(shù)燒寫軟件,執(zhí)行參數(shù)下載功能。
4.2 參數(shù)下載功能實(shí)現(xiàn)
Memtool工具是英飛凌公司提供的串口程序燒寫軟件,支持Flash空間的單獨(dú)擦寫,支持多種hex文件到單片機(jī)的燒錄。在Memtool工具中選擇芯片型號(hào),將自動(dòng)顯示該型號(hào)芯片的Flash分布情況,利用此工具,可以直接將生成的hex文件寫入指定Flash片區(qū)。下載界面如圖6所示。
本參數(shù)下載采用串口實(shí)現(xiàn),需要實(shí)現(xiàn)TTL電平到RS232之間的轉(zhuǎn)換,本設(shè)計(jì)采用max232芯片完成電平轉(zhuǎn)換。
4.3 下位機(jī)程序設(shè)計(jì)
下位機(jī)中參數(shù)在線下載部分軟件設(shè)計(jì)的流程圖如圖7所示。首先為保證控制的有效性,為控制參數(shù)賦一組默認(rèn)值,在程序運(yùn)行時(shí),檢測(cè)參數(shù)下載區(qū)是否有參數(shù),如果有,將參數(shù)更新為下載參數(shù)。下載分配地址范圍是:0x00C10000~0x00C1FFFF(64K),每個(gè)參數(shù)分配16位或32位數(shù)據(jù)空間,須與上位機(jī)制定協(xié)議一致。
5 結(jié)果及結(jié)論
基于串口的單片機(jī)參數(shù)下載方法已成功的應(yīng)用在控制系統(tǒng)性能調(diào)試中,極大地減少了軟件設(shè)計(jì)人員的工作量,提高了控制系統(tǒng)調(diào)試的工作效率,縮短了控制系統(tǒng)的開發(fā)周期。
此方法是直接將下載參數(shù)轉(zhuǎn)換成二進(jìn)制文件后再燒錄到Flash中,只需更改參數(shù)下載地址,就可以靈活的應(yīng)用與其他單片機(jī),方法通用性很強(qiáng)。
參考文獻(xiàn)
[1]朱德爽,胡鳳燕,胡復(fù)明等譯.C#完全手冊(cè)[美]Herbert Schildt 著[M].電子工業(yè)出版社,2002.
[2]張曉斌,周鑫,鄭先成.基于RS_232的FLASH在線編程研究[J].機(jī)電一體化,2011.
[3]朱艷芳,李艷娟,楊茜,付士.一種基于RS422的DSP應(yīng)用程序的在線升級(jí)方法[J].制造技術(shù)研究,2015(10):5.
[4]XC164-16內(nèi)嵌C166SV2核的16位單片微控制器第1卷:系統(tǒng)單元,infineon Technologies Asia Pacific,2006.
[5]XC164-16內(nèi)嵌C166SV2核的16位單片微控制器第2卷:外設(shè)單元,infineon Technologies Asia Pacific,2006.
作者單位
北京精密機(jī)電控制設(shè)備研究所 北京市 100076