Forum: Mikrocontroller und Digitale Elektronik ISP Programmieren, trotz Geräte am spi bus


von der_thorben (Gast)


Lesenswert?

hi,

wie ist es möglich den Atmega zu flashen, obwohl am Bus weitere IC's 
anhängen?
Wenn ich 2 Atmegas, die mit SPI verbunden sind, einen flashen will, 
funktioniert es nicht.

Ich hab auch eine SD-Büchse am SPI Bus anhängen:

http://www.ebay.de/itm/321661440743?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT


Sogar wenn die Karte aus der Büchse raus ist, kann ich nicht flashen, 
erst wenn die Stromzufufuhr unterbrochen ist.


Wie kann man das Problem lösen?

Danke

der thorben

von Andreas H. (ahz)


Lesenswert?

der_thorben schrieb:
> Sogar wenn die Karte aus der Büchse raus ist, kann ich nicht flashen,
> erst wenn die Stromzufufuhr unterbrochen ist.

Du hast eine Adapterkarte in die Du eine SD-karte einstecken kannst.
Welche hast Du abgezogen ? Mit Deiner "Büchse" kann ich nichts 
anfangen^^

>
> Wie kann man das Problem lösen?

Schau mal auf Deine Adapterkarte. Da scheint ein Treiberbaustein drauf 
zu sein.
Evtl. treibt der parallel zum ISP.

Lösung (nicht böse gemeint ;-): Wissen was man tut :p

Grüße
Andreas

von der_thorben (Gast)


Lesenswert?

ja, ich mein den Adapter. Erst wenn ich die Versorgung für diesen 
unterbreche, kann ich flashen.


da ist auch ein Treiber drauf, finde es aber schon komisch, dass dieser 
das Flashen verhindert.



Wie kann ich auch das Flashen auf einen Atmega durchführen, wenn ein 
weiterer Atmega auf den Bus sich befindet?

von SeDa (Gast)


Lesenswert?

ISP ist eigentlich nur ein Art SPI-Bus der in den Flash des AVR schreibt 
und RESET als SlaveSelect hat.
Also behandle es wie ein dementsprechenden SPI-Bus.

von Philipp K. (philipp_k59)


Lesenswert?

Ist denn nach SPI Datenblatt alles mit Vorwiderständen versehen? Hier 
gibts einen Thread der auch noch aktiv ist.. die Forumssuche grüsst.. 
bzw könntest du die beiden Atmegas mit einem gegenseitigem Pinout auf 
Reset schlafen legen, rein theoretisch..

Beitrag "Programmer und NRF24L01 am SPI - geht nicht?"

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

der_thorben schrieb:

> wie ist es möglich den Atmega zu flashen, obwohl am Bus weitere IC's
> anhängen?

Ganz einfach: Indem man alle diese Busteilnehmer in den inaktiven 
Zustand zwingt, in dem sie sich hohohmig vom Bus entkoppeln. Einfach 
dadurch, daß man dafür sorgt, daß effektiv keiner ein aktives CS für 
sich sieht. Das zwingt jeden SPI-Slave dazu, den SPI-Bus in Ruhe zu 
lassen.

> Wenn ich 2 Atmegas, die mit SPI verbunden sind, einen flashen will,
> funktioniert es nicht.

Das ist ein ganz anderes Problem, nicht SPI, sondern ISP. Trotz ähnlich 
klingender Akronyme (und häufiger Pin-Einheit) ist das etwas völlig 
anderes.

Aber auch hier kommt es schlicht darauf an, daß nur einer der Controller 
"angesprochen" wird. Das ist allerdings nicht so einfach zu erreichen 
und erfordert in jedem Fall zusätzliche Hardware und eine 
Steuermöglichkeit, über die der zu programmierende Controller selektiert 
werden kann. Der Hardware-Aufwand kann bei entsprechend "kooperativer" 
Programmierung der Controller aber recht gering gehalten werden. Im 
Prinzip muß die Selektion über das Reset-Signal erfolgen. Nur der zu 
programmierende Controller darf das wirklich als Reset kriegen, alle 
anderen müssen das Signal an einem anderen Pin kriegen und zum Anlaß 
nehmen, ihre "SPI-Füße" komplett einziehen.

von Sebastian W. (wangnick)


Lesenswert?

c-hater schrieb:
> Ganz einfach: Indem man alle diese Busteilnehmer in den inaktiven
> Zustand zwingt, in dem sie sich hohohmig vom Bus entkoppeln. Einfach
> dadurch, daß man dafür sorgt, daß effektiv keiner ein aktives CS für
> sich sieht. Das zwingt jeden SPI-Slave dazu, den SPI-Bus in Ruhe zu
> lassen.

