|
摘要:下載電纜被廣泛應(yīng)用于電子系統(tǒng)設(shè)計與調(diào)試過程中。本文介紹它的基本原理和編程控制方法;針對目前單片機(jī)的isp串行編程模式列舉實(shí)例,簡要介紹at89s5x的串行編程的方法和部分協(xié)議,使用vc編程,應(yīng)用下載電纜實(shí)現(xiàn)對at89s5x系列單片機(jī)的isp編程;文末提出統(tǒng)一下載電纜硬件或軟件的設(shè)想,并提供可以下載支持多種單片機(jī)isp編程軟件的網(wǎng)址。 關(guān)鍵詞:下載電纜 串行編程 at89s5x isp 引言 隨著電子技術(shù)的日益發(fā)展,芯片的規(guī)模越來越大,封裝日趨小型化,相應(yīng)的對系統(tǒng)板級調(diào)試?yán)щy也在加大。ieee制定了標(biāo)準(zhǔn)測試端口與邊界掃描的標(biāo)準(zhǔn)ieee std 1149.1,這就是jtag接口協(xié)議。jtag接口通過tck、tdi、tdo、tms四根信號線,以串行模式為系統(tǒng)提供了對復(fù)雜芯片的各引腳連通性測試,進(jìn)步還能實(shí)現(xiàn)對可編程芯片的配置與處理器芯片的調(diào)試等等。下載電纜就是一種使用計算機(jī)的并行端口通過軟件的仿零點(diǎn)實(shí)現(xiàn)jtag接口協(xié)議,訪問可編程芯片的廉價工具。本文使用的下載電纜是altera公司為其可編程邏輯器件開發(fā)的byteblastermv電纜。isp(在系統(tǒng)可編程的簡稱)是最先由lattice公司提出的一種技術(shù),是通過同步串行方式實(shí)現(xiàn)對其可編程邏輯器件的重配置。isp與jtag的接口協(xié)議很相像,只是后者形成了標(biāo)準(zhǔn)。isp現(xiàn)在已經(jīng)成為一種概念,它的提出改變了傳統(tǒng)硬件系統(tǒng)開發(fā)的流程,大大方便了開發(fā)者,加快了開發(fā)速度,F(xiàn)在大多數(shù)的可編程器件(fpga、cpld、dsp、mcu……)都支持isp特性。單片機(jī)也不例外,atmel公司推出的at89s系列51單片機(jī)也符合isp特性。
1 下載電纜的硬件 要實(shí)現(xiàn)jtag接口協(xié)議可以使用專用的ic,如74lvt8980、74lvt8990,它與mcu配合可以提供高速的jtag串行訪問,成本較高。下載電纜則是實(shí)現(xiàn)jtag接口協(xié)議的廉價方案。它僅命名用74hc244做線路驅(qū)動,由計算機(jī)的并行端口引出i/o作為tck、tdi、tdo、tms等信號線。由于并口在spp模式下共有3個端口——數(shù)據(jù)輸出端口、控制輸出端口、狀態(tài)輸入端口,各種下載電纜究竟從那個端口引出jtag信號線幾乎都不相同,圖1、圖2是兩種下載電纜的原理圖。 并口簡介: 計算機(jī)的并行端口工作在spp模式下,對它的控制是通過數(shù)據(jù)輸出端口、控制輸出端口、狀態(tài)輸入端口來實(shí)現(xiàn)的。 并行口有25個引腳,其中包括8位數(shù)據(jù)線、5位狀態(tài)線、4位控制線。 數(shù)據(jù)端口(378h):d0~d7用于數(shù)據(jù)輸出。 狀態(tài)端口(379h):*s7(busy)、s6(nack)、s5(pe)、s4(select)、s3(nerror)。 控制端口(37ah):*c3(nselin)、s2(ninit)、*c(anutofeed)、*c0(nstrobe)。 ()(端口地址是缺省的lpt1設(shè)置;*表示此引腳有反向器) 表1為并行端口定義。對應(yīng)原理圖有: altera的下載電纜 tck、tdi、tms、tdo分別對應(yīng)d0、d6、d1、*s7; atmel的電纜 tck、tdi、tms、tdo分別對應(yīng)*c0、d0、*c3、s6。
表1 并行端口定義表 引腳號名 稱數(shù)據(jù)位1nstrobe*c02d0d03d1d14d2d25d3d36d4d47d5d58d6d69d7d710nacks611busy*s712pes513selects414auto feed*c115nerrors316ninitc217nselin*c318~25gndgnd 2 下載電纜的編程方法 用計算機(jī)控制下載電纜實(shí)現(xiàn)jtag協(xié)議,就是對并口3個i/o端口的讀寫操作,用0-1的變化來模擬jtag時序。在win98和win2000環(huán)境下讀寫i/o,需要驅(qū)動程序。本文使用driverlinx port i/o driver(可以從www.sstnet.com下載)來實(shí)現(xiàn)i/o端口訪問。安裝dlportio以后,通過調(diào)用dlportio.dll動態(tài)連接庫中的 uchar dlport_api d1portread portuchar(in ulong port);
 void dlport_api d1portwrite portuchar(in ulong port,in uchar value);兩個函數(shù)就可以訪問位于378h、379h、37ah(這是缺省的lpt1設(shè)置)的3個并口i/o端口。程序段1實(shí)現(xiàn)了對altera下載電纜的一次電平賦值: 程序段1 altera下載電纜電平賦值函數(shù) void cavrispdlg::setbit(){ unsigned char value=0; if(!m_tck)value|=0x01; if(!m_tms)value|=0x02; if(!m_tdi)value|=0x40; dlportwriteportuchar(0x378,value); value=dlportreadportuchar(0x379); if(value & 0x80)m_tdo=0; else m_tdo=0; } 通過以上程序依次改變jtag各接口i/o的電平狀態(tài),模擬jtag協(xié)議的時序,就可以訪問支持jtag標(biāo)準(zhǔn)的各種芯片。 3 isp協(xié)議的解析與實(shí)現(xiàn) 對at89s5x系列單片機(jī)isp編程不使用jtag協(xié)議,而使用spi同步串行接口協(xié)議,如圖3所示。
 針針這種8位spi接口協(xié)議,我們使用數(shù)組來模擬時序: 時鐘信號固定為unsigned char sck[19]={0,0,1,0,1,0,1,0,1,0,10,1,0,1,0,1,0,1,0,0}; 輸出的數(shù)據(jù)信號由程序?qū)崿F(xiàn)情況自動生成數(shù)組unsigned char mosi[19]; 輸入的數(shù)據(jù)根據(jù)讀入的信號生成數(shù)組unsigned char miso[19]; 再調(diào)用上文的setbit()函數(shù),依次發(fā)送19位的jtag接口i/o狀態(tài),同時讀入返回信號,即完成一次對at89s5x芯片的spi單字節(jié)訪問。 在單字節(jié)訪問基礎(chǔ)上,參考atmel公司的at89s5x數(shù)據(jù)手冊的串行編程指令表中的指令格式,就可以實(shí)現(xiàn)isp了。 表2為at89s51串行編程指令表。
