袁三男, 王 鵬
(1.上海電力大學(xué), 上海 200090; 2.國網(wǎng)浙江省電力有限公司寧波供電公司, 浙江 寧波 315000)
PIC單片機(jī)是美國Microchip公司生產(chǎn)的8位微處理器。它的速度與功能遠(yuǎn)超一些普通的8位51單片機(jī)[1]。相較于傳統(tǒng)單片機(jī),PIC具有指令簡單、尋址方式簡單、代碼壓縮率高、運(yùn)行速度快、功耗低等特點(diǎn)[2]。PIC芯片程序的下載一般需要經(jīng)由Microchip公司官方提供的PICKIT下載器下載,利用官方提供的MPLAB軟件對PICKIT進(jìn)行配置后才能完成[3]。
在部分項(xiàng)目應(yīng)用中,采用官方推出的ICD調(diào)試工具對系統(tǒng)進(jìn)行調(diào)試[4],雖然該種方式成本較低廉,但其實(shí)現(xiàn)離不開第三方軟件的支持,從而限制了開發(fā)和設(shè)計(jì)過程,在需要大規(guī)模生產(chǎn)應(yīng)用的場合,存在效率低、成本高、自定義空間小等問題。
本文基于ICSP編程協(xié)議,提出了一種利用STM32F407控制器(以下簡稱“407”)下載PIC程序的方法,程序內(nèi)容經(jīng)過編譯后以HEX文件形式存入407中,PIC與407之間通過數(shù)據(jù)和時(shí)鐘線進(jìn)行通信。程序下載前,由于407需要根據(jù)當(dāng)前時(shí)鐘脈沖向PIC發(fā)送一段特定的序列,使PIC正常進(jìn)入編程模式,因此有效防止了誤操作的出現(xiàn);在下載過程中,每當(dāng)407向PIC寫入數(shù)據(jù)時(shí),需要等待來自PIC的正確回復(fù)以確保數(shù)據(jù)傳輸?shù)恼_性。通過對407引腳的正確配置,可以實(shí)現(xiàn)在407組成的最小系統(tǒng)中對PIC芯片的多路下載,而且不需要依賴任何第三方軟件,有效提高了下載效率。
407與PIC的接線如圖1所示。其中,MCLR、VDD、GND、DAT、CLK分別是PIC對應(yīng)的引腳名,對于407而言,采用通用IO管腳GPIO即可。
圖1 407與PIC接線
由圖1可知,407上的通用IO管腳GPIO分別與PIC的MCLR、VDD、GND、DAT、CLK引腳連接。其中,MCLR作為PIC的編程引腳,默認(rèn)情況下不作為普通IO口,因此當(dāng)MCLR引腳作為普通IO口時(shí),可能會出現(xiàn)程序無法正常下載的情況,此時(shí)需要對PIC進(jìn)行相應(yīng)的引腳配置;DAT引腳用于407和PIC間傳輸數(shù)據(jù),該引腳既用于接收來自407端發(fā)送的數(shù)據(jù),同時(shí)也能將自身數(shù)據(jù)返回給407,用于校驗(yàn)數(shù)據(jù)的正確性;CLK為脈沖輸出引腳,用以接收來自407端發(fā)送的一定周期的脈沖,整個(gè)下載過程中數(shù)據(jù)以及命令的收發(fā)都在時(shí)鐘脈沖的控制下完成。在整個(gè)下載過程中,PIC芯片的供電由407的引腳獨(dú)立控制,同時(shí)對供電電壓值及MCLR引腳控制時(shí)序都有一定要求。
在低電壓編程模式(Low-Voltage Programming Mode,LVP)下進(jìn)行配置(如果需要的話)。當(dāng)DAT引腳上接收到正確的解鎖序列,即可進(jìn)入編程模式。相較于高電壓編程方式,該方法不需要額外的升壓措施,有效降低了器件成本,同時(shí)由于整個(gè)操作過程沒有高電壓的存在,能有效防止誤操作導(dǎo)致芯片損壞現(xiàn)象的出現(xiàn)。
PIC內(nèi)部有專用的LVP使能位,只有當(dāng)LVP使能的情況下,才允許設(shè)備進(jìn)入低電壓編程模式;否則需要第三方軟件對其配置字進(jìn)行寫入后,才能正常進(jìn)入編程模式。這里僅針對出廠默認(rèn)LVP使能的芯片做出說明。LVP需要在特定電壓時(shí)序下才能正常進(jìn)入,具體做法如下:首先,在保證芯片正常供電的情況下,將MCLR引腳維持在高電平一段時(shí)間TENTS;其次,在開始向PIC發(fā)送解鎖序列的前一段時(shí)間TENTH,將MCLR編程引腳的電平拉低;再次,由407控制引腳輸出一定周期的脈沖,該脈沖的半波周期需要大于100 ns;最后,在上述脈沖的控制下,在DAT上向PIC發(fā)送解鎖序列,該序列用16進(jìn)制,可表示為0x4d434850,遵循低電位先發(fā)的原則逐位發(fā)送給PIC。當(dāng)PIC端接收到正確的解鎖序列后,即可正常進(jìn)入編程模式。
上述步驟中,TENTS和TENTH需要滿足的條件為
(1)
進(jìn)入編程模式的電壓時(shí)序如圖2所示。
圖2 LVP電壓時(shí)序
由于PIC芯片內(nèi)部有低電壓復(fù)位功能,當(dāng)電壓過低時(shí)會使芯片進(jìn)入復(fù)位狀態(tài),因此供電電壓應(yīng)高于復(fù)位電壓,才能使芯片正常進(jìn)入編程模式。
當(dāng)PIC進(jìn)入編程模式后,可根據(jù)編程命令對PIC采取不同操作。
在本方案中用到的幾種編程命令及數(shù)據(jù)格式如表1所示。
表1 PIC單片機(jī)編程命令
程序下載流程如圖3所示。
圖3 程序下載流程
程序存儲寫入流程如圖4所示。
圖4 程序存儲寫入流程
PIC根據(jù)當(dāng)前收到的編程命令進(jìn)行相應(yīng)操作。當(dāng)收到需要接收(或發(fā)送)數(shù)據(jù)的命令時(shí),在經(jīng)過一個(gè)特定延時(shí)(一般不小于1 μs)后,PIC就要接收來自407的數(shù)據(jù)(或發(fā)送數(shù)據(jù)),該數(shù)據(jù)如表1中的16位數(shù)據(jù),其起始和終止位都為零,遵循低電位先傳的方式進(jìn)行收發(fā)。在編程過程中,PIC的一個(gè)地址空間可以存儲14位有效數(shù)據(jù),數(shù)據(jù)傳輸完畢后執(zhí)行內(nèi)部編程指令,將DAT引腳上的數(shù)據(jù)寫入程序存儲器里,然后再次調(diào)用數(shù)據(jù)回讀命令對寫入PIC的數(shù)據(jù)進(jìn)行回讀。若寫入無誤,則執(zhí)行增加地址命令進(jìn)行下一個(gè)地址的寫入,否則在STM 32內(nèi)部將返回一個(gè)下載失敗的錯(cuò)誤。
用戶ID一般用以辨別不同設(shè)備。配置字是PIC單片機(jī)內(nèi)部用以控制引腳功能、看門狗定時(shí)器及復(fù)位相關(guān)功能的特殊寄存器,因此需要在下載程序的過程中寫入適當(dāng)?shù)呐渲米旨坝脩鬒D,以保證PIC正常工作。由于配置字在不同芯片內(nèi)部的地址不同,因此對于不同的芯片,首先需要通過增加地址命令或重置地址命令將PIC定位到相應(yīng)地址位,再通過上文中所述方式對配置字進(jìn)行寫入操作。在本方案中,以PIC 12F1572芯片為例,其用戶ID位于8000 H-8004 H,配置字位于8007 H-8008 H。用戶ID及配置字寫入流程如圖5所示。
圖5 ID及配置字寫入流程
退出編程的電壓時(shí)序如圖6所示。其中,退出時(shí)間TEXIT不小于1 μs。
圖6 退出編程電壓時(shí)序
配置字及ID寫入完成后,即可完成芯片程序的下載。此時(shí),需要將芯片退出編程模式,將MCLR引腳的電平拉低。芯片這時(shí)不允許同時(shí)斷電。一般來講,VDD和MCLR的電壓時(shí)序應(yīng)滿足圖6所示電壓時(shí)序。
本文利用STM32F407核心板,連接若干GPIO管腳到PIC相應(yīng)的引腳進(jìn)行實(shí)驗(yàn)。下載PIC程序的硬件電路如圖7所示。
圖7 下載PIC程序硬件電路
分別實(shí)現(xiàn)407和PIC的應(yīng)用程序后,將PIC應(yīng)用程序作為407的數(shù)據(jù)單元,按照以上所述步驟進(jìn)行程序燒錄,結(jié)果完成后,PIC能夠啟動程序執(zhí)行相應(yīng)的功能。
首先,將事先編譯好的HEX文件存入407中,通過PIC內(nèi)部的編程命令對PIC程序存儲進(jìn)行編程;然后,對用戶ID和配置字進(jìn)行了一系列改寫,實(shí)現(xiàn)程序的燒錄下載并運(yùn)行成功。雖然本方案只針對PIC12F1572進(jìn)行了驗(yàn)證,但由于PIC系列芯片內(nèi)部存儲結(jié)構(gòu)的相似性,因此本方案在其他PIC芯片案例中也可以大范圍應(yīng)用。事實(shí)證明,STM32F407能夠在不依賴第三方工具和軟件的前提下完成對PIC芯片的燒寫,同時(shí)擴(kuò)展了多路芯片同時(shí)燒錄功能,大大提高了燒錄效率。