Gast
#1461259
Hallo zusammen! Die Suche hat leider nicht direkt was Passendes ausgespuckt ...wahrscheinlich ist mein Problem einfach zu trivial. Ich versuche momentan mit einem AVR32 UC3A1 via SPI eine MMC zum Laufen zu kriegen, bislang leider vergeblich. Die Situation ist folgende: Der UC3A wird momentan über ein STK600 betrieben. Der MMC-Slot mit der Karte ist über ein Flachbandkabel mit dem entsprechenden Port auf dem Board verbunden. Die Leitungen kann ich wahlweise mit den internen Pullups des µC oder über eine Lochrasterkarte mit Pullups beschalten. Die Spannungsversorgung erfolgt über das STK mit stabilen 3,28V= (wahlweise auch ein Netzteil mit passender Vcc einsetzbar). Eine Pegel- wandlung ist wegen der 3,3V Betriebsspannung und max. Ausgangspegel des UC3A nicht notwendig. Das SPI des µC als solches funktioniert auch, Befehle über MOSI werden einwandfrei gesendet, das Clocksignal geht auch sauber über die Leitung. Nur bleibt die MMC auf MISO durchgängig auf High. Was ich auch festgestellt habe, ist, das auch das CS Signal durchgängig auf High-Pegel bleibt, was schonmal Mist ist. Entweder ist da jetzt ein fundamentaler Fehler in der simplen Beschaltung, oder etwas stimmt am Programmcode nicht. Für den Code habe ich als Vorlage das vom Framework gelieferte Beispiel benutzt. Verwendet werden soll SPI0 und NPCS0 als CS-Leitung. Zum De-/Selektieren der CS-Leitung wird das im Beispiel über die Methode selectChip und unselectChip geregelt. Die Methoden schalten die Verwendung des CS im Mode Register an bzw. aus. Nun sollte man meinen, das dies zumindest einen Einfluss auf den Pegel am Ausgangspin des µC haben sollte, aber selbst das An-/Ausschalten im Schleifendurchlauf hat anscheinend gar keinen Effekt. Das pcs-Register direkt zu setzen hab ich auch schon versucht, leider ohne Änderung des Problems. So sieht das Codestück aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
Die internal_init() Funktion ist die aus dem Framework und arbeitet im Prinzip lediglich den Init-Prozess der Karte ab. Vor jedem Senden eines Befehls wird selectChip und nach dem Senden wieder unselectChip ausgeführt ...nur das sich halt scheinbar nichts tut. Vielleicht kann mir ja jemand von Euch weiterhelfen. schonmal danke, Uwe