Forum: Mikrocontroller und Digitale Elektronik AVR ISP Protokoll, gibt nur 255 zurück


von Basti (Gast)


Lesenswert?

Hi,

ich versuche einen tiny45 per avr zu flashen, und scheitere bereits an 
der ersten sequenz ;-)

Vielleicht hats ja jemand schonmal gemacht

Die vier ausgegebenen bytes sind immer 0xff, sollten jedoch die 
antwortsequenz sein. habe bereits mit mehreren optionen "gespielt", 
phase, polarity etc.

Hat jemand ne idee??
1
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = yes , Polarity = low , Phase = 0 , Clockrate = 128 , Noss = 0
2
Spiinit
3
4
chip_reset=1
5
wait 5
6
7
chip_reset=0
8
waitms 20
9
10
? "Start sending..."
11
12
13
b(1)=&hAC
14
b(2)=&H53
15
b(3)=&h00
16
b(4)=&H00
17
spiout B(1),4
18
'waitms 1
19
20
spiin b(11),4
21
? b(11)
22
? b(12)
23
? b(13)
24
? b(14)
25
waitms 10
26
chip_reset=1

von spess53 (Gast)


Lesenswert?

Hi

>b(1)=&hAC
>b(2)=&H53
>b(3)=&h00
>b(4)=&H00
>spiout B(1),4
>'waitms 1

>spiin b(11),4
>? b(11)
>? b(12)
>? b(13)
>? b(14)

Was soll da passieren?

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Ich denke, du musst spimove benutzen.
Denn das ISP Interface antwortet ja schon, während spiout bereits die 
nächsten Bytes raustaktet.

Dieses spiout bzw. spiin ist sowieso missverständlich.
SPI arbeitet grundsätzlich so, dass es sich dabei um den Austausch von 
Bytes handelt. Die Denkweise 'erst sende ich was' dann 'sendet der 
Partner was' ist nicht besonders zielführend.

von Elektroniker (Gast)


Lesenswert?

ISP ist ein 4-Bit Anschluss, dort wirst du mit dem besten Glück nicht 
mehr als 255 haben...

lg

lern programmieren

von Karl H. (kbuchegg)


Lesenswert?

Elektroniker schrieb:
> ISP ist ein 4-Bit Anschluss, dort wirst du mit dem besten Glück nicht
> mehr als 255 haben...
>
> lg
>
> lern programmieren


halt dich bitte raus, wenn du keine Ahnung hast.

von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

> SPI arbeitet grundsätzlich so, dass es sich dabei um den Austausch von
> Bytes handelt. Die Denkweise 'erst sende ich was' dann 'sendet der
> Partner was' ist nicht besonders zielführend.


D.h. das ist so zu verstehen:
Während dein SPI 1 Byte raustaktet, wird gleichzeitig in der 
Gegenrichtung ebenfalls 1 Byte übertragen.

Tiny45 Datenblatt
1
3. The serial programming instructions will not work if the communication
2
   is out of synchronization. When in sync. the second byte (0x53),
3
   will echo back when issuing the third byte of the Programming
4
   Enable instruction. Whether the echo is correct or not, all four
5
   bytes of the instruction must be transmitted. If the
6
   0x53 did not echo back, give RESET a positive pulse and issue
7
   a new Programming Enable command.

das ist also so zu verstehen
1
   dein µC                        Tiny45
2
                0xAC
3
        ------------------------>
4
        <-----------------------
5
                 ??                         welcher Wert da rückübertragen
6
                                            wird, ist nicht dokumentiert.
7
                                            Ich würde mal 0x00 schätzen
8
9
                0x53
10
        ------------------------>
11
        <-----------------------
12
                 ??                         ditto
13
14
                0x00
15
        ------------------------>
16
        <-----------------------
17
                0x53                        dokumentierte Antwort, dass
18
                                            das Kommando verstanden wurde
19
20
                0x00
21
        ------------------------>
22
        <-----------------------
23
                 ??                        wieder nicht dokumentiert, was
24
                                           da kommen müsste

genau diese Austauschoperation ist aber die Domäne von spimove. spiin 
versucht ledigliche vom Partner zu lesen, in dem es ihm weitere 0x00 
Bytes rübertaktet. Da ist aber die Antwort vom Tiny schon lange durch 
(und wurde rückübertragen, als der spiout die bytes rausgetaktet hat. 
Nur das sich spiout nicht darum kümmert, was es im Gegenzug für jedes 
rausgetaktete Byte bekommen hat)

von basti (Gast)


Lesenswert?

Aha!

Danke!

