Hallo,
ich möchte auf dem Mikrocontroller AT89S52 eine Datei (datei.hex)
übertragen.
Dazu habe ich natürlich viele Informationen auch hier im Forum gefunden,
leider keine die zu einer Lösung meiner Probleme beigetragen haben.
Ich gehe mal davon aus das der mikrocontroller AT89S52 einen Bootloader
hat und über die ISP-Schnittstelle (MOSI, MISCO, SCK, RESET) geflasht
wird.
Mein Interface ist ein „USBASP V2.0", mit einnem 10-poligen Anschluss
Meine Probleme sind:
1. den benötigten Treiber (usbasp-windriver.2011-05-28.zip
bzw.USBasp-win-driver-x86-x64-ia64-v1.2.4.zip) für den USBASP unter
WINDOWS 11 Pro 64 Bit zu installieren
dazu habe ich einen Beitrag „Windows 10 unsignierte Treiber
installieren“ gefunden.
https://code-bude.net/2015/08/19/windows-10-unsignierte-treiber-installieren/
Hat aber leider nicht funktioniert.
2. die Anschluss-Belegung für den USBASP mit 10-poligen Anschluss
Dazu habe ich zwei verschieden Versionen gefunden:
Meine verwendete Verbindung zum Mikrocontroller
1
USBASP AT89S52
2
1 MOSI ------ 6 P1.5 (MOSI)
3
2 VCC ------ 40 VCC (+5V)
4
3
5
4 GND ------ 20 GND
6
5 RESET ------ 9 RST
7
6 GND
8
7 SCK ------ 8 P1.7 (SCK)
9
8 GND
10
9 MISO ------ 7 P1.6 (MISO)
11
10 GND
3. Anschluss von RESET
Dazu habe ich zwei verschiedene Versionen gefunden:
a: Anschluss eines Widerstandes 10K gegen +5V
b: das Signal RESET vom USBASP über eine Schaltung mit einem
PNP-Transistor invertieren
Aktuell habe ich die Version „a“ verwendet.
4. als Programmer Software benutze ich „AVRDUDE“ Version 7.1 mit
Erweiterung von avrdue.conf für die Mikrocontroller AT89S51/52
1
avrdude -c usbasp -p 8052 -U flash:r:test.hex:i
2
avrdude warning: a1 would normally be expected to be a9 [E:\Baben\Dokumentation\ELEKTRO\Mikrokontroller\ATmega\AT89S51 flashen\Software\AVRDUDE\avrdude.conf:16252]
3
avrdude warning: a0 would normally be expected to be a8 [E:\Baben\Dokumentation\ELEKTRO\Mikrokontroller\ATmega\AT89S51 flashen\Software\AVRDUDE\avrdude.conf:16252]
4
avrdude warning: mcuid -1 for AT89S51 is out of range [0..2039], use a free number >= 372 [E:\Baben\Dokumentation\ELEKTRO\Mikrokontroller\ATmega\AT89S51 flashen\Software\AVRDUDE\avrdude.conf:16254]
5
avrdude warning: a1 would normally be expected to be a9 [E:\Baben\Dokumentation\ELEKTRO\Mikrokontroller\ATmega\AT89S51 flashen\Software\AVRDUDE\avrdude.conf:16310]
6
avrdude warning: a0 would normally be expected to be a8 [E:\Baben\Dokumentation\ELEKTRO\Mikrokontroller\ATmega\AT89S51 flashen\Software\AVRDUDE\avrdude.conf:16310]
7
avrdude warning: mcuid -1 for AT89S52 is out of range [0..2039], use a free number >= 372 [E:\Baben\Dokumentation\ELEKTRO\Mikrokontroller\ATmega\AT89S51 flashen\Software\AVRDUDE\avrdude.conf:16312]
8
9
avrdude error: program enable: target does not answer (0x01)
10
avrdude error: initialization failed, rc=-1
11
- double check the connections and try again
12
- use -B to set lower ISP clock frequency, e.g. -B 125kHz
Juergen B. schrieb:> Ich gehe mal davon aus das der mikrocontroller AT89S52 einen Bootloader> hat und über die ISP-Schnittstelle (MOSI, MISCO, SCK, RESET) geflasht> wird.
Er hat keinen Bootloader, wenn er fabrikfrisch ist, kann aber über ISP
geflasht werden. Er unterscheidet sich aber in der Polarität des Reset
Signals. Bei ihm ist Reset aktiv high, wie bei nahezu allen MCS51
Derivaten.
Für den USBASP kann ich nicht sprechen, aber mein AVRISP MkII
programmiert den AT89S52 ohne Probleme und behandelt auch das
Resetsignal richtig.
Du solltest also mal in der Doku zu deinem USBASP schnüffeln und
schauen, ob der MC unterstützt wird.
Zum USB Treiberproblem kann ich nicht viel sagen, empfehle dir aber, mal
auszuprobieren, ob Zadig funktionieren würde:
https://zadig.akeo.ie/
Matthias S. schrieb:> Zum USB Treiberproblem kann ich nicht viel sagen, empfehle dir aber, mal> auszuprobieren, ob Zadig funktionieren würde:> https://zadig.akeo.ie/
Dem TO koennte ich "libusbK" empfehlen. Vorteil: Der ist signiert.
Den aktuellen Status von Zadig kenne ich aber nicht.
Ganz frueher™ hatte man einen Kandadongle fuer den Parallelport,
und Treiber dafuer brauchte man auch nicht. :)
Hallo,
vielen Dank für Eure schnellen Antwort.
Dazu habe ich noch folgendes zu sagen:
1. Den Treiber für den USBASP konnte ich ersteinmal unter WINDOWS7
installieren.
2. die Signal MOSI,MISO,SCK kann ich aber nicht erkennen (Oszilloscope).
Das Signal "RESET" wird kurz auf "GND" geschaltet.
Test mit:
Hier weiss ich leider nicht ob es an dem fehlenden Bootloader oder an
der Verdrahtung (habe ich nätürlich mehrmals geprüft) liegt.
3. Frage zum Bootloader: "Er hat keinen Bootloader, wenn er fabrikfrisch
ist, kann aber über ISP geflasht werden"
Wie kann ich denn dann den MC flashen, bzw. wie bekomme ich den
Bootloader auf den MC ?
Juergen
Bootloader gibts beim AT89S52 nicht, der kann nur via ISP oder parallel
programmiert werden, nicht aus einem eigenen Programm heraus.
Und dein Programmer benötigt mindestens eine kleine Hardwaremodifikation
bzgl des Reset-Pins.
Hallo,
das mit dem Bootloader ist mir nun klar, deswegen über die
ISP-Schnittstelle (MOSI,...), anders als beim AT89C51 über die
Serielle-Schnittstelle (TxD,RxD).
Die Hardwaremodifikation habe ich so verstanden das RESET-Signal vom
USBASP invertiert werden muss.
Das habe ich mit einem IC 7404 (Hex-Inverter) realisiert, erhalte aber
die gleichen Fehler-Meldungen.
Oder habe ich das falsch verstanden ?
Juergen
Juergen B. schrieb:> Oder habe ich das falsch verstanden ?
Richtig verstanden. Dann unterstützt dein Programmer oder die Software
das eben nicht.
Nimm einen geeigneten Programmer.
Juergen B. schrieb:> Das habe ich mit einem IC 7404 (Hex-Inverter) realisiert, erhalte aber> die gleichen Fehler-Meldungen.
gut dann nur noch:
MOSI -> MISO und
MISO -> MOSI und
CLK -> CLK verbinden
und natürlich sicherstellen dass die MCU einen Takt hat
Hier funktioniert die Kombination USBASP und AVRDUDE zum Programmieren
eines AT89S52 ja auch:
http://ernstc.dk/arduino/at89s.html
Wie hier schon geschrieben wurde: Reset invertieren und den Takt für den
AT89S52 nicht vergessen (Quarz oder externer Takt).
Nachtrag: Laut Datenblatt des AT89S52 kann man Reset zum Programmieren
wohl auch einfach auf Vcc setzen.
H. H. schrieb:>> Mit welchem USBasp genau?
Allem Anschein nach ein "normaler" USBasp ohne die spezielle Firmware,
die das Invertieren von Reset selbst erledigt (daher auch der Inverter
aus Transistor und zwei Widerständen). Wobei man das vermutlich nicht
braucht wenn man laut Datenblatt Reset fest auf Vcc setzt.
Ich spekuliere einfach mal dass das Problem des TO am fehlenden Takt für
den AT89S52 liegen könnte.
Thomas Z. schrieb:> gut dann nur noch:> MOSI -> MISO und> MISO -> MOSI und> CLK -> CLK verbinden> und natürlich sicherstellen dass die MCU einen Takt hat
Und GND -> GND verbinden!
Und den Mikrocontroller mit Strom versorgen.
Dieter S. schrieb:> Ich spekuliere einfach mal dass das Problem des TO am fehlenden Takt für> den AT89S52 liegen könnte.PICs koennen auch ohne Takt ICSP. Sind wohl intelligenter.
Sagt ja auch das Datenblatt: "Peripheral Intelligent Computer".
Aber einen artgerechten Reset moechten sie schon.
So, genug getrollt. :)
Juergen B. schrieb:> 2. die Signal MOSI,MISO,SCK kann ich aber nicht erkennen (Oszilloscope).
Wenn Du keinerlei Aktivität auf der SPI siehst, wird er kaum irgendwas
ausgelesen haben. Das hier
> avrdude: AVR device initialized and ready to accept instructions> avrdude: Device signature = 0x656570
ist dann sicher gelogen. Der Wert stand noch zufällig in irgendeiner
Variablen drin.
Mit MISO auf Low sollte als Signatur 0x000000 gelesen werden. Und man
sollte auf MOSI und SCLK Aktivität sehen. Den Controller brauchst Du
dafür nicht. Mit MISO auf High sollte 0xFFFFFF geliefert werden. Wenn
das nicht klappt, ist der Brenner hin oder der Treiber falsch
installiert.
Soul E. schrieb:>>> avrdude: AVR device initialized and ready to accept instructions>> avrdude: Device signature = 0x656570>> ist dann sicher gelogen. Der Wert stand noch zufällig in irgendeiner> Variablen drin.
Das scheint auch bei den AVRs als Signatur zu kommen wenn etwas beim
Zugriff auf den Chip schief geht. Man findet einige AVRDUDE Logs mit
diesem Wert. Woher das "eep" kommt habe ich noch nicht untersucht.
Ein Test mit einem AT89S51 und ISP kam bei mir zu unterschiedlichen
Ergebnissen (AVRDUDE ging nicht, PROGISP hat funktioniert).
Folgendes wurde verwendet:
- ein USBasp Klon mit ATmega8L von 2013 (MX-USBISP V3.01), die Firmware
ist die unveränderte Version von damals
- ein USBasp Klon mit ATmega8L von 2023 (HW-437), die Firmware ist die
unveränderte Version
- AVRDUDE 6.3 mit den Ergänzungen für AT89S51 und AT89S52 in der
"avrdude.conf" Datei
- PROGISP 1.72 von 2010 (läuft auch unter Windows 7)
- Beschaltung zum Programmieren entsprechend dem Datenblatt, allerdings
mit externem Takt (ca. 14 MHz) anstelle Quarz (Bilder für beide
Varianten siehe Anhang)
- Reset wurde in unterschiedlichen Varianten beschaltet, siehe weiter
unten.
Bezüglich Takt bei ISP den Hinweis aus dem Datenblatt beachten: "The
maximum serial clock (SCK) frequency should be less than 1/16 of the
crystal frequency"
Ergebnis:
- Bei mir hat AVRDUDE 6.3 mit keinem der USBasp Klons und deren Firmware
funktioniert, Reset wurde sowohl direkt als auch invertiert mit dem
USBasp verbunden, zusätzlich auch noch fest auf Vcc gelegt
- PROGISP 1.72 funktioniert mit beiden USBasp Klons problemlos, Reset
ist direkt mit dem USBasp verbunden
Bei einem der USBasp Klons ist der ATmega8L nicht gelockt und man kann
die Firmware auslesen. Man sieht schnell dass die Basis dafür eine alte
Version (noch ohne TPI) der original USBasb Firmware von Thomas Fischl
ist, mit ein paar kleinen Erweiterungen.
Die entscheidende Erweiterung für den AT89S51/2 ist ein zusätzlicher
Parameter beim Connect Kommando (USBASP_FUNC_CONNECT), damit kann man
festlegen dass Reset invertiert wird und bei "Programming Enable" der
Rückgabewert für AT89S51/2 berücksichtigt wird (der ist anders als bei
den AVRs).
PROGISP 1.72 verwendet diese Erweiterung, AVRDUDE benutzt sie nicht. Ich
habe zum Testen auf die Schnelle diesen Parameter in AVRDUDE eingebaut,
dann würde auch AVRDUDE mit den USBasp Klons und dem AT89S51/2
funktionieren.
Man findet auch ein paar Änderungen für die USBasp Firmware (z.B. auf
Github) die automatisch beim Connect den AT89S51/2 erkennen und sich
dann bezüglich Reset passend verhalten.
Alternativ kann neben dem hier bereits erwähnten AVRISP mkII auch der
STK500 bzw. AVRISP mit AVR Studio 4 den AT89S51/2 programmieren.
Inwieweit sich alle USBasp Klons so wie beschrieben verhalten weiß ich
nicht, aber vielleicht einfach mal PROGISP 1.72 ausprobieren.
Hallo,
vielen vielen Dank für Eure Beiträge. Speziellen Dank an Dieter S. für
seinen ausführlichen und verständlichen Beitrag.
Mein Problem konnte ich aber noch nicht lösen.
Mein Status ist:
1. Ich konnte auch den Treiber für den USBASP unter WINDOWS 11
installieren
3. damit konnte ich den MC AT90S8515 programmieren
Das RESET-Signal vom USBASP ist mit dem RESET-Signal vom MC verbunden.
Interner Takt (Quarz 4Mhz)
4. den MC AT89S52 konnte ich nicht programmieren
Das RESET-Signal vom MC ist über 10K mit Vcc(+5V) verbunden.
Das RESET-Signal invertiert oder direkt verbunden hat auch nicht
funktioniert.
Interner Takt (Quarz 4+16MHz)
Meldung von PROGISP: "Chip Enable Program Error"
5. der Unterschied zwischen Pkt.4 und 5 ist:
den MC AT90S8515 hatte ich schon mit dem Board STK200 (Parallel
Interface von Kanda, OS = WINDOWS XP) programmiert.
Der MC AT89S52 ist neu.
6. D.h. für mich das mein USBASP funktioniert, aber nicht für den MC
AT89S51/52 ausgelegt ist.
Kann ich für den USBASP eine entsprechende Firmware verwenden ?
Die aktuelle Firmware ist: usbasp 2011-05-28.tar.gz --> Atmega8 Firmware
von:
Vermutlich wird die Firmware des USBasb nicht die für PROGISP
erforderliche Funktionalität enthalten.
Falls Dein USBasb auf einem ATmega8L basiert und Du die Möglichkeit hast
ihn zu progammieren (z.B. mit einem zweiten USBasb) dann kannst Du die
Firmware im Anhang ausprobieren. Diese stammt aus dem oben beschriebenen
"USBasp Klon mit ATmega8L von 2023 (HW-437)". Die Fuses dafür sind:
HFUSE=0xc9
LFUSE=0xef
Damit funktioniert bei mir der Zugriff auf den AT89S51 mit PROGISP,
Reset ist dabei direkt mit dem USBasp verbunden.
Hallo,
Danke für die Firmware USBASP.
Gestern konnte ich noch die Firmware mit einem ARDUINO UNO uploaden,
jetzt wird der UNO nicht mehr erkannt.
D.h. ich muss mir ersteinmal einen neuen bestellen (das kann etwas
dauern).
Ich werde mich dann wieder melden.
Juergen
Hallo,
ich konnte doch noch die neue Firmware auf den USPASP uploaden (anderes
USB-Kabel für den UNO verwendet).
Kleiner Erfolg: den MC AT89S51/52 kann ich nun löschen (Chip Erase,
Blank Check = OK).
Auch bei "Verify Signature" erhalte ich keine Meldung.
Problem ist bei "Program FLASH". da erhalte ich auch keine Meldung und
auch kein Fortschritts-Balken (den grünen).
Juergen
Das Problem beim Programmieren kann ich nicht nachvollziehen. PROGISP
braucht für ein einfaches "LED Blinken" Testprogramm weniger als eine
Sekunde zum Schreiben, da taucht nicht mal ein Fortschrittsbalken auf.
Im Status-Fenster steht dass die Datei geschrieben wurde, Verify bzw.
Zurücklesen des Flash bestätigt auch dass die richtigen Daten
geschrieben wurden.
Hallo,
mit dem richtigen Hex-File für den MC AT89S51/52 kann ich die MC's mit
dem Programm PROGISP programmieren (mit Fortschrittsbalken).
Mein Fehler: ich hatte zum Test den Hex-File für den MC AT90S8515
verwendet.
Vielen Dank für Eure Hilfe.
Hier noch einmal die Zusammenfassung:
1. Interface: USBASP mit der Firmware: USBasb_Klon_HW-437_ATmega8.hex
(bereitgestellt von Dieter S.)
2. Treiber für WINDOWS 10/11 für den USBASP:
Juergen B. schrieb:>> Ich habe aber noch eine Frage zu den "Fuses": wozu werden die verwendet?
Geht es um die Fuses für den USBasp die ich weiter oben bei der Firmware
angegeben habe?
Die Fuse Bits legen u.a. fest woher der Takt für den ATmega8 kommt (alle
Details siehe Datenblatt des ATmega8). Vermutlich werden die Fuses bei
einem USBasp auf ATmega8 Basis bereits stimmen, falls nicht sollte man
die entsprechenden Werte einstellen (das sind auch die Werte für die
USBasb Firmware von Thomas Fischl).
Der AT89S52 hat als einzige 'Fuse' Bits (obwohl sie nicht so bezeichnet
werden) die drei Memory Lock Bits, die auf verschiedenen Ebenen den
Zugang zum Programmspeicher verhindern. Sieht Tabelle 17.1 im Atmel
Datenblatt.
Darin unterscheidet er sich von moderneren MC, wie der AVR8 Serie. Bei
denen kannste alle möglichen Dinge festsetzen, die schon beim Start
gelten, wie Oszillator Hardware, Resetvektoren, Startup Zeiten, Memory
Lockouts usw. Sowas kann man bei den diversen Fuse Kalkulatoren im
Internet anschauen.