Richtig.

Aber Achtung! Eine SD-Karte (ob Micro oder normal) befindet sich nach 
Beginn der Stromzufuhr zunächst im SD-Bus-Modus, und in diesem Modus hat 
die SD-Karte keine CS-Leitung! Bei eingesteckter SD-Karte am SPI-Bus 
wird dadurch mit ziemlicher Wahrscheinlichkeit die ISP-Programmierung 
gestört (und wer weiss, wie die SD-Karte die ISP-Befehle interpretiert).

LG, Sebastian

von Martin S. (led_martin)


Lesenswert?

Also, ich mache das meistens so:
Entweder kommen nur hochohmige Eingaänge anderer Schaltungsteile an die 
ISP-Pins, bei denen durch das Programmier-Gewackel nichts Böses 
passiert. Wenn da aber Ausgänge anderer Komponenten mitspielen (Wie z.B. 
ein anderer AVR) muß man die inaktiv (High-Z) schalten können, 
Schaltsignal ist der Reset, Reset Low -> Externe Logik inaktiv. Notfalls 
hilft da ein 74HC126, wenn die externen Komponenten das nicht selbst 
können. Die Einfach-Lösung mit Jumpern, die man zum Flashen abziehen 
muß, vermeide ich, weil man das, beim Tüfteln, oft vergisst. Man kann 
natürlich die externe Logik auch mit einem Stecker, der in die 
ISP-Buchse gesteckt wird, anschließen, dann vergisst man es garantiert 
nicht, ihn zum Flashen abzuziehen.

Mit freundlichen Grüßen - Martin

von Philipp K. (philipp_k59)


Lesenswert?

Das wäre doch ne Idee.. den Reset des anderen AVRs auf die GND gelegten 
freien 10pol ISP legen, oder des GND des 6pol-ISP mit einer Diode 
dazwischen.

von Stefan F. (Gast)


Lesenswert?

> den Reset des anderen AVRs auf die GND gelegten
> freien 10pol ISP legen

Deutsche Sprache - schwere Sprache.

Falls du damit sagen wolltest, dann man den Reset Pin des anderen 
Mikrocontroller auf GND legen soll, dann ist dies genau der falsche Weg. 
Denn dadurch wird das ISP Interface aktiviert!

Wenn beide Mikrocontroller einen Reset bekommen, aktivieren beide ihren 
ISP Port. Beide würden also (wenn es die gleichen Chips sind) die 
gleiche Firmware erhalten. Wenn es nicht die gleichen Chips sind, wird 
die Kommunikation fehlschlagen (wegen Kurzschluss auf MISO).

von Philipp K. (philipp_k59)


Lesenswert?

Deutsch lesen, schweres Lesen.. meinte ich nicht.

Der nicht "zu programmierende" Atmega hätte Schlafpause durch Dauerreset 
über GND solang der ISP steckt.

Bei dem 10 Pin Connector sind doch programmerseitig 4Pins Gnd?

Beim  6pin kann man 2 dioden über kreuz von den 2 ISP ports gegen GND 
zum jeweiligen Reset schalten damit nur einer Schlafen geht bei 
Versorgung durch einen der ISP ?

von der_thorben (Gast)


Lesenswert?

Was ist, wenn ich es wie im Datenblatt Seite 3 mache, dass ich den isp 
anschluss direkt am Atmega anschließe und anschließend 1k Widerstände in 
Serie  an MISO, MOSI, CLK geschaltet sind. Würde es das Problem lösen?

von der_thorben (Gast)


Lesenswert?


von Philipp K. (philipp_k59)


Lesenswert?

Probier das doch einfach auf dem Steckbrett aus.

Das mit dem Dauerreset war doch nicht ganz richtig, da hab ich den 
Program Halt mit dem ISP Program Mode verwechselt.

von Joachim B. (jar)


Lesenswert?

der_thorben schrieb:
> wie ist es möglich den Atmega zu flashen, obwohl am Bus weitere IC's
> anhängen?

alles was nicht zum flashen am SPI Bus hängt über 470 Ohm bis 1k 
anschliessen

zum flashen direkt an den SPI, durch die R stören die angeschlossenen 
Teilnehmer nicht.

von der_thorben (Gast)


Lesenswert?

OK, mache ich und teile das dann noch mit.

Trotzdem noch eine Frage, was ich auch noch testen werde.


Ich habe gehört, dass wenn weitere Geräte am SPI Bus anhängen, man 
Probleme mit der SD-Karte bekommt und man dann Software SPI für die 
anderen Geräte verwenden soll. Stimmt das?

