RTL8139改制AT89C51編程器
想玩89C51,但沒(méi)有編程器,于是便想自制編程器,找了很多自制的資料,大多都是使用89C51做控制邏輯,需要有編程器才能制作,電路一般也比較復(fù)雜(最ez的也要30個(gè)元件),再看看不需要編程器的,一看我就放棄,太復(fù)雜了,我手頭甚至連一塊74LS373那樣的鎖存器都沒(méi)有一塊,可用到的元件又沒(méi)多少。
天無(wú)絕人之路,充分利用計(jì)算機(jī)硬件軟件,作出了這款編程器,所有的數(shù)據(jù)地址和控制信號(hào)線都需要由計(jì)算機(jī)提供,我借來(lái)一塊rtl8139網(wǎng)卡(非常常見(jiàn)的PCI百兆網(wǎng)卡,一塊新的rtl8139C才40元,如果有,更是這樣省了不少米)引用它的EEPROM的地址線和數(shù)據(jù)線,因?yàn)閞tl8139的EEPROM地址線和數(shù)據(jù)線是由一個(gè)32位寄存器提供,一次操作必須鎖存所有的地址線數(shù)據(jù)線和控制線,因此不適合于提供89C51燒寫(xiě)所需的編程信號(hào)線,只用它來(lái)鎖存地址和數(shù)據(jù)線,編程需要的控制線由EPP(SPP)并口提供,下面是電路原理圖。
rtl8139的EEPROM插座一般分兩種,28針和32針的,28針的針腳定義與27C512相同,32針的與29C010相同,你需要引出它的地址線和數(shù)據(jù)線A0~A7接P1.0~P1.7, A8~A11接P2.0~P2.3,Q0~Q7接P0.0~P0.7,(我是用硬盤(pán)排線和28針集成塊插座制作的插座做成連接器將其連出)EPP并口D0提供讀寫(xiě)信號(hào),D1提供編程脈沖,D2控制變成電壓,Q1,Q2,R1,R2,R3為編程電壓電路,12V電源用PC機(jī)內(nèi)部電源提供(測(cè)一下最好能在12.5V~13V)ACK(并口pin10)接P3.4,反映燒寫(xiě)狀態(tài),為了防止誤操作,S1為H時(shí)為擦除芯片和加密,L時(shí)為讀寫(xiě),電路簡(jiǎn)單,相信很容易看懂,印刷電路板的土我就不給出,我使用的是實(shí)驗(yàn)板做成的,樣子非常丑。
然后是對(duì)EPP并口和rtl8139的編程。LPT1 EPP并口的數(shù)據(jù)口地之一般為0x378,控制rtl8139的EEPROM的寄存器地址為卡的I/O基地址+0xD4,下表為該寄存器的定義
Flash Memory Read/Write Register
(Offset 00D4h-00D7h, R/W)
|
位 |
讀/寫(xiě) |
定義 |
描述 |
|
31-24 |
R/W |
D7-D0 |
反映數(shù)據(jù)線狀態(tài),當(dāng)外部高阻時(shí)為輸出,否則為輸入 |
|
23-21 |
- |
- |
保留 |
|
20 |
W(只寫(xiě)) |
CS |
設(shè)置CS線 |
|
19 |
W |
OE |
設(shè)置OE線 |
|
18 |
W |
WR |
設(shè)置WR線 |
|
17 |
W |
SWRWEn |
準(zhǔn)許軟件訪問(wèn)flash memory: 0: 不準(zhǔn)許通過(guò)軟件訪問(wèn)flash memory 1: 準(zhǔn)許通過(guò)軟件訪問(wèn)flash memory并且在通過(guò)軟件訪問(wèn)flash memory期間不準(zhǔn)許訪問(wèn)EEPROM(我也不太懂什么意思,不過(guò)似乎沒(méi)什么用,下面是原文) Enable software access to flash memory: 0: Disable read/write access to flash memory via software. 1: Enable read/write access to flash memory via software and disable the EEPROM access during flash memory access via software. |
|
16-0 |
W |
A16-A0 |
設(shè)置地址線 |
如果不想自己寫(xiě)軟件,也可以用我編寫(xiě)的軟件,軟件還不完善,不支持加密,不支持分段模式的HEX文件燒寫(xiě)(對(duì)于89c51的4K ROM來(lái)說(shuō)用不著 ),因?yàn)樗械木幊绦盘?hào)都由軟件提供,因此為了保證信號(hào)時(shí)序的正確,降低了燒寫(xiě)速度,建議在Windows2000下使用(98理論上可以,但尚未測(cè)試),軟件界面如下:
軟件介紹:
1. 在計(jì)算機(jī)打開(kāi)后接好制作好的編程器,注意在計(jì)算機(jī)啟動(dòng)過(guò)程中最好關(guān)閉編程器上的12V電源,以防止誤編程,打開(kāi)軟件,選擇讀特征字,如果出現(xiàn)30H=1E,31H=51,32=FF說(shuō)明編程器連接成功,如果不對(duì),關(guān)閉打開(kāi)S2,或者熱拔插ROM連接器(不會(huì)損壞硬件的),多試幾次,如果還不成功,檢查你編程器上的地址數(shù)據(jù)線是否有連接錯(cuò)誤。
2. 如果要燒寫(xiě)89c51,先將編程卡12V電源打開(kāi),S1置為L(zhǎng),然后選擇 讀bin文件燒寫(xiě)89C51或者讀HEX文件燒寫(xiě)89C51,燒寫(xiě)完會(huì)在執(zhí)行目錄下生成“燒寫(xiě)結(jié)果信息.txt”,通過(guò)此文件,你可以判斷89C51的壞塊,修改你的程序代碼使出現(xiàn)壞塊的89C51有繼續(xù)使用的可能,或者檢查編程器的錯(cuò)誤,比如“寫(xiě)地址0x0失敗,寫(xiě)數(shù)據(jù)0x2,效驗(yàn)數(shù)據(jù)42”,則很有可能說(shuō)明是編程器的數(shù)據(jù)線7出了問(wèn)題。
3. 要讀取89c51,S1置為L(zhǎng),關(guān)閉12V電源,選擇讀89c51并保存。
4. 要擦除89c51,S1置為H,打開(kāi)12V電源,選擇擦除89c51
5. 此軟件完全免費(fèi)開(kāi)放原代碼,如果想自己做軟件,可做為參考,或者改動(dòng)硬件需要修改軟件,也可隨意修改軟件,無(wú)版權(quán)限制。(因?yàn)榇舜a造成的計(jì)算機(jī)爆炸,不要找我補(bǔ)償醫(yī)藥費(fèi)!^_^)
此編程器因?yàn)榫路簡(jiǎn)單,不需另外的編程器和MCU支持,而且預(yù)留的控制線還有很多,因此有很大的功能擴(kuò)展空間,只要簡(jiǎn)單改動(dòng)幾條控制線,再在軟件上稍加修改,就可以支持別的芯片。由于篇幅問(wèn)題,無(wú)法為大家詳細(xì)介紹該編程器的硬件和軟件編程方面的原理,如果你想通過(guò)本文中的技術(shù)完全自主的制作自己的編程器或者想讓本文中介紹的編程器燒寫(xiě)更多種類(lèi)的芯片并能夠使用其他網(wǎng)卡,你可以去看本文附帶的軟件包中提供詳細(xì)的資料,包括RTL8139datasheet 89C51燒錄的資料,與本編程器相關(guān)的PCI.和并口的硬件軟件開(kāi)發(fā)的資料,還有HEX文件格式,如果還有什么問(wèn)題或者好的意見(jiàn),可以在CSDN(www.csdn.net)論壇VC硬件系統(tǒng)版給我留言(我是版主AthlonxpX86),或者發(fā)貼,我的郵件E-mail: yds_086@163.com