針對Motorola微處理器的BDM調試系統的設計
由于所有的信號都是單向的,時(shí)序和邏輯比較簡(jiǎn)單,因此,采用GAL器件實(shí)現并口操作時(shí)序與BDM操作時(shí)序的轉換。GAL要實(shí)現的功能主要是數據的串并和并串轉換。
GAL器件與并口接口的信號有:
輸入信號:D0~D7,C1(主機忙狀態(tài)線(xiàn)),DSCLK(提供串行通信時(shí)鐘信號)。
輸出信號:S3,S4,S5,S7(這4個(gè)信號做數據反向輸出),S6(給PC機提供一個(gè)中斷信號)。
他與BDM端口接口的信號有:
輸入信號:PSTCLK,DSO。
輸出信號:DSI?!?br />
故需配置12個(gè)輸入端和6個(gè)輸出端,故選用74GAL16V8的器件即可滿(mǎn)足要求[2]?,F在GAL器件要實(shí)現的即是將與并口接口的輸入信號(D0~D7,C1,DSCLK)轉換成與BDM接口的輸出信號(DSI),同理,也要將與BDM端口接口的輸入信號(PSTCLK,DSO)轉換成與并口接口的輸出信號(S3,S4,S5,S6,S7),實(shí)現了這2個(gè)轉換,然后對GAL編程,設計PCB版圖,可以很快做出BDM調試卡。
3.2 BDM驅動(dòng)程序的設計
BDM調試卡已經(jīng)實(shí)現了并口到BDM口的時(shí)序操作轉換,按照一定的數據格式傳送和接收數據則是BDM調試卡的驅動(dòng)程序要完成的工作,驅動(dòng)程序對數據的處理分為2層:底層完成基本的字節數據的收發(fā)(恢復和拆分);上層則完成數據包的收發(fā)。底層的數據收發(fā)原理在調試卡的設計過(guò)程中已經(jīng)做了詳細的介紹,以下主要介紹數據包的收發(fā)處理程序設計應注意的事項。
從BDM操作時(shí)序圖中可以看出,串行通道數據傳輸速度從直流到PSTCLK頻率的1/5頻率之間,該通道使用雙工模式,數據可在主控設備和從控設備之間同時(shí)發(fā)送和接收,每次傳送的數據塊由一個(gè)17 b的數據包組成,該數據包由一個(gè)狀態(tài)/控制位和一個(gè)16 b數據字組成。數據格式如下所示:
![]() |
發(fā)送數據時(shí)最高位為控制標志,該位保留,在開(kāi)發(fā)系統向CPU發(fā)出命令和數據時(shí),該位應該被清除。
接收數據時(shí)最高位為狀態(tài)標志位,指示從CPU返回的消息類(lèi)型。他與數據域及數據表示的消息含義之間的關(guān)系為:
![]() |
顯然,由于每次只能傳送一個(gè)字節,故發(fā)送一個(gè)數據包需要執行3次傳送操作。應注意由于并口工作在4位組模式,每次只能接收4 b數據[1],而并口操作是以字節為單位進(jìn)行的,因此,實(shí)際上接收一個(gè)數據包最少應該執行6次接收操作,而不是5次。也即是說(shuō)最后剩下一位數據也要當一個(gè)字節傳送,這在驅動(dòng)程序的設計當中很容易弄錯。
BDM調試模塊為外部開(kāi)發(fā)系統提供了12個(gè)基本類(lèi)型的命令(用助記符表示):RAREG/RDREG(讀A/D寄存器),WAREG/WDREG(寫(xiě)A/D寄存器),READ(從存儲器讀數據),WRITE(向存儲器寫(xiě)數據),DUMP(與READ命令結合使用轉儲數據塊),FILL(與WRITE命令結合使用填充數據塊),GO(繼續執行程序),NOP(不做任何操作,可以被用做一個(gè)空指令),RCREG(讀系統控制寄存器),WCREG(向系統控制寄存器寫(xiě)入數據),RDMREG(讀調試模塊寄存器),WDMREG(寫(xiě)向調試模塊寄存器寫(xiě)入數據);各種命令和他對應的應答數據的格式可以從MCF5272芯片資料上查到。上層驅動(dòng)程序最終的任務(wù)就是實(shí)現這12種基本命令數據和應答數據的收發(fā),并為調試軟件提供相應的函數調用接口,具體的驅動(dòng)程序設計比較簡(jiǎn)單,關(guān)鍵是要注意對從調試模塊返回的狀態(tài)數據進(jìn)行出錯處理。特別是應該區別CPU還沒(méi)準備好和總線(xiàn)操作被中止2種消息。前者出現的比較多,一般是在CPU正在執行一個(gè)任務(wù),不能及時(shí)響應BDM命令時(shí)返回的消息,而后者則往往是CPU執行了2條有沖突的指令(也即是非法訪(fǎng)問(wèn)資源)。這個(gè)在驅動(dòng)程序中看不出有很大的區別,但是在調試應用程序時(shí)經(jīng)常報告“BUSError”信息。
3.3 BDM調試軟件的設計
該軟件應該具有如下基本的功能:系統初始化,重啟系統,檢查CPU外圍期間工作是否正常,讀寫(xiě)Flash中的數據,讀寫(xiě)SRAM中的數據,單步執行程序。
調試軟件主要是調用驅動(dòng)程序實(shí)現的12種BDM調試命令接口函數來(lái)實(shí)現各種功能的。其中需要傳遞參數給驅動(dòng)程序的有:
①檢查外部設備接口是否工作正常:如RS232串口、USB口、并口、網(wǎng)口等。這類(lèi)操作需要接口地址和中斷號等參數,并且需要返回操作結果。
②讀寫(xiě)SRAM和Flash中的數據:這些操作需要提供存儲器的地址范圍。
調試軟件的設計因開(kāi)發(fā)系統的操作系統不同,在實(shí)現上有比較大的區別,但處理過(guò)程基本相同,因此,軟件的設計也比較簡(jiǎn)單,沒(méi)有必要贅述。
3.4 系統運行及其測試
應用MCF5272做嵌入式系統開(kāi)發(fā)時(shí),開(kāi)發(fā)平臺的操作系統是RedHatLinux,因此,驅動(dòng)程序和調試軟件都是針對Linux設計的。驅動(dòng)程序將BDM調試卡作為一個(gè)字符設備看待,BDM卡的初始化是在/usr/src/linux/driverschar/mem.c中添加BDM卡初始化代碼[3],該設備的基本入口點(diǎn)在驅動(dòng)程序的file_operation結構中,對BDM卡的操作命令均在此實(shí)現,具體代碼不再詳述。
調試系統做整體測試時(shí),首先要在Linux下創(chuàng )建一個(gè)字符型的BDM設備,然后執行insmod命令將驅動(dòng)程序模塊打入操作系統內核中[3],在成功地創(chuàng )建了BDM設備文件和安裝好BDM調試卡的驅動(dòng)程序之后,就可以調試和執行該調試軟件了。
4 結語(yǔ)
BDM調試系統具有成本低、操作方便、移植簡(jiǎn)單等特點(diǎn)。在Linux環(huán)境下針對MCF5272成功開(kāi)發(fā)了BDM調試系統后,又先后將該系統軟件稍加改動(dòng),就輕易地移植到與MCF5272同屬ColdFire系列的MCF5249和Power PC系列的MPC555等CPU上,并且在Window下重新編寫(xiě)了驅動(dòng)程序和調試軟件,使用圖形界面操作,基本上達到了CodeWarrior相應軟件的功能,為產(chǎn)品的快速低成本開(kāi)發(fā)做出了貢獻。
評論