表2 at89s51串行編程指令集 指 令指 令 模 式說 明第1字節(jié)第2字節(jié)第3字節(jié)第4字節(jié)編程使能1010110001010011xxxxxxxxxxxxxxxx使能串行編程芯片擦除10101100100xxxxxxxxxxxxxxxxxxxxx擦除程序存儲順讀程序字節(jié)00100000xxxxa11~a8a7~a0d7~d0字節(jié)模式讀程序?qū)懗绦蜃止?jié)01000000xxxxa11~a8a7~a0d7~d0字節(jié)模式寫程序?qū)懕Wo(hù)位10101100111000b1b2xxxxxxxxxxxxxxxx寫保護(hù)位讀保護(hù)位00100100xxxxxxxxxxxxxxxxxxlb3~lb1xx讀當(dāng)前保護(hù)位讀標(biāo)志字節(jié)00101000xxxa5~a1a0xxxxxx標(biāo)志數(shù)據(jù)讀取標(biāo)志數(shù)據(jù)讀程序頁00110000xxxxa11~a8數(shù)據(jù)0數(shù)據(jù)1…255頁模式讀程序?qū)懗绦驅(qū)?1010000xxxxa11~a8數(shù)據(jù)0數(shù)據(jù)1…255頁模式寫程序 注:①串行編程要在rst端接高電平情況下實(shí)現(xiàn);②x表示此位關(guān)心;③a11~a0是要訪問字節(jié)地址;④d7~d0是讀寫的數(shù)據(jù);⑤b1、b2是保護(hù)位;⑥lb3~lb1表示3種狀態(tài)。 針對at89s51單片機(jī),其標(biāo)志字節(jié)為:(00h)1eh、(02h)51h、(04)06h. 程序段2將得到at89s51單片機(jī)的標(biāo)志字節(jié)。(其中spicomm()為spi單字節(jié)訪問函數(shù))。 程序段2 獲得at89s51單片機(jī)標(biāo)志字節(jié)的程序段 cstring str; for(addr=1;addr<3;addr ){ m_comm=0x28; spicomm(); m_comm=addr; spicomm(); m_comm=0; spicomm(); m_comm=0; spicomm(); str.format(“0xx”,m_dat); m_out =str; } 圖4是at89s51進(jìn)行串行編程時的硬件原理圖。 4 小結(jié) 下載電纜為我們提供了深入芯片內(nèi)部的觸手。通過jtag標(biāo)準(zhǔn)協(xié)議,我們可以用下載電纜檢查芯片焊接連通性、重新配置可編程器件、下載程序固件以及調(diào)試處理器的運(yùn)行。 小到8位單片機(jī)at89s5x、avr的串行編程,可編程器件max7000的配置;大到32位嵌入式處理器的調(diào)試,上萬門fpga芯片的配置都可以見到下載電纜的身影。例如,arm使用下載電纜的jtag仿真可以通過embeddedice接口實(shí)現(xiàn)對arm的開發(fā)調(diào)試,或者使用arm的邊界掃描特性為嵌入式系統(tǒng)板下載啟動程序等等。 目前下載電纜的使用越來越多,各個廠商分別推出了自已的符合jtag標(biāo)準(zhǔn)的芯片或者是使用isp技術(shù)的新產(chǎn)品。與此同時,下載電纜的種類也非常多,大多數(shù)的區(qū)別僅在于并口信號與jtag信號的對應(yīng)關(guān)系不同。往往有時候開發(fā)一個產(chǎn)品,要用到很多種不同的電纜。我們希望可以使用一種標(biāo)準(zhǔn)的下載電纜來實(shí)現(xiàn)所有jtag應(yīng)用;或者是通過一個計算機(jī)程序可以通過配置文件來使用各種下載電纜。在我們的blmvisp軟件中,就支持了現(xiàn)有的兩種電纜。 使用isp技術(shù)可以大大加快硬件開發(fā)速度。下載電纜與計算機(jī)軟件的配合使用也可以降低開發(fā)成本,非常適合個人愛好者與初學(xué)者使用。 有興趣的讀者可以下載blmvisp演示版的vc源程序壓縮包(demo_blmvisp.zip),以便參考;也可以訪問:http://51kaifa.nease.net或者email:blmv@eyou.com。 |