von Philipp K. (philipp_k59)


Lesenswert?

Noch eine interessante Beschreibung aus avr042_revc.pdf "Connecting SPI 
Lines":

Multiple AVRs in a single application can share the same ISP interface 
to make it possible to program all of the devices through a minimal 
interface. However, the AVR devices will all respond to the ISP 
instructions if special design considerations are not made. If it is 
desired to have only one ISP interface on the target board, the ISP 
programming can be designed so that only one of the AVR devices is 
provided with a SPI clock at a time. All other SPI lines can then be 
shared. In this way all AVRs can be located “behind” the same protection 
resistors, since they all are held in RESET while the ISP reset line is 
activated. The gating of the ISP clock can be accomplished e.g. using 
jumpers. Alternatively, a solution is to have multiple ISP interfaces, 
one for each device, all protected as shown in Figure 4-2 (Ist die 
Grafik mit den Vorwiderständen)

EDIT: Demnach kannste einfach mit den Vorwiderständen an jedem AVR ein 
6Pin Header machen und brauchst keine Extra spielereien.

: Bearbeitet durch User
von der_thorben (Gast)


Lesenswert?

cool, cool, danke phillip. ich probiers trotzdem und meld mich :D

von der_thorben (Gast)


Lesenswert?

habs getestet und klappt, wenn die 1k widerstände in reihe sind

von Stefan F. (Gast)


Lesenswert?

> Ich habe gehört, dass wenn weitere Geräte am SPI Bus anhängen,
> man Probleme mit der SD-Karte bekommt und man dann Software
> SPI für die anderen Geräte verwenden soll. Stimmt das?

Das hängt von den anderen Komponenten und vor allem von der SD Karte ab. 
Ich hatte dieses Problem gleich bei meiner ersten Schaltung mit SD 
Karte.

In meinem Fall habe ich die SD Karte per Soft-SPI angesteuert und die 
A/D Wandler über richtiges SPI, weil die SD Karte beliebig schnell 
angesteuert werden durfte (auch mit unregelmäßigem Takt), die A/D 
Wandler jedoch eine bestimmte Taktfrequenz benötigten.

von Sebastian W. (wangnick)


Lesenswert?

Stefan Us schrieb:
>> Ich habe gehört, dass wenn weitere Geräte am SPI Bus anhängen,
>> man Probleme mit der SD-Karte bekommt und man dann Software
>> SPI für die anderen Geräte verwenden soll. Stimmt das?
>
> Das hängt von den anderen Komponenten und vor allem von der SD Karte ab.
> Ich hatte dieses Problem gleich bei meiner ersten Schaltung mit SD
> Karte.

Ja und nein. Noch einmal: Alle SD-Karten müssen nach Beginn der 
Stromzufuhr im SD-Bus-Modus sein, bei dem sich die Pads der SD-Karte 
nicht SPI-konform verhalten, weil die SD-Karten-Spezifikation das so 
vorschreibt: Siehe https://www.sdcard.org/downloads/pls/part1_410.pdf, 
3.7.1: SD Bus Pin Assignments und Figure 4-1: SD Memory Card State 
Diagram auf Seite 26.

Und wenn eine SD-Karte im SD-Bus-Modus eine ISP-Programmiersequenz 
mithört, ist die Wahrscheinlichkeit recht hoch, das sie irgendeinen Teil 
einer solchen Sequenz als SD-Bus-Befehl dekodiert und entsprechend 
reagiert, und dabei die ISP-Programmiersequenz stört.

LG, Sebastian

: Bearbeitet durch User
von der_thorben (Gast)


Lesenswert?

ich wollte eine 2gbyte karte verwenden.

von Joachim B. (jar)


Lesenswert?

Joachim B. schrieb:
> alles was nicht zum flashen am SPI Bus hängt über 470 Ohm bis 1k
> anschliessen

der_thorben schrieb:
> habs getestet und klappt, wenn die 1k widerstände in reihe sind

danke für die Rückmeldung, ich habe immer 470 Ohm genommen und damit 
keinerlei Probleme, schön das es auch mit 1k klappt.

der_thorben schrieb:
> Ich habe gehört, dass wenn weitere Geräte am SPI Bus anhängen, man
> Probleme mit der SD-Karte bekommt

da fällt mir nur ein Analogschalter 74HC, CD oder HEF 4053 der mit einem 
pulldown auf ISP gehalten wird, wenn der µC einen Port hochsetzt werden 
erst andere ISP Nutzer angeschaltet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.