mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage: Warum verbraucht es sooooo viel Zeit, per SPI ein Register von FlexRay Controller zu lesen?


Autor: Tom Tom (jerry)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Everyone,

Jetzt bin ich mit FlexRay Hardware und Software Entwicklung beschäftigt.

Hardware:
In der Entwicklung ist MB88121B als stand-alone FlexRay Controller über 
SPI mit einem 32-bit uC (Frequenz: 50MHz) verbunden.

Mein Problem:
Zufällig habe ich gemerkt, es verbraucht unglaublich lange Zeit, wenn 
der uC ein Register von MB88121B per SPI liest.

Diese Zeit habe ich schon gemessen.
Der uC braucht ungefähr 2 bis 3ms, um 32 bit Daten (1 word read), z.B. 
Register CC Status Vector Register (CCSV) zu lesen.
Die Frequenz von SPI habe ich auf 10 MHz eingestellt. Eigentlich liest 
der uC für ein 32-bit Lesen  wegen Overhead insgesamt 80 bits.
Deshalb soll die Zeit theoretisch 80bit /10Mbps = 8 us betragen.
Warum ist der Messungswert deutlich grösser als der theoretischer 
Wert??? (3ms >> 8us)


Weiss vielleicht jemand, woran das Problem liegt?

Vielen Dank im Voraus!

Tom Jerry

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie hast du diese "2 bis 3ms" gemessen?

Autor: Tom Tom (jerry)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:)
Ich habe einen Timer von dem uC eingesetzt.
Der Code ist ähnlich so:

int j=0
StartParallelTimer(10ms);
while (Timer is not expired)
{
     Read32bit(CCSV);
     Print(j++);
}

Bei mir ist j maximal nur 4.
=> Die Zeit von einem Lesen > 10ms/4

Ist es in Ordnung?

Autor: Stefan Kunz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Tom

An sich ja, wobei es nun drauf ankommt, was die funktion print macht.
Wenn du da ein printf drin hast sind die 2-3 ms gut zu verstehen.
Denn printf() ist einfach ein Zeitfresser.

MfG
Stefan

Autor: Tom Tom (jerry)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Kunz schrieb:
> @Tom
>
> An sich ja, wobei es nun drauf ankommt, was die funktion print macht.
> Wenn du da ein printf drin hast sind die 2-3 ms gut zu verstehen.
> Denn printf() ist einfach ein Zeitfresser.
>
> MfG
> Stefan

Danke Dir Stefen!


Gemäß deinem Tipp habe ich den Code so geändert und noch mal getestet:

int j=0;
StartParallelTimer(10ms);
while (Timer is not expired)
{
     Read32bit(CCSV);
     j++;
}
Print(j);

Jetzt ist j=9.
Es weist darauf hin, dass mein Print() wirklich etwas Zeit gefressen 
hat!

Aber die verbrauchte Zeit ist mindestens größer als 1 ms (10ms/9)!
Hast du noch eine Ahnung?

Gruss
Tom

Autor: volltroll.de (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs doch mal mit IO-Togglen, und das mitm oszi messen.

Autor: Stefan Kunz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um gucken zu können warum es immernoch eine ms dauert müßtest du wohl 
den Sourcecode von Read32bit() posten, bzw erklären was die Funktion 
macht.
Eventuell mit dem Ozi mal den SPI-Buss abhorchen, insbesondere CS und 
Clock.
Aber nach dem bisschen Code zu urteilen bleibt der µC sehr lange in der 
Read32bit() Funktion.
Dort könntest du ein paar Bits toggeln lassen(wie mein Vorredner schon 
erwähnte) und so dich langsam an die Stelle Code ranarbeiten, die die 
meiste Zeit verbraucht und dort dann nach Ursachen forschen.

MfG
Stefan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.