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