單片機(jī)的ISP在線編程設(shè)計(jì)
隨著電子技術(shù)的日益發(fā)展,芯片的規(guī)模越來越大,封裝日趨小型化,相應(yīng)地對系統(tǒng)板級調(diào)試的困難也在加大。在傳統(tǒng)的調(diào)試方式中,頻繁的調(diào)試和更換程序需要頻繁地插拔芯片,開發(fā)效率極低。AT89S系列單片機(jī)提供的ISP在線編程技術(shù)徹底地改變了傳統(tǒng)的開發(fā)模式,開發(fā)單片機(jī)系統(tǒng)時(shí)不會(huì)損壞芯片的引腳,加速了產(chǎn)品的上市并降低了研發(fā)成本,縮短了從設(shè)計(jì)、制造到現(xiàn)場調(diào)試的時(shí)間,簡化了生產(chǎn)流程,大大提高了工作效率,因此它是對市場定型產(chǎn)品進(jìn)行現(xiàn)場升級和維護(hù)的經(jīng)濟(jì)、有效的方式,極大地促進(jìn)了PLD產(chǎn)品的發(fā)展。
1 PC機(jī)并行口
1.1 并行口硬件接口簡介
標(biāo)準(zhǔn)并行口有25個(gè)引腳,其中數(shù)據(jù)端口引腳為2~9,狀態(tài)端口引腳為15、10~13,控制端口引腳1、14、16、17用于連接器件,其他引腳18~25是接地引腳GND。25針并行口如圖1所示。
并行口工作在SPP模式下,PC機(jī)是通過對3個(gè)8位端口寄存器的讀或?qū)憗韺?shí)現(xiàn)對它們的控制。端口寄存器分別是:
◆數(shù)據(jù)端口(地址0x378)為D7~D0,對應(yīng)引腳P9~P2;
◆狀態(tài)端口(地址0x379)為S7~S3,對應(yīng)引腳P11、P10、P12、P13、P15;
◆控制端口(地址0x37A)為C3~C0,對應(yīng)引腳P17、P16、P14、P1。
注意:S7、CO、C1、C3信號的邏輯狀態(tài)在連接器處是與相應(yīng)寄存器位相反的。對這些位進(jìn)行寫操作時(shí),寫入的值應(yīng)該與連接器處設(shè)置的值相反;同樣,進(jìn)行讀操作時(shí),讀取的值也與連接器處設(shè)置的值相反。
1.2 并行口編程簡介
WindOWS對系統(tǒng)底層操作采取了屏蔽的策略,但是在硬件或系統(tǒng)軟件開發(fā)中只要涉及系統(tǒng)底層的操作,就不得不深人到Windows的內(nèi)核去編寫屬于系統(tǒng)級的設(shè)備驅(qū)動(dòng)程序。對并行口的讀/寫操作就是如此。為了繞過WindOWS安全保護(hù)機(jī)制,需要允許32位Windows程序直接對I/O口進(jìn)行操作。這里使用由Yariv Kaplan編寫的WinIo庫中的幾個(gè)函數(shù)來實(shí)現(xiàn)對I/O口的讀/寫。
(1)初始化與終止
對端口讀/寫前后要分別初始化和終止
GetPortVal函數(shù)從指定端口讀取一個(gè)BYTE/WORD/DW0RD類型的值;SetPortVal函數(shù)向指定端口寫入一個(gè)BYTE/WORD/DWORD類型的值;wPortAddr是指定一個(gè)端口地址值;pdwPortVal為指向一雙字節(jié)型變量的指針,該變量存儲(chǔ)從wPortAddr端口讀取的值;dwPortVal為一雙字節(jié)型變量寫到wPortAddr端口中;bSize指定讀取字節(jié)數(shù),值可以為1、2或4。
2 AT89S5X系列單片機(jī)
2.1 AT89S51簡介
AT89S51是一個(gè)低功耗、高性能CMOS 8位單片機(jī),片內(nèi)含4 KB ISP(In-System Programming)的可反復(fù)擦寫1 000次的Flash只讀程序存儲(chǔ)器。該器件采用Atmel公司的高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲(chǔ)單元。功能強(qiáng)大的AT89S51可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案。
2.2 AT89S51串行編程時(shí)序及指令
2.2.1 串行編程模式下的時(shí)序分析
2.2.2 串行編程指令
串行編程使用4字節(jié)協(xié)議,指令如表1所列。
3 并行口與AT89S5X單片機(jī)的硬件設(shè)計(jì)
通過對并行口和編程時(shí)序的分析,我們制作了AT89S5X單片機(jī)的ISP下載線。下面對并行口與單片機(jī)的連線作一簡單介紹:并行口P2引腳連接單片機(jī)的P1.5引腳(MOSI);并行口P10引腳連接單片機(jī)的P1.6引腳(MISO);并行口P1引腳連接單片機(jī)的P1.7引腳(SCK);并行口P17引腳連接單片機(jī)的RST引腳,如圖2所示。
4 ISP下載線的軟件設(shè)計(jì)
在硬件設(shè)計(jì)的基礎(chǔ)上,通過對ISP時(shí)序和串行編程指令的分析,采用Visual C++ 6.0編寫了下載線程序。其主要關(guān)鍵編程函數(shù)略——編者注。
結(jié) 語
以下是作者在調(diào)試中獲取的一些參數(shù),希望對大家有所幫助。
參考資料:
晶體振蕩器的頻率為33 MHz(MAX),所以周期T=1/F=1/33 MHz=30 ns(MIN);SCK正脈沖寬度為8×30 ns=240ns(MIN);SCK負(fù)脈沖寬度為8×30 ns=240ns(MIN);MOSI建立到SCK變高時(shí)間為30ns(MIN);SCK變高后MOSI保持時(shí)間為2×30 ns(MIN);SCK變低到MISO有效時(shí)間為10 ns(MIN)~32 ns(MAX)(一般取16ns);芯片檫除指令周期為500 ms;串行字節(jié)寫周期為64×30 ns+400 ns。
實(shí)驗(yàn)數(shù)據(jù):
晶體震蕩器的頻率為33 MHz(MAX),所以周期T=1/F=1/33 MHz=30 ns(MIN);芯片擦除指令周期為200ms;SCK變高后MOSI保持時(shí)間為1 ms(MIN)。