Ich werd es morgen mal probieren....

Wenns spimove ned kann schreib ich die routine eben selber das sollte 
kein Problem darstellen...

Wenn ichs recht in Erinnerung habe hatte der logic analyzer dauerhigh 
auf dem input pin

Aber ich guck nochmal. Und bzw meine Programme sehen immer so laienhaft 
aus bis das funktioniert. Danach kann man das noch ordentlich machen. 
Aber was nutzt mir ein tolles profiprogramm wenn ich noch nicht 
verstanden habe was es machen soll.

von Bülent C. (mirki)


Lesenswert?


von spess53 (Gast)


Lesenswert?

Hi

>Vielleicht hilft's:

Wobei soll das helfen?

Mfg Spess

von Basti (Gast)


Angehängte Dateien:

Lesenswert?

Danke,spess.
Das hätte ich nicht treffender formulieren können.

Also:

Nachdem ich mosi und miso vertauscht habe geht es ohne probleme
vorher war auch auf dem logic analyzer keine antwort zu erkennen. 
(logisch)

Im Bild: Logic analyzer und eingelesene werte (antwort)


Mal sehen wies weiter geht ;-)

von spiMöchtegern (Gast)


Lesenswert?

Jetz hab ich mir den Wolf abgesucht nach einer Header- oder
C-Datei wo spimove zu finden wäre ..... nix ....

.... da fällt es mir wie Schuppen von den Haaren ....
das ist ja Bascom .......   oh mein Gott ....

Puhhhhh, da muss ich mir wohl in einer dreimonatigen Aktion
das SPI Move selber in C schreiben ;-)

von Paul Baumann (Gast)


Lesenswert?

spiMöchtegern schrieb:
> Puhhhhh, da muss ich mir wohl in einer dreimonatigen Aktion
> das SPI Move selber in C schreiben ;-)

Warum? Nimm doch auch Bascom.

MfG Paul

von spiMöchtegern (Gast)


Lesenswert?

Paul Baumann schrieb:
> Warum? Nimm doch auch Bascom.

Niieeeee wieder sowas. Das war zu Apple-Gründerzeiten.

spiMöchtegern schrieb:
> das SPI Move selber in C schreiben ;-)
Man beachte auch --------------------^^^^

von Paul Baumann (Gast)


Lesenswert?

spiMöchtegern schrieb:
>> das SPI Move selber in C schreiben ;-)
> Man beachte auch --------------------^^^^

Habe ich beachtet, weiß aber damit Nichts anzufangen. Ich nehme an, daß 
es
in C den von Dir gesuchten Befehle bereits gibt und Du Dich freust, ihn 
nicht selbst "herstellen" zu müssen.

MfG Paul

von spiMöchtegern (Gast)


Lesenswert?

Paul Baumann schrieb:
> Ich nehme an, daß
> es in C den von Dir gesuchten Befehle bereits gibt

Nein, das ist so hochkomplexer Code, de wird nicht
einfach mal öffentlich im Public Domain irgendwo hingestellt.

von Basti (Gast)


Lesenswert?

Ich liebe diese ewige bascom/c diskussion.

Ich finde die inkompetenz klasse. Bascom ist ein basic compiler. er 
erzeugt maschinencode.

Das kann man nicht mit basics auf vintage hardware vergleichen, da lief 
auf dem gerät ein interpreter, der quasi zur laufzeit den basic code 
übersetzt.

Wenn ich lese "apple 2" oder "c64" weiss ich das da jemand nicht 
bescheid weis oder einfach nur trollen will.

ich hatte schon des öfteren mit bascom effizienteren code erstellt als 
mein kollege mit seinem geliebten C. Hat er halt studiert. jeder wie er 
will. (in diesem fall bin ich mit 16mhz hingekommen, der C code 
benötigte mindestens 20mhz um die Daten einlesen zu können) - klar es 
gibt auch bei den C programmern nixkönner.

However - die diskussion tut nix zum thema. sondern verschwendet nur 
zeit.

von spiMöchtegern (Gast)


Lesenswert?

Basti schrieb:
> Ich liebe diese ewige bascom/c diskussion.

Falls du dir auf den Schlips getreten fühlst - ich wars nicht.

Ich habe nur gesagt:

spiMöchtegern schrieb:
> Niieeeee wieder sowas. Das war zu Apple-Gründerzeiten.

Darin steht weder ein Angriff auf dich noch eine Beleidigung.
Nur meine persönliche Meinung.

Wenn du irgendetwas Ungeschriebenes zwischen den Zeilen liest
dann ist das allein dein Problem.

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.