摘 要:介紹SI-PROG編程器的工作原理,利用PC機串口UART芯片實現(xiàn)單片機的ISP下載。PC機串口8250芯片中SOUT,DTR,RTS,CTS四個引腳的電平可通過其內(nèi)部的幾個寄存器分別進行控制或讀取,利用引腳可實現(xiàn)單片機的ISP下栽。介紹了8250與單片機之間通信信號的邏輯關(guān)系以及電平轉(zhuǎn)換,分析了接收器的閾值電壓的特點,給出了使用SI-PROG編程器的條件。最后,以AVR單片機為例介紹了下載程序設(shè)計。結(jié)果表明,利用PC機串口UART芯片可以實現(xiàn)對AVR單片機的ISP下載,其硬件電路和軟件設(shè)計都很簡單。
關(guān)鍵詞:S1-PROG編程器;程序設(shè)計;UART;AVR單片機
SI-PROG編程器為PonyProg 2000軟件中使用的一種ISP編程器,該編程器利用PC機串口電路的異步通信控制器UART實現(xiàn)AVR,PIC,AT89等單片機的ISP編程。雖然該編程器不為Atmel的AVRStudio所支持,但是其硬件電路簡單,成本低,便于制作,適于初學(xué)者進行學(xué)習(xí)和簡單開發(fā)。下面以AVR單片機為例,介紹SI-PROG編程器的工作原理及其程序設(shè)計。
l SI-PROG編程器的工作原理
1.1 電路組成
圖1為SI-PROG串口編程器的工作原理圖。電路分為PC機串口電路、SI-PROG編程器和目標(biāo)機3部分。編程器通過9針D型連接器DB9與PC機串口連接,通過10針連接器J1與目標(biāo)機連接,電路在文獻[4]的基礎(chǔ)上做了適當(dāng)?shù)暮喕?。J1引腳定義與Atmel的STK200下載線相同。
1.1.1 PC機串口電路及SI-PROG編程器
PC機串口電路由U1~U4組成。8250(U1)為異步通信控制器UART,SN75150(U2,U3)為驅(qū)動器,SN75154為線接收器。U2,U3,U4實現(xiàn)8250引腳上TTL電平與串口DB9上RS 232電平轉(zhuǎn)換。SI-PROG編程器則完成DB9上RS 232電平與目標(biāo)機上TTL電平的轉(zhuǎn)換。
1.1.2 串行SPI接口
編程器通過目標(biāo)機的SPI接口對其片內(nèi)的FLASH程序存儲器進行下載編程。SPI接口由SCK,MOSI和MISO等幾條信號線組成。下載編程的過程實際上是PC機與AVR的通信過程。兩者的關(guān)系是一種主從關(guān)系,PC機為主機,AVR為從機。主機經(jīng)MOSI引腳將串行數(shù)據(jù)發(fā)給從機,從機經(jīng)MISO引腳將數(shù)據(jù)返回給主機。SCK為串行時鐘脈沖,由主機發(fā)往從機。主機通過SCK脈沖控制與從機的數(shù)據(jù)傳輸。圖2為串行下載編程時序圖。單片機在SCK上升沿讀取MOSI上的數(shù)據(jù)位,在SCK下降沿輸出數(shù)據(jù)位到MISO。
1.2 信號的邏輯關(guān)系
由圖1可見,8250的11,33,32,36四個引腳分別通過編程器與AVR的RESET,MOSI,SCK,MISO相連進行通信。這4個引腳的電平可通過8250內(nèi)部的3個寄存器進行設(shè)置或讀取,如圖3所示。3個寄存器依次為線路控制寄存器(LCR)、Modem控制寄存器(MCR)和Modem狀態(tài)寄存器(MSR)。對于串口1,3個寄存器的端口地址一般為3FBH,3FCH和3FEH。LCR的SB位、MCR的DTR位和RTS位分別控制11,33,32三腳的電平。MSR的CTS位則反映了36腳的電平。
下面分析8250與AVR通信信號間的邏輯關(guān)系。為了避免引起混亂,這里全部采用正邏輯描述。
1.2.1 RESET與SB位的邏輯關(guān)系
線路控制寄存器LCR的D6位SB決定了8250的11腳的電平。當(dāng)SB=1時,11腳被強制拉到低電平,DB9的3腳為高電平。當(dāng)SB=O時,DB9的3腳為低電平。邏輯關(guān)系在Q1上又反相一次。因此,RESET信號與SB位的邏輯關(guān)系為:
RESET=SB (1)
編程時只要通過OUT指令改變SB位的值,就可以控制RESET端的電平。當(dāng)8250復(fù)位后,SB=0,RESET=SB=1,RESET引腳為高電平。
1.2.2 MOSI,SCK信號與DTR,RTS位的邏輯關(guān)系
MODEM控制寄存器MCR的D0位DTR控制著33腳的電平。置DTR=1,則33腳DTR為低電平,是邏輯非關(guān)系。U3相當(dāng)于非門,故MOSI信號與DTR位的邏輯關(guān)系為:
MOSI=DTR (2)
類似的,SCK信號與MCR的D1位RTS的邏輯關(guān)系為:
SCK=RTS (3)
1.2.3 CTS位與MISO信號的邏輯關(guān)系
MODEM狀態(tài)寄存器(MSR)的D4位CTS反映了8250的36腳的電平,當(dāng)CTS端為高電平時,CTS=O;反之CTS=1。CTS位與CTS端是邏輯非關(guān)系。因此,CTS位與MISO信號的的邏輯關(guān)系為:
CTS=MISO (4)
根據(jù)式(1)~式(4),下載編程時,設(shè)置或讀取AVR的RESET,MOSI,SCK,MISO腳的電平問題就變成通過I/O指令設(shè)置或讀取8250內(nèi)部寄存器的SB,DTR,RTS,CTS位的問題。
1.3 SI-PROG編程器的電平轉(zhuǎn)換
根據(jù)RS 232標(biāo)準(zhǔn),串口DB9上的兩種電平分別為5~15 V和-5~-15 V。編程器電路采用分立元件實現(xiàn)DB9上的RS 232電平與AVR的TTL電平間的轉(zhuǎn)換。
1.3.1 RS 232到TTL電平的轉(zhuǎn)換
圖1中,用限流電阻R3和4.7 V的穩(wěn)壓二極管Z2完成DB9的4腳上RS 232電平到J1的1腳上TTL電平的轉(zhuǎn)換。5~15 V與-5~-15 V高低兩種電平通過R3后將分別變成4.7 V和O V(實際為-O.7 V),符合TTL電平的要求。
類似的,限流電阻R4和4.7 V的穩(wěn)壓二極管Z1完成DB9的7腳上RS 232電平到J1的7腳上的TTL電平的轉(zhuǎn)換。
Q1,R1,R2接成反相器,DB9的3腳上的5~15 V與-5~-15 V兩種電平分別使Q1處于飽和導(dǎo)通和截至狀態(tài),實現(xiàn)了RESET信號的電平轉(zhuǎn)換。
1.3.2 TTL到RS 232電平的轉(zhuǎn)換
TTL到RS 232電平的轉(zhuǎn)換由SN75154線接收器實現(xiàn)。圖4為SN75154的施密特電壓傳輸特性曲線。
當(dāng)閾值電壓控制端T3接Vcc時,它工作在圖4中曲線a狀態(tài),兩個閾值電壓分別為VIT-=-1.1 V和VIT+=2.2 V;當(dāng)T3懸空時,它工作于圖中曲線b狀態(tài),VIT-=-1.4 V,VIT+=2.2 V。顯然,對于后一狀態(tài),MISO引腳上的TTL電平信號可以通過U4到達8250,而前一狀態(tài)則無法通過U4。
根據(jù)文獻[2],長城0520 PC-XT機上SN75154的閾值電壓控制端T3接到+5 V。這樣,SI-PROG編程器就不能工作。計算機硬件發(fā)展到今天,UART-般均升級為16550,它與打印機并口、鍵盤控制器等電路一起集成于LPC芯片內(nèi),16550仍與8250相兼容。驅(qū)動器和接收器也都集成到一個芯片內(nèi),如75232,75185。這些芯片的接收器不再采用圖4中曲線a那樣的閾值電壓,而改為與曲線b相接近的情況。表1為3臺PC機閾值電壓的實驗測量結(jié)果。表中,典型值為芯片數(shù)據(jù)手冊中的數(shù)據(jù),實驗值為實驗測量結(jié)果。顯然,3臺PC機上,SI-PROG編程器都能正常工作。
2 下載程序設(shè)計
根據(jù)式(1),用輸出指令向3FBH端口寫入40H,將使RESET端置低電平,寫入00H,使RESET端置高電平;根據(jù)式(2),式(3)。向3FCH端口寫入數(shù)據(jù),改變其D1位的數(shù)值,就可改變SCK端的電平,改變D0位的數(shù)值,即改變MOSI的電平;根據(jù)式(4),用輸入指令讀取3FEH端口,讀取字節(jié)的D4位為MISO返回的數(shù)據(jù)位。
根據(jù)AVR單片機的串行下載算法,發(fā)送串行編程指令的操作步驟為:進入串行下載模式;發(fā)送編程使能指令;執(zhí)行所需的讀、寫等操作指令,可執(zhí)行一條,也可執(zhí)行多條;退出串行編程模式。
(1)進入串行下載模式。保持SCK端為低電平,給RESET端發(fā)送一個大于兩個時鐘周期的正脈沖,AVR單片機便進入串行下載模式。
(2)發(fā)送串行編程指令。根據(jù)圖2,一個SCK時鐘周期可分4個步驟:輸出位數(shù)據(jù)到MOSI線,延時;令SCK由0變1,延時;讀取MISO線上的數(shù)據(jù)位;令SCK由1變0,延時。前兩個步驟寫一位數(shù)據(jù)到AVR,后兩個步驟則從AVR讀取1位數(shù)據(jù)。8個SCK時鐘周期寫1個字節(jié),同時讀一個字節(jié)。AVR單片機每條編程指令均由4個字節(jié)組成。根據(jù)上述過程,將4個字節(jié)的編程指令依次寫入到AVR,同時讀取返回的4個字節(jié)數(shù)據(jù)。
(3)退出串行編程模式。將RESET端置高電平,AVR單片機退出編程模式。
3 結(jié) 語
根據(jù)上述分析,采用VC++6.O編程成功地對ATtinyl3和ATmegal6兩種芯片的FLASH進行了芯片擦除、讀、寫以及對熔絲位的讀、寫等操作。注意編程時需要解決Windows NT/2000,/XP操作系統(tǒng)下訪問I/O端口的技術(shù)問題。
使用SI-PROG編程器,必須滿足兩個條件:
(1)串口的UART芯片要與8250兼容;
(2)電平轉(zhuǎn)換芯片接收器的閾值電壓要介于TTL高、低兩種電平之間。
多數(shù)PC機所配置的串口都能滿足上述兩個條件。某些早期的PC機有可能與PC/XT機類似,不滿足條件(1)。目前,家用筆記本電腦上一般不再配置串口。這樣,SI-PROG編程器在某些PC機上不能使用。然而,SI-PROG編程器仍有一定的使用空間。畢竟LISB接口的編程器價格較高,而一些商用筆記本電腦中取消了并口但保留著串口,并口編程器又不能用。而多數(shù)臺式機上一般仍配置有串口。