SPI Raspberry

Gast #5722256
Lesenswert?

Hallo zusammen,

ich benutze einen Raspberry Pi Zero W und einen ATmeag32L nun würde ich 
gerne den Mikrocontroller mithilfe der SPI Schnittstelle des Raspberry 
programmieren.
Ich habe mich nach folgender Anleitung gehalten:
http://www.holgerschurig.de/de/raspi-atmega/

Wobei ich anstatt eines 16Mhz Quarz einen 8Mhz Quarz verwende. Sobald 
ich die SPI Schnittstelle am Raspberry aktiviere, stürzt er ab, es 
scheint, als hätte ich einen Kurzschluss.

den ATMega betreibe ich mit 3,3V


Hardware habe ich schon 20X kontrolliert.

hat vielleicht noch jemand eine Idee, an was es liegen könnte?
Gast #5722290
Lesenswert?

Thomas schrieb:
> warum ist dieser so wichtig?

Weil er für Teile des Mikrocontrollers das bezugspotential festlegt. 
Alle GND Anschlüsse müssen miteinander verbunden werden.

Und wie gesagt darfst du AVCC nicht unbeschaltet lassen. Das dann 
passiert ist nämlich nicht spezifiziert, also kann dann alles Mögliche 
komische passieren, bis hin zur Beschädigung des Chips.
#5722330
Lesenswert?

Thomas schrieb:
> Wobei ich anstatt eines 16Mhz Quarz einen 8Mhz Quarz verwende.

wie kommst du auf 16MHz?

ist die Fuse schon programmiert?
ist schon ein bootloader drauf?

Absturz vom PI kann ja nur an der Verschaltung oder der Programmierung 
liegen.

default werden die ja mit 8Mhz intern geliefert und clk/div8 gesetzt 
also 1MHz.

genaueres sagt dir das Datenblatt.

Stefanus F. schrieb:
> Immer noch die Taktfrequenz.

keiner weiss was der ATmeag32L schon in den Fuse gesetzt hat oder im 
Bootloader und oder Flash als Programm steht.

Eines ist klar, der Atmel ist in den Ports stärker der kann den PI in 
die Knie zwingen.
Gast #5722535
Lesenswert?

Hallo zusammen,

das ganze hat nun doch noch geklappt.
Ich habe einen anderen Controller genommen. Vielleicht hatte dieser ein 
Problem...

Das Programm kann ich leider immer noch nicht übertragen, da ich keine 
Signature bekomme, siehe Fehlermeldung.

muss ich da in der /etc/avrdude.config noch was eintragen?


pi@raspberrypi:~/Desktop/Test/Release $ sudo avrdude -c linuxspi -p m32 
-P /dev/spidev0.0 -e -U flash:w:Test.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.00s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 
0.00s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 
0.00s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.


avrdude done.  Thank you.
Gast #5722590
Lesenswert?

Anscheinend funktioniert die Kommunikation nicht.

Passen die Fuses im AVR zu seiner Beschaltung (Taktquelle)?

Du kannst LED's anschließen, um zu sehen, ob sich überhaupt etwas tut:
1
            1k   
2
Reset o----[===]---|<|---o VCC
3

4
MISO  o----[===]---|>|---| GND
5

6
MOSI  o----[===]---|>|---| GND
7

8
SCK   o----[===]---|>|---| GND
Gast #5723374
Lesenswert?

Hallo, ich bin´s nochmals :-)

Bin nun einen Schritt weiter gekommen. Das Problem lag daran, dass die 
Ausgänge vom Mikrocontroller beim Syystemstart auf "1" wechselten. Der 
Raspberry hatte damit natürlich ein Problem und ging in die Knie.

Nachdem ich dieses Problem behoben hatte, fuhr mein Raspberry auch hoch.

Wenn ich den SPI teste, dann kommt folgende Meldung:

pi@raspberrypi:~ $ sudo avrdude -c linuxspi -p m32 -P /dev/spidev0.0

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.00s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 
0.00s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 
0.00s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.


avrdude done.  Thank you.


Leider bekomme ich immer noch keine Signature. Muss ich da irgendwo noch 
was einstellen?

bitte um kurze Rückantwort

vielen Dank
Gast #5723661
Lesenswert?

ok, das schein zu funktionieren:

thomas@thomas-Latitude-E5520:~/workspace/Test/Release$ sudo avrdude -c 
avrispmkII -p m32 -P usb -e -U flash:w:Test.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.01s

avrdude: Device signature = 0x1e9502
avrdude: erasing chip
avrdude: reading input file "Test.hex"
avrdude: input file Test.hex auto detected as Intel Hex
avrdude: writing flash (122 bytes):

Writing | ################################################## | 100% 
0.04s

avrdude: 122 bytes of flash written
avrdude: verifying flash memory against Test.hex:
avrdude: load data flash data from input file Test.hex:
avrdude: input file Test.hex auto detected as Intel Hex
avrdude: input file Test.hex contains 122 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 
0.03s

avrdude: verifying ...
avrdude: 122 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

oder sehe ich das falsch?
also kann ich mir mal sicher sein, dass der Mikrocontroller funktioniert

kann mir jemand sagen, wie ich die SPI Schnittstelle am Raspberry teste?
#5723664
Lesenswert?

Thomas schrieb:
> dann müsste doch die SPI Schnittstelle am Mikrocontroller
> funktionieren:
> https://www.microchip.com/developmenttools/ProductDetails/atavrisp2
>
> oder nicht?

im Prinzip ja, aber wenn du Fehler machst und dein Programm die Ports 
der SPI als SPI ausser Betrieb nimmst dann geht danach nichts mehr.

Der Reset kann ja dauerhaft als Ausgang geschaltet werden, dann kommt 
keiner mehr in den Programmiermodus.

Desgleichen wenn die Hardware durch falsches Design die Ports festhält 
oder den Port abschiesst.
Gast #5723677
Lesenswert?

als nächstes wollte ich die Fuses auslesen:

sudo avrdude -c avrispmkII -p m32 -U lfuse:r:-:b

leider kommt nun folgende Meldung:
avrdude: stk500v2_ReceiveMessage(): timeout

Ich muss gestehen, dass ich das noch nie gmeacht habe. Funktioniert das 
denn so?
Gast #5723698
Lesenswert?

Das setzen der Fusebits funktioniert irgendwie auch nicht:

sudo avrdude -c avrpmkII -p m32 -U lfuse:w:0xe1:m -U hfuse:w:0x99:m
avrdude: stk500v2_ReceiveMessage(): timeout

kann es sein, damit meine Fuses verstellt sind und ich somit keinen 
Zugriff auf meinen Mikrocontroller habe?

aber warum kann ich dann das Programm übertragen?
Gast #5723829
Lesenswert?

Ich habe eine Platine, mit einem ATMega32 außerdem ist auf dieser 
Platine noch ein Raspberr Pi Zero w installiert. das ganze hatte ich 
schoneinmal am laufen. HAt ohne Probleme funktioniert. Danach ist meine 
Platine gekommen, habe dann alles gelötet, nehme nun die Funktion in 
Betrieb....

zwischenzeitlich habe ich dann noch ein update und upgrade durchgeführt 
und natürlich ein halbes Jahr lang nichts mehr gemacht. Naja, leider 
funktioniert es nicht mehr. Finde das schon ne praktische sache, wenn 
man den Controller direkt programmieren kann über eine Kommandozeile...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren