色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一種實(shí)用的PIC編程器的設(shè)計(jì)

          一種實(shí)用的PIC編程器的設(shè)計(jì)

          作者: 時(shí)間:2018-09-12 來(lái)源:網(wǎng)絡(luò) 收藏

          摘要 介紹一種簡(jiǎn)便實(shí)用的實(shí)現(xiàn)方案。設(shè)計(jì)思想是:以單片機(jī)作為主控機(jī),欲寫(xiě)入的程序代碼存放在主控機(jī)中,由主控機(jī)提供芯片編程所需信號(hào),并監(jiān)測(cè)整個(gè)編程流程。在時(shí)鐘脈沖信號(hào)作用下,把代碼寫(xiě)入PIC的Flash中以達(dá)到對(duì)芯片編程的目的。該方案可以在脫離PC的環(huán)境下運(yùn)行,適用于對(duì)批量的PIC芯片進(jìn)行編程。
          關(guān)鍵詞 PIClOF202 串行編程 89C51

          本文引用地址:http://cafeforensic.com/article/201809/388945.htm

          隨著工業(yè)生產(chǎn)的擴(kuò)大,存在著對(duì)同一型號(hào)芯片進(jìn)行相同代碼編程的需要。目前采用的編程方式是通過(guò)專(zhuān)用的來(lái)執(zhí)行,其編程過(guò)程離不開(kāi)PC機(jī)。在對(duì)一定批量的芯片編程時(shí),操作比較煩瑣,保密性能差,且難以在工業(yè)現(xiàn)場(chǎng)進(jìn)行。

          設(shè)計(jì)簡(jiǎn)單,操作方便,保密性好,易攜帶,需要的外部設(shè)備少。編程器以PIClOF202為例進(jìn)行設(shè)計(jì)。PIClOF2xx系列是 Microchip公司生產(chǎn)的低功耗,高性能Flash單片機(jī)。其封裝小,易于使用,成本低。性能穩(wěn)定,在通用電子設(shè)計(jì)中被廣泛使用。本設(shè)計(jì)的基本思想適用于其他類(lèi)型的單片機(jī)。

          1 PICl0F2xx的存儲(chǔ)結(jié)構(gòu)及編程方法
          1.1 存儲(chǔ)空間映射
          以PICl0F202為例,其內(nèi)部程序存儲(chǔ)空間映射如下:
          0000H~0lFFH是用戶可以使用的代碼存儲(chǔ)空間,0200H~03FFH是系統(tǒng)的配置空間。其中01FFH單元是復(fù)位向量,系統(tǒng)復(fù)位后程序指針PC 將指向此地址單元。0200H~0203H是用戶ID信息存儲(chǔ)區(qū)間。0204H地址單元存放的是備份的OSCCAL值,被預(yù)留用來(lái)測(cè)試內(nèi)部晶振,因此該值在任何情況下都不應(yīng)該被更改。一旦被擦除,必須恢復(fù)該值,否則芯片不能正常工作。03FF地址單元存放系統(tǒng)的配置字,其他地址單元系統(tǒng)保留。

          1.2 芯片編程方法
          采用串行在線編程的方式,串行時(shí)鐘信號(hào)由主控單元的I/O口發(fā)出,從PIC的時(shí)鐘引腳ISCLK輸入。在串行時(shí)鐘信號(hào)作用下,串行數(shù)據(jù)從數(shù)據(jù)引腳ISDAT輸入/輸出,完成對(duì)芯片的Flash的代碼寫(xiě)入。

          只有在進(jìn)入編程模式后,PIClOF202才能允許對(duì)其存儲(chǔ)空間的操作,如圖l所示。當(dāng)保持ISDAT(串行數(shù)據(jù)輸入端)和ISCLK(串行時(shí)鐘輸入端) 為低電平時(shí),VCC(芯片電源)上升到高電平。經(jīng)tl延時(shí),MCLR(編程模式選擇端)上升到高電平,再經(jīng)t2延時(shí),開(kāi)始時(shí)鐘脈沖和數(shù)據(jù)的輸入/輸出。此時(shí)PIClOF202進(jìn)入編程模式。

          2 系統(tǒng)硬件結(jié)構(gòu)
          系統(tǒng)邏輯框圖如圖2所示,由主控機(jī)、控制模塊、監(jiān)控顯示模塊和目標(biāo)芯片組成。主控機(jī)選用89C51單片機(jī),用單片機(jī)的2個(gè)I/O口分別提供ISDAT和 ISCLK信號(hào);目標(biāo)芯片即PIC。PIC的MCLR端為編程模式選擇端。為了讓PIC10F202能夠進(jìn)入編程狀態(tài),需要由控制模塊實(shí)現(xiàn)對(duì)MCLR端的電平控制。監(jiān)控顯示模塊用于指示目前系統(tǒng)的工作狀態(tài)和監(jiān)控系統(tǒng)運(yùn)行。

          2.1 控制模塊的實(shí)現(xiàn)
          為了實(shí)現(xiàn)控制模塊對(duì)MCLR端的電平控制,使用2個(gè)晶體管T1、T2,如圖3所示。當(dāng)單片機(jī)I/O口為高電位時(shí),T1導(dǎo)通,其發(fā)射級(jí)為低電位,T2導(dǎo)通,于是電源VPP與PIC的MCLR端接通;當(dāng)I/O口為低電位時(shí),T1截止,其發(fā)射級(jí)為高電位,T2截止,VPP和MCLR端之間斷開(kāi)。

          2.2 監(jiān)控顯示模塊
          采用一組發(fā)光二極管來(lái)顯示系統(tǒng)狀態(tài)和編程結(jié)果。系統(tǒng)的工作狀態(tài)包括:目標(biāo)芯片檢測(cè)、就緒等待、編程進(jìn)行中、代碼校驗(yàn)等。系統(tǒng)在就緒等待狀態(tài)下,就緒狀態(tài)燈亮,主控機(jī)監(jiān)控按鍵指令;接到指令后即進(jìn)入編程狀態(tài),同時(shí)編程燈亮,編程后執(zhí)行校驗(yàn),校驗(yàn)完成后結(jié)束燈亮,說(shuō)明完成整個(gè)縮程工作。整個(gè)編程過(guò)程中,若遇到故障,相應(yīng)故障燈顯示。

          3 系統(tǒng)軟件設(shè)計(jì)
          3.1 數(shù)據(jù)(命令)輸入方法
          無(wú)論是指令還是需要寫(xiě)入的代碼數(shù)據(jù),都在相應(yīng)的時(shí)鐘節(jié)拍下由串行數(shù)據(jù)端輸入。串行時(shí)鐘始終與串行數(shù)據(jù)的要求一致。對(duì)于不同的命令,時(shí)鐘脈沖間的時(shí)間參數(shù) t1~t6的要求是不同的。在相應(yīng)時(shí)鐘脈沖下降沿,PIC對(duì)數(shù)據(jù)端采樣,命令代碼在前,一段時(shí)間延時(shí)后,輸入代碼數(shù)據(jù)。數(shù)據(jù)低位在前,高位在后,如圖4所示。時(shí)間參數(shù)的具體要求見(jiàn)參考文獻(xiàn)。

          下面以數(shù)據(jù)導(dǎo)入為例簡(jiǎn)要說(shuō)明。
          代碼舉例如下:

          由命令字表中可知,若導(dǎo)人數(shù)據(jù)的命令字是xx0010B,低位在前由ISDAT輸入,每次ISCLK的下降沿對(duì)ISDAT采樣。以上代碼實(shí)現(xiàn)了“0”、 “1”的輸入,其他命令的輸入類(lèi)似。數(shù)據(jù)輸入和命令輸入都是下降沿有效。每次導(dǎo)入1字節(jié)的數(shù)據(jù)為12位,但是必須在16個(gè)時(shí)鐘脈沖中完成。前6個(gè)時(shí)鐘脈沖的下降沿輸入命令字,且前4位有效。一段時(shí)間參數(shù)的延遲后,數(shù)據(jù)開(kāi)始輸入,第1個(gè)時(shí)鐘下降沿輸入起始位,后第2~13個(gè)時(shí)鐘的下降沿輸入1字節(jié)的數(shù)據(jù),共 12位。第14、15個(gè)時(shí)鐘下降沿輸入數(shù)據(jù)無(wú)效,最后一個(gè)下降沿輸入停止位(起始位和停止位固定為O)。

          3.2 PC指針的處理及尋址方法
          在對(duì)其編程的過(guò)程中,需要知道當(dāng)前PIC的PC指針指向的Flash存儲(chǔ)區(qū)單元地址,也就是當(dāng)前的操作單元。由于無(wú)法直接讀取其PC指針的值,故采用在 89C5l的RAM區(qū)定義一個(gè)變量用來(lái)記錄PIC的PC指針(12位,占用2字節(jié))。該變量的值始終和PIC的PC指針一致,讀取該值便可取得當(dāng)前所操作的PIC的Flash存儲(chǔ)單元地址。

          變量的操作應(yīng)該遵循如下運(yùn)算規(guī)則:
          ①只有“加1”這一種運(yùn)算;
          ②03FF+1=0000(03FF為PIC10F202的存儲(chǔ)器末地址)}
          ③當(dāng)變量的值不等于03FF時(shí),其“加l”運(yùn)算與指針值“加1”同步;
          ④初始情況下,指針的值指向03FF。
          PICl0F202的Flash單元地址為0000H~03FFH。在以上運(yùn)算規(guī)則下,記錄PC指針的變量值也只能是0000H~03FFH,通過(guò)“加1”運(yùn)算即可尋址到每一個(gè)Flash存儲(chǔ)單元。

          3.3 數(shù)據(jù)的讀取
          從Flash存儲(chǔ)單元中讀取數(shù)據(jù)位的方法:先是6個(gè)時(shí)鐘下降沿輸入6位命令字,在接收到這個(gè)命令字后,PIC將當(dāng)前PC指針?biāo)鶎?duì)應(yīng)ROM存儲(chǔ)單元的值按位由ISDAT輸出。在第6個(gè)下降沿結(jié)束后,經(jīng)延時(shí),在時(shí)鐘脈沖每個(gè)上升沿對(duì)ISDAT采樣,一共16個(gè)上升沿,輸出16位的數(shù)據(jù)。第2~13位是12位的數(shù)據(jù);14、15位無(wú)效;首位和末位分別是起始位和結(jié)束位,如圖5所示。

          讀取數(shù)據(jù)時(shí)有兩點(diǎn)值得注意:
          ①命令字的輸入和其他操作相同,但數(shù)據(jù)輸出時(shí)是上升沿有效;
          ②由于01FFH和0204H是系統(tǒng)預(yù)定值單元,當(dāng)尋址到這兩個(gè)單元時(shí),執(zhí)行讀取指令后必須保留其內(nèi)容,以便編程時(shí)恢復(fù)。

          3.4 寫(xiě)入Flash方法
          數(shù)據(jù)寫(xiě)入Flash的過(guò)程如下:
          每次導(dǎo)入一個(gè)字節(jié)的數(shù)據(jù)(12位),輸入開(kāi)始寫(xiě)入的指令碼,經(jīng)過(guò)一段時(shí)間參數(shù)的延時(shí),再輸人結(jié)束寫(xiě)入指令碼,就完成一個(gè)字節(jié)的寫(xiě)入過(guò)程。但需要注意的是,無(wú)論是數(shù)據(jù)讀取還是寫(xiě)入,都是對(duì)當(dāng)前PC指針?biāo)赶虻腇1ash單元進(jìn)行的;而且數(shù)據(jù)寫(xiě)入只有在當(dāng)前存儲(chǔ)單元已經(jīng)被擦除的情況下才可以正確地實(shí)現(xiàn)。

          指令輸入形式(如芯片擦除、開(kāi)始寫(xiě)入、結(jié)束寫(xiě)入和地址加1等)可以查得其命令宇,其輸入方法與圖4和圖5類(lèi)似,每個(gè)指令都需要時(shí)鐘脈沖的6個(gè)下降沿輸入。僅有“導(dǎo)入數(shù)據(jù)”和“讀取數(shù)據(jù)”2條命令需要后跟數(shù)據(jù)字節(jié),其他的指令在輸入完成后,經(jīng)延時(shí),便可以進(jìn)行下一條指令的輸入。字節(jié)寫(xiě)入流程如圖6所示。

          3.5 配置字編程及代碼保護(hù)的處理
          配置字是關(guān)于PIC的設(shè)置,包括是否使能看門(mén)狗,是否采用I/O弱上拉,以及MCLR引腳的配置等。配置字在03FFH單元,PIC進(jìn)入編程模式時(shí),配置字單元就是Pc指針?biāo)赶虻膯卧?。配置字的?xiě)入方法與一般的代碼寫(xiě)入方法一致。一旦設(shè)置了代碼保護(hù),用戶代碼空間的0040H以上的字節(jié)讀出為“0”,其他的配置空間依舊可以正確讀出,包括配置字單元和用戶ID區(qū)。配置字可以被多次寫(xiě)入,但是在任何情況下擦除配置字單元,用戶儲(chǔ)存區(qū)的代碼也同時(shí)被擦除。可以通過(guò)圖7的方法解除代碼保護(hù),但是這樣的處理會(huì)將整個(gè)Flastl存儲(chǔ)空間全部清除,所以在代碼保護(hù)使能的情況下,是不可能正確讀取代碼值的。即使可以重寫(xiě)配置字,但是重寫(xiě)過(guò)程中代碼已經(jīng)被清除。

          3.6 預(yù)定值的處理
          每個(gè)PIC芯片都沒(méi)有廠家設(shè)定的預(yù)定值。這些值是不應(yīng)該被更改的,否則PIC芯片就無(wú)法正常工作。ROM區(qū)的01FFH單元保存復(fù)位向量,系統(tǒng)復(fù)位后,PC 指針將指向該單元。0204H單元保存著OSSCAL的值。這兩個(gè)單元的值應(yīng)該先讀出并且保存在一個(gè)臨時(shí)單元(因?yàn)樵谛酒脸倪^(guò)程中會(huì)丟失),待到需要編程的代碼執(zhí)行完畢,再?gòu)呐R時(shí)單元讀出并寫(xiě)入相應(yīng)的位置。其實(shí)際過(guò)程就是一個(gè)“讀取保存恢復(fù)”的過(guò)程。

          要讀取預(yù)定值,首先必須尋址到預(yù)定值所在的單元。其尋址的過(guò)程如圖8所示:進(jìn)入編程模式后,此時(shí)指向的存儲(chǔ)單元是03FFH,89C51中記錄PC指針的變量的值也應(yīng)該設(shè)置成03FF。按照該變量的運(yùn)算規(guī)則,執(zhí)行地址加1指令,變量值也加1,并查詢當(dāng)前變量的值,直到所需的存儲(chǔ)單元為止?;謴?fù)的過(guò)程是先尋址到01FF和0204單元,然后把保留的值寫(xiě)入,具體流程與圖8類(lèi)似。

          3.7 軟件流程
          系統(tǒng)在初始化中,如果檢測(cè)到目標(biāo)芯片已經(jīng)安裝就緒,監(jiān)控顯示模塊便會(huì)顯示系統(tǒng)處于就緒狀態(tài),然后監(jiān)控按鍵。一旦按鍵按下。編程開(kāi)始,如圖9所示。先讀取系統(tǒng)預(yù)定值并保存在主控機(jī)的RAM中,然后PIC芯片擦除,包括用戶使用的代碼區(qū)和PIC系統(tǒng)配置區(qū)。擦除完成后,將PC指向首地址0000H,開(kāi)始代碼寫(xiě)入,每次寫(xiě)入l個(gè)字節(jié)的代碼,寫(xiě)完后校驗(yàn)。所有代碼寫(xiě)完后,恢復(fù)已保存的預(yù)定值,恢復(fù)的過(guò)程與代碼寫(xiě)入一致。

          尋址到配置字單元后進(jìn)行配置字寫(xiě)入,在先前的擦除工作中,配置字單元已經(jīng)擦除。寫(xiě)入的過(guò)程也與代碼寫(xiě)入一致。

          整個(gè)編程過(guò)程中,監(jiān)控顯示模塊會(huì)顯示目前的系統(tǒng)狀態(tài)。寫(xiě)入過(guò)程中(包括代碼、預(yù)定值和配置字等)出現(xiàn)的任何錯(cuò)誤,編程會(huì)報(bào)錯(cuò)停止,并回到就緒等待狀態(tài),等待下次編程的開(kāi)始。

          若無(wú)任何錯(cuò)誤的狀況發(fā)生,系統(tǒng)顯示編程成功,整個(gè)芯片編程過(guò)程結(jié)束。

          4 小結(jié)
          本系統(tǒng)操作簡(jiǎn)單,性能穩(wěn)定,編程速度快,無(wú)需PC機(jī)的支持。所有的代碼均保存在主控機(jī)的ROM區(qū)中。在主控機(jī)ROM寫(xiě)保護(hù)的情況下,代碼不可能被讀出,具有很強(qiáng)的保密性。需要的外部設(shè)備少,易于攜帶,而且成本低。本方法對(duì)于工業(yè)現(xiàn)場(chǎng)的批量芯片編程有一定借鑒意義。



          關(guān)鍵詞: PIC 編程器

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