S12系列MCU通用編程系統(tǒng)的改進(jìn)設(shè)計(jì)
2.2 通信子程序的改進(jìn)
2.2.1 優(yōu)化通信子程序代碼
通信流程的改進(jìn)提高了整個(gè)編程系統(tǒng)的通信速率。進(jìn)一步分析編程系統(tǒng),從JM60發(fā)送數(shù)據(jù)到目標(biāo)芯片,內(nèi)存需要的時(shí)間在整個(gè)程序下載過(guò)程中占用比例比較大;而在1位發(fā)送過(guò)程中,如圖7所示,從位開(kāi)始時(shí)刻到目標(biāo)芯片讀取時(shí)刻的周期間隔是固定的10~13個(gè)目標(biāo)周期,但位與位之間的發(fā)送存在時(shí)隙。
在原有編程系統(tǒng)的字節(jié)發(fā)送代碼中,發(fā)送位1和位0是兩個(gè)單獨(dú)的子程序,需要通過(guò)判斷來(lái)分別調(diào)用兩個(gè)子程序。所使用的BCC、JSR、BRA都是周期較長(zhǎng)的指令,且每發(fā)送1位就調(diào)用1次JSR指令,就有一次RTS指令返回,需要周期較多。在改進(jìn)編程系統(tǒng)的字節(jié)發(fā)送代碼中,將位1和位0的發(fā)送代碼很好地結(jié)合在 1個(gè)子程序之內(nèi),縮短了位與位之間發(fā)送的時(shí)隙。本文引用地址:http://m.butianyuan.cn/article/152430.htm
編程系統(tǒng)通過(guò)BDM硬件命令WRITE_WORD發(fā)送1個(gè)字,需要調(diào)用5次字節(jié)發(fā)送程序。發(fā)送的5字節(jié)分別是1字節(jié)的命令操作碼、2字節(jié)的內(nèi)存地址、2字節(jié)的數(shù)據(jù),同時(shí)硬件命令WRTE_WORD的完成還需要延遲150個(gè)編程調(diào)試器時(shí)鐘周期。所以假如從編程調(diào)試器發(fā)送100 KB的數(shù)據(jù)到目標(biāo)芯片內(nèi)存,其所需要花費(fèi)的時(shí)間計(jì)算如下:
在JB8的編程系統(tǒng)中,發(fā)送1個(gè)字節(jié)的周期為:2+(1+3+5+4+4+4+3+3+4+7)×8+4=310,100 KB的數(shù)據(jù)需要(100×1024÷2)個(gè)字×(5×310+150)個(gè)周期÷(3×106)=29.01 s。
在改進(jìn)的編程系統(tǒng)中,發(fā)送1個(gè)字節(jié)的周期為:2+2+4+3+1+1+2+4+(1+3+6+88)×8+2+4=809,100 KB的數(shù)據(jù)需要(100×1024÷2)個(gè)字×(5×809+150)個(gè)周期÷(24×105)=8.95 s。
而JM60緩存中的數(shù)據(jù)是以連續(xù)存放的形式寫(xiě)入目標(biāo)芯片內(nèi)存的,因此可以選用BDM固件命令WRITE_NEXT,每次執(zhí)行命令時(shí)寄存器X的值會(huì)先自動(dòng)加 2,然后將1個(gè)字寫(xiě)入到X所指向的地址。所以只需要在寫(xiě)入開(kāi)始時(shí),對(duì)寄存器X進(jìn)行一次地址賦值操作,將目標(biāo)芯片內(nèi)存地址減2處的地址值賦給X即可,后續(xù)數(shù)據(jù)可以直接調(diào)用WRITE_NEXT命令寫(xiě)入,不需要再發(fā)送地址信息。采用WRITE_NEXT寫(xiě)1個(gè)字需要發(fā)送3個(gè)字節(jié)(1個(gè)字節(jié)的命令操作碼、2個(gè)字節(jié)的數(shù)據(jù)),它的完成需要延遲32個(gè)編程調(diào)試器時(shí)鐘周期。因而從編程調(diào)試器發(fā)送100 KB的數(shù)據(jù)到目標(biāo)芯片內(nèi)存需要花費(fèi)的時(shí)間計(jì)算如下:
(100×1024÷2)個(gè)字×(3×809+32)個(gè)周期÷(24×106)=5.25 s
改進(jìn)后的編程系統(tǒng)在編程調(diào)試器內(nèi)存與目標(biāo)芯片內(nèi)存的數(shù)據(jù)通信速度上提高了5.5倍,大大提高了編程調(diào)試器的工作效率。
2.2.2 編寫(xiě)目標(biāo)芯片接收程序
優(yōu)化通信子程序代碼之后,從編程調(diào)試器內(nèi)存向目標(biāo)芯片內(nèi)存發(fā)送數(shù)據(jù)的時(shí)間大大減少,但是使用BDM命令,除了發(fā)送2個(gè)字節(jié)的用戶數(shù)據(jù)之外,還需要發(fā)送額外的字節(jié),并且命令的完成都需要較長(zhǎng)的延遲時(shí)間。由于BDM采用單線引腳串行通信,因此可以自己編寫(xiě)一段模擬BDM串行通信的程序,目標(biāo)芯片只從編程調(diào)試器接收用戶目標(biāo)代碼,提高通信速度。
另外將JM60的引腳PTBD.O與目標(biāo)芯片PTA.0引腳相連來(lái)傳送數(shù)據(jù),以便數(shù)據(jù)通信過(guò)程不影響B(tài)KGD引腳。過(guò)程如下:
①按照編程調(diào)試器發(fā)送1位時(shí)序,在編程調(diào)試器方編寫(xiě)以PTBD.0為發(fā)送引腳的字節(jié)發(fā)送代碼;
②按照目標(biāo)芯片接收1位的過(guò)程,編寫(xiě)目標(biāo)芯片以PTA.0為接收引腳的字節(jié)接收代碼,進(jìn)而編寫(xiě)好目標(biāo)芯片接收程序;
③將自定義的目標(biāo)芯片接收程序編譯成目標(biāo)代碼,通過(guò)基本的BDM命令發(fā)送到目標(biāo)芯片內(nèi)存;
④執(zhí)行目標(biāo)芯片中自定義的接收程序,將接收到的字節(jié)寫(xiě)入目標(biāo)芯片指定的內(nèi)存空間。
由于目標(biāo)芯片的接收程序是自己定義的,因此編程調(diào)試器不需要發(fā)送操作碼與地址信息,也無(wú)需等待命令完成延遲時(shí)間。自定義的目標(biāo)芯片接收程序代碼量少于50字節(jié),這部分時(shí)間很短。因而假如從編程調(diào)試器發(fā)送100KB的數(shù)據(jù)到目標(biāo)芯片內(nèi)存,需要花費(fèi)的時(shí)間計(jì)算如下:
(100×1024)個(gè)字節(jié)×809個(gè)周期÷(24×106)=3.45 s
使用自定義目標(biāo)芯片接收程序,在原有系統(tǒng)編程調(diào)試器內(nèi)存與目標(biāo)芯片內(nèi)存的數(shù)據(jù)通信速度上提高了8倍多。
3 編程系統(tǒng)的通用性設(shè)計(jì)
編程系統(tǒng)的通用性在于兩點(diǎn):一是可以根據(jù)不同型號(hào)的目標(biāo)芯片獲取相應(yīng)的MCU參數(shù)進(jìn)行操作;二是可以根據(jù)不同型號(hào)MCU的總線頻率調(diào)用相應(yīng)的發(fā)送接收代碼。
3.1 MCU信息的存儲(chǔ)
S12系列MCU有很多型號(hào),而且未來(lái)還會(huì)推出更多新型號(hào)。表1給出了數(shù)據(jù)庫(kù)中MCU的信息。不同型號(hào)MCU屬性參數(shù)不同,包括內(nèi)部RAM及Flash的大小和起始地址。這些參數(shù)在對(duì)目標(biāo)芯片進(jìn)行擦除、寫(xiě)入及調(diào)試操作時(shí)極為重要。為了便于通用性方面的設(shè)計(jì),在PC方數(shù)據(jù)庫(kù)中保存了每款MCU的相關(guān)信息,在用戶建立工程的時(shí)候就可以獲取這些字段信息,對(duì)目標(biāo)芯片進(jìn)行正確的操作。
評(píng)論