Moin Leute,
ich habe folgendes Problem:
Ich versuche einen ADS1298R per MSP430 (Master) über SPI auszulesen.
Allerdings bringe ich die beiden nicht dazu, miteinander zu
kommunizieren.
Scheinbar habe ich einen "Kurzschluss" zwischen MOSI und SOMI:
1) Auf beiden erscheint am Oszi das Gesendete von Master sowie Slave.
2) Der MSP430 schafft nur ca. 0,8 High-Pegel, der ADS1298R 2V.
Setze ich allerdings das PxDS-Register, drehen sich die Maximalpegel
genau um.
Was habe ich da falsch gemacht?
1) Mechanisch, daher im ausgeschalteten Zustand, habe ich keinen
Kurzschluss.
2) Massen sind miteinander verbunden
3) die entsprechenden PxSEL sind auf 1
Müssen da trotzdem die anderen Register noch gesetzt sein?
Ziehst du auch die Chip Select Leitung des ADS1298R auf Masse, wenn du
kommunizierst? Hört sich nämlich stark nach einer auf beiden Seiten
hochohmig geschalteten MISO-Leitung an, auf welche MOSI einkoppelt.
Gruß Oliver
Japp. CS wird durch den MSP430 auf Masse gezogen.
Meinst du, ich habe beim entsprechenden GPIO-Pin eventuell etwas falsch
konfiguriert?
Ich bin noch absoluter Neuling in Sachen MSP430 und SPI.
Gruß
Hannes
Edit:
Ich habe den nun mal per Jumper Wire auf Masse gezogen, ändert nichts.
Was aber interessant ist:
Wenn ich CS auf Masse habe, bekomme ich einen Puls im Takt des Blinkens
der LED des ADS1298R-Dev-Boards auf dem SPI.
Das sollte vermutlich so nicht sein?
So.
Ich habe mir das noch einmal genauer angeschaut, ohne das
ADS1298R-Board.
Es sieht (nicht nur) so aus, dass das MSP430-Board auf SOMI und MOSI
sendet.
Ist da bei meiner obigen SPI-Initialisierung etwas falsch gelaufen?
Gruß
Hannes
Oh Mist.
Ich sehe gerade dass ich auf dem MSP430-Board einen Kurschluss zwischen
den Pins habe.
Das war das einzige von den drei Teilen, das ich nicht nachgemessen
hatte, weil ich es für funktionierend hielt.
Hallo,
ist der Thread noch aktiv?
Habe einähnliches vorhaben:
Kommuniziere zwischen MSP430F5437A <-> AT45DB161D ( 2MB Flash)
Was ich rausschicke kann ich mit dem Oszi verifizieren, das sollte
stimmen, nur weiss ich nich wieso der FLASH anscheinend nie etwas
empfängt. Hast du deinen Empfangs und Sendecode eventuell da, fall du
ihn posten magst, das würde mir vielleicht helfen. Ich hab die leichte
Vorahnung, dass SPI nur empfängt, wenn ich gleichzeitig etwas sende.
Mein Senden geht ohne Probleme.
Empfangen wollte ich in etwa so, ohne Interrupts zu benutzen:
while(byteCtr)
{
while (!(UCB1IFG & UCRXIFG)); //Empfangspuffer bereit?
*RX_field = UCB1RXBUF; //Steuerungsdaten senden
RX_field++; //Pointer auf daten incementieren
byteCtr--; //Bytezähler dekrementieren
}
Aber ich bleibe scho immer direkt bei der Abfrage des Empfangpuffers
hängen. Entweder weigert sich der Atmel Flash etwas zu senden, weil mein
Befehl an ihn doch nicht stimmig ist, oder ich empfange einfach nicht,
ich verstehs noch nicht so ganz.Vielen Dank und viele Grüße.
Dankeschön für den Tip.
In der Tat sende ich nicht mehr ktiv raus, das heisst also ich brauche
zum Empfangen ebenfalls wieder dummy writes , damit der Takt weiterläuft
und ich gleichzeitig etwas empfangen kann?
seb schrieb:> ich brauche> zum Empfangen ebenfalls wieder dummy writes
Genau, bei SPI brauchst du für die Kommunikation immer einen
Datentransfer in beide Richtung. Heißt wenn du 8Bit empfangen willst
musst du 8Bit senden. Was du als Dummy sendest ist prinzipell egal, ich
habe immer ein FF gesendet damit ist es auch auf dem Oszi besser
kontrollieren kann.
Ok, habe das nun getestet und bekomme vom Flash Baustein immer 1 zurück
für alle Speicherstellen, bzw die die ich bisher getestet habe.
Das ist natürlich erstmal korrekt, weil Flash ja immer 1 ist, wenn er
erased oder noch nie beschrieben wurde, allerdings dachte ich ich hätte
was rübergeschoben 0x05 um genau zu sein...
Also neuer Ansatz ich glaube meien Empfangsroutine funktioniert aber
mein Senden klappt irgendwie nicht so korrekt.
Beim Atmel Flash muss man zuerst Daten in einen Buffer schreiben und
anschließend mit einem neuen Befehl den Buffer ins main memory
übertragen, hat da jemand Erfahrung, gibts da stolperstellen? Mein Code
funktioniert auf jedenfal noch nicht.
MErci
Update:
Das Senden und Empfangen klappt bishin zum Buffer, den kann ich
beschreiben und wieder auslesen und ich lese wirklich das aus was ich
renigeschrieben habe.
Allerdings funktioniert das speichern vom Buffer in den Flash nicht
wirklich, zumindest habe ich das gefühl, ich lese im Flash an allen
geprüften Stellen nur einsen ( 1 oder high ) aus, niemals einen
irgendwie geänderten Wert.
Das ist komplett komisch, weil Atmel ja eindeutig seine OpCodes im
Datasheet nennt, aber irgendwie einfach nichts passiert???
so gelöst, Fehelr wie sooft 20cm vor dem Bildschirm.
Hatte irgendwie nen ChipSelect falsch eingestellt beim Senden enies
Befehls, jetzt scheints alle zu gehen.