采用MAXQ1103評(píng)估套件和面向MAXQ30的CrossW
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
MAXQ1103是Maxim集成產(chǎn)品公司的新一代安全微控制器,設(shè)計(jì)用于金融終端。它運(yùn)行16位指令,提供一個(gè)32位數(shù)據(jù)通道。微控制器在一個(gè)機(jī)器周期中執(zhí)行完成指令,是性能非常高的RISC機(jī)。MAXQ1103還具有很多重要的安全特性,包括:
支持DES、3DES、SHA-1、SHA-224、SHA-256、RSA、DSA和ECDSA的密碼加速器
真正的硬件隨機(jī)數(shù)發(fā)生器
1KB低泄漏電池備電NVSRAM
與外部電路連接的7個(gè)防篡改探測(cè)輸入
環(huán)境傳感器,例如溫度和電壓超范圍探測(cè)器
評(píng)估(EV)套件是安全應(yīng)用原型開(kāi)發(fā)的理想平臺(tái)。套件提供兩個(gè)串口,兩個(gè)智能卡插槽(一個(gè)全尺寸,一個(gè)SIM卡),一個(gè)USB連接器,一個(gè)LCD屏,一個(gè)16按鍵鍵盤(pán)以及原型區(qū)。
設(shè)置MAXQ1103評(píng)估套件
評(píng)估套件如圖1所示。需要采用下面列出的硬件元件來(lái)完成本應(yīng)用筆記所討論的工作:
MAXQ1103評(píng)估套件電路板
JTAG電路板
JTAG電纜(連接MAXQ1103評(píng)估套件電路板和JTAG電路板)
9針串行電纜
穩(wěn)壓電源(5V、±5%、300mA、中心正極)
<center>
詳細(xì)電路圖(PDF,14.4MB)
圖1.MAXQ1103評(píng)估套件
評(píng)估套件電路板和JTAG電路板都有很多跳線需要進(jìn)行配置。如果需要了解跳線及其功能的詳細(xì)信息,請(qǐng)參考各自的數(shù)據(jù)手冊(cè)。對(duì)于本應(yīng)用筆記,請(qǐng)按照以下要求來(lái)配置跳線:
在MAXQ1103評(píng)估套件電路板上,短接跳線JU1,連接JU5上面的兩個(gè)引腳(最靠近JU5標(biāo)簽的兩個(gè)引腳)?,F(xiàn)在,所有其他跳線應(yīng)打開(kāi)。如果,JU6到JU18的所有跳線都短接,那就OK。這是智能卡通信需要的配置,本應(yīng)用筆記不涉及。
在JTAG電路板,短接JH1和JH2,打開(kāi)JH3。
在JTAG電路板和MAXQ1103套件電路板之間連接JTAG電纜。在JTAG電路板上,紅色電纜應(yīng)連接至標(biāo)有引腳1和引腳2的一側(cè),以及MAXQ1103套件電路板的TCK-GND一側(cè)。
注意,在早期的MAXQ1103評(píng)估套件中,MAXQ1103IC可能采用了插槽。如果是這樣,把MAXQ1103插入到IC標(biāo)記向下的插槽中(無(wú)鉛指示符“+”應(yīng)在右上側(cè))。
在您的PC和JTAG電路板之間連接9針串行電纜。不要將其連接至MAXQ1103評(píng)估套件電路板。將電源連接至這兩塊電路板。
采用CrossWorks編譯器進(jìn)行設(shè)計(jì):Blinky
我們不以“HelloWorld”開(kāi)始,而是構(gòu)建一個(gè)簡(jiǎn)單的應(yīng)用程序,該應(yīng)用程序使MAXQ103套件電路板上的一個(gè)LED閃爍。
我們使用的工具包是RowleyAssociates公司提供的CrossStudio?,F(xiàn)在,工具包當(dāng)前版本是面向MAXQ30的CrossWorks(2.0.0.2008063000.2293版),可用于產(chǎn)生本文檔的截屏顯示。為確定是否是最新版本,請(qǐng)?jiān)诰€訪問(wèn)RowleyAssociates網(wǎng)站,或者通過(guò)Maxim支持中心,與我們?nèi)〉寐?lián)系。
在建立新方案時(shí),點(diǎn)擊FileNewNewProject。在NewProject彈出框中,填寫(xiě)底部的Name和Location框,從ProjectTemplates窗口中選擇“ACexecutable”(圖2)。我們調(diào)用工程BlinkyDemo,將其放到目錄C:workmaxqmaxq1103blinky中。
圖2.選擇“ACexecutable”,填寫(xiě)工程名稱(chēng)和位置
單擊Next繼續(xù),您將看到ProjectProperties彈出框。選擇默認(rèn)值即可,單擊Finish,建立工程(您可以單擊Next,選擇其他的選項(xiàng);本工程在這些選項(xiàng)中使用所有默認(rèn)值)。
在建立工程時(shí),ProjectExplorer框中會(huì)出現(xiàn)一個(gè)新工程(圖3),通常位于應(yīng)用程序窗口的右上。打開(kāi)它,您將看到兩個(gè)文件夾,SourceFiles和SystemFiles。打開(kāi)SourceFiles,將看到main.c,這是您的應(yīng)用程序源代碼。雙擊它,打開(kāi)。
圖3.ProjectExplorer窗口
自動(dòng)生成的源代碼非常簡(jiǎn)單,我們只需要加入幾行就可以使我們的閃爍應(yīng)用程序工作。復(fù)制以下應(yīng)用程序代碼(替換main.c文件中當(dāng)前的所有內(nèi)容)。
#include
#include
voiddelayms(unsignedlongcount)
{
unsignedintx;
while(count>0)
{
for(x=0;x<2500;x++)
{
__no_operation();
}
count--;
}
}
voidmain(void)
{
//setport0toalloutput
PD0=0xff;
while(1)
{
//togglebits0,1,7
PO0=PO0^0x83;
delayms(500);
}
}
當(dāng)我們運(yùn)行這一應(yīng)用程序時(shí),會(huì)看到LEDDS1、DS2和DS3(位于套件電路板MAXQ1103的左下側(cè))閃爍,接通0.5s,關(guān)斷0.5s。注意,“delayms”函數(shù)并不恰好是一毫秒,而是非常接近,達(dá)到了blinky應(yīng)用程序的目的。
在運(yùn)行演示實(shí)例前,必須首先構(gòu)建它。選擇BuildBuildBlinkyDemo?;蛘甙聪翭7來(lái)構(gòu)建。如果一切都正確構(gòu)建,您將在Output窗口看到消息“Buildcomplete”,它旁邊有一個(gè)對(duì)勾(圖4)。如果有錯(cuò),請(qǐng)確定您輸入的代碼是否正確。
圖4.工程構(gòu)建后的輸出
運(yùn)行應(yīng)用程序時(shí),單擊DebugStepOver。也可以按下F10,或者單擊帶有向下箭頭工具條中的圖標(biāo)(圖5)。
圖5.StepOver按鈕
CrossStudio通過(guò)JTAG電路板把應(yīng)用程序下載到MAXQ1103中,Output窗口顯示狀態(tài)消息。應(yīng)用程序?qū)㈤_(kāi)始運(yùn)行,然后,在代碼第一行停止(左側(cè)空白區(qū)顯示黃色箭頭)。運(yùn)行應(yīng)用程序時(shí),單擊“Play”按鈕(或者選擇DebugGo)。現(xiàn)在,請(qǐng)確定MAXQ1103電路板上的LED正在閃爍。您可能希望能夠在一定程度上修改應(yīng)用程序。使LED按順序閃爍,或者改變點(diǎn)亮?xí)r間,更快或者更慢的閃爍。
使用CrossStudio調(diào)試應(yīng)用程序
現(xiàn)在,讓我們了解一下MAXQ1103和CrossStudio工具的調(diào)試功能。MAXQ1103有內(nèi)置JTAG引擎,支持在實(shí)際芯片上進(jìn)行調(diào)試,從而不需要昂貴的仿真器或者有可能出錯(cuò)的模擬器。注意,MAXQ1103還提供鎖定機(jī)制,在元件鎖定時(shí),防止JTAG工作。這樣,當(dāng)MAXQ1103微控制器用在敏感應(yīng)用中時(shí),保證了JTAG調(diào)試引擎不會(huì)帶來(lái)安全威脅。
現(xiàn)在,我們返回到最初的Blinky應(yīng)用程序,在主函數(shù)中,把延時(shí)從500改到5:
delayms(5);
現(xiàn)在,構(gòu)建并運(yùn)行應(yīng)用程序。注意,LED持續(xù)點(diǎn)亮,而不是不斷閃爍。這就是簡(jiǎn)單演示代碼第一次編寫(xiě)并運(yùn)行時(shí)的情況。
這樣會(huì)帶來(lái)一個(gè)基本問(wèn)題:“燈的確是連續(xù)點(diǎn)亮,還是閃爍非常快,而無(wú)法察覺(jué)呢”?如果燈是連續(xù)點(diǎn)亮,那就有必要檢查原理圖和引腳分配,確定一切OK。如果LED只是很快地閃爍(太快,以至于看不清間隔),那就只需要調(diào)整時(shí)間,這是可能需要做的工作。為回答這一問(wèn)題,我們現(xiàn)在使用CrossStudio的調(diào)試工具。
按下Pause按鈕(或者選擇DebugBreak)。在代碼停止的地方,出現(xiàn)一個(gè)黃色箭頭。代碼很有可能停止在delayms()函數(shù)的‘for’循環(huán)中(參見(jiàn)圖6)。
圖6.在delayms()函數(shù)中,代碼停止運(yùn)行
觀察右側(cè)的Locals窗口(如果看不到該窗口,單擊DebugDebugWindowsLocals)。該窗口將顯示變量“x”和“count”的當(dāng)前值。現(xiàn)在,按下StepOver按鈕幾次。在Locals窗口中,您應(yīng)該看到x值增加了(可以連續(xù)按下StepOver,直到循環(huán)結(jié)束,但這可能需要很長(zhǎng)的時(shí)間)。
現(xiàn)在,已經(jīng)很容易回答“燈是在閃爍嗎”這一問(wèn)題了?對(duì)此,需要在main函數(shù)的delayms(5)一行設(shè)置斷點(diǎn),單擊該代碼行左側(cè)的小三角。它將變?yōu)榧t圈(圖7)?,F(xiàn)在,再次運(yùn)行應(yīng)用程序(DebugGo,或者Play按鈕)。應(yīng)用程序會(huì)運(yùn)行到這一點(diǎn),然后暫停?,F(xiàn)在,點(diǎn)擊Go若干次后,您會(huì)看到,隨著您的點(diǎn)擊,燈接通和關(guān)斷。這驗(yàn)證了燈是在閃爍,只是太快,我們的眼睛無(wú)法察覺(jué)。
圖7.加入斷點(diǎn)
現(xiàn)在,我們借這個(gè)機(jī)會(huì)了解一下更多的調(diào)試功能。按下StepOver按鈕幾次,按順序執(zhí)行三行代碼:while(1),PO0=PO0^0x83和delayms(5)。您將看到,當(dāng)通過(guò)PO0行時(shí),燈閃爍?,F(xiàn)在,當(dāng)暫停在delayms(5)行時(shí),按下StepInto按鈕(圖8),進(jìn)入delayms()函數(shù)(而不是StepOver,這會(huì)執(zhí)行整個(gè)函數(shù))。
圖8.StepInto按鈕
在運(yùn)行時(shí),還可以改變變量(和寄存器)。清除所有斷點(diǎn)(DebugBreakpointsClearAllBreakpoints),單擊Go。單擊Pause,程序應(yīng)再次停止在delayms()函數(shù)的中間部分。注意“x”和“count”值?,F(xiàn)在,把x設(shè)置為2499(單擊x顯示的數(shù)值,高亮后輸入2499)。執(zhí)行幾次StepOver或者StepInto,您會(huì)看到循環(huán)結(jié)束,“count”值也遞減了。
以及您感興趣的其他調(diào)試功能:DebugDisassembly將同時(shí)顯示C代碼和生成的匯編代碼。這樣,用戶可以進(jìn)入?yún)R編代碼,而不是C代碼,同時(shí)知道對(duì)應(yīng)于C代碼的什么位置。
DebugDebugWindowsCallStack將顯示應(yīng)用程序到達(dá)當(dāng)前位置時(shí)所調(diào)用的函數(shù)。如果在delayms()函數(shù)中暫停執(zhí)行,其顯示如圖9所示。
使用DebugStop停止調(diào)試,觀察右側(cè)的Targets窗口。確定MaximSerialJTAGAdapter以粗體字顯示,觀察下面的配置選項(xiàng)。如果您使用串口,而不是默認(rèn)的COM1,那么,可以在這里改變這一選項(xiàng)。
圖9.在delayms()函數(shù)中運(yùn)行時(shí)調(diào)用堆棧