Forum: Mikrocontroller und Digitale Elektronik Suche ein SPI-Analyser


von Patrick B. (p51d)


Lesenswert?

Hallo miteinander

Ich habe eine keine Frage:
Kennt jemand von euch einen SPI-Analyser?
Daten werden von einem ARM über SPI versendet. Diese müssen möglichst 
schnell zum PC, da alle 1ms 128Bytes über SPI geschrieben werden, und 
das ca 60s lang. Puffern muss er es also nicht.

Gibts solche Analyser oder muss man sich hier etwas selber 
zusammenbasteln?
Ach ja, die Daten sollen auf dem PC weiter verarbeitbar sein (eigene 
GUI).

Besten Dank
MFG
Patrick

von Lukas K. (carrotindustries)


Lesenswert?

Patrick B. schrieb:
> Daten werden von einem ARM über SPI versendet. Diese müssen möglichst
> schnell zum PC, da alle 1ms 128Bytes über SPI geschrieben werden
Das ist ja Schneckentempo...

Patrick B. schrieb:
> Gibts solche Analyser oder muss man sich hier etwas selber
> zusammenbasteln?
Viele dieser neuen USB-LAs haben einen SPI-Decoder in der Software 
eingebaut, so z.B. der saleae logic
Außerdem: http://dangerousprototypes.com/docs/Features_overview

von steffen (Gast)


Lesenswert?

ich hab hiermit: http://www.ikalogic.com/scanalogic2/
gute Erfahrungen gemacht.
Wobei ich den Live-Modus nie verwendet hatte.. hab immer auf ein Event 
getriggert

von Patrick B. (p51d)


Lesenswert?

Lukas K. schrieb:
> Patrick B. schrieb:
>
>> Daten werden von einem ARM über SPI versendet. Diese müssen möglichst
>
>> schnell zum PC, da alle 1ms 128Bytes über SPI geschrieben werden
>
> Das ist ja Schneckentempo...

Ja, ich weiss, dass dies nicht sehr schnell ist.

Das USB-Gerät müsste ein SPI-Slave simulieren und dann die Daten wie 
gesagt an den PC senden. Diese Daten müssten weiter verarbeitbar sein 
(z.B. aus den 8Bit Packeten 32Bit Variablen machen und dann sortiert in 
ein Excel schreiben. Dies ist nicht das Problem, man müsste einfach an 
die Daten kommen über exportfunktion oder so ähnlich. Dann einfach einen 
Converter...)

von Lukas K. (carrotindustries)


Lesenswert?


von Joerg L. (Firma: 100nF 0603 X7R) (joergl)


Lesenswert?

Diverse Geräte der Firma Totalphase können SPI-Spy.
Sind aber nicht wirklich billig...

Gruß,
Jörg

von Patrick B. (p51d)


Lesenswert?

Lukas K. schrieb:
> Genau das kann der bus pirate

Mhm, hab ich jetzt was falsch verstanden, oder nimmt der Bus Pirate im 
binary mode nur Daten entgegen, wenn er auch welche sendet? Dies wäre 
dann sehr ungünstig, da ich nur ein Empfänger brauche.

von Carsten S. (dg3ycs)


Lesenswert?

Hi,

Lukas K. schrieb:
> Patrick B. schrieb:
>> Daten werden von einem ARM über SPI versendet. Diese müssen möglichst
>> schnell zum PC, da alle 1ms 128Bytes über SPI geschrieben werden
> Das ist ja Schneckentempo...

Also Schneckentempo... KANN SEIN, MUSS aber nicht sein...
Es werden einmal pro ms 128Byte übertragen. Aber das muss ja nicht 
heißen das die GEschwindigkeit auch tatsächlich bei 128kb/s liegt.

Wenn du eines USB FullSpeed Anwendung hast wird es durchaus ähnlich 
sein,
Das USB Device bekommt einmal pro ms seinen Aufruf zum Datensenden, 
bläst  mit maximaler Geschwindigkeit seine Pakete über den Bus, dann ist 
das nächste Device dran. Möglichst ALLE Devices am BUS wollen aber 
einmal pro ms Aufgerufen sein.

Ich habe hier eine USB FullSpeed Anwendung die überträgt sogar nur 
64Byte alle 1ms. Allerdings laufen die Datenpakete selber mit 12Mb/s, 
also sehr lange Zeiten dazwischen wo dieses Device einfach nichts macht.

Das muss man unterscheiden. Ersterer Fall, also 128kb/s als tatsächliche 
Datenrate könnte man noch ganz bequem mit einem eigenen Test µC als 
"Sniffer" der die Daten selbst an den PC sendet (USB-CDC) auf dem ein 
TerminalProgramm läuft mitlesen.
In weniger als einer Stunde hat man das so am laufen.

Der letztere Fall wird für alle reinen USB basierenden echtzeit Sniffer 
die nur davon leben das die Daten in echtzeit über die USB Schnittstellt 
abtransportiert werden (wie Saleae oder USBee) eine echte 
Bewährungsprobe.

Evtl kann der TE dazu genaueres sagen wie groß die Baudrate nun 
tatsächlich ist!
>
> Patrick B. schrieb:
>> Gibts solche Analyser oder muss man sich hier etwas selber
>> zusammenbasteln?
> Viele dieser neuen USB-LAs haben einen SPI-Decoder in der Software
> eingebaut, so z.B. der saleae logic
> Außerdem: http://dangerousprototypes.com/docs/Features_overview

Ja, wie schon geschrieben gibt es massig solcher Analyzer. Entweder als 
reine Protokollanalyzer mit 2 - 4 Eingängen die dann die gängigen 
Seriellen Modi beherschen oder aber als "echte" Logikanalyzer mit 8 bis 
teilweise deutlich über 32 Kanälen die noch deutlich mehr können.

Von diesen gibt es dann wieder zwei Familien, einmal die USB basierenden 
"Einfachst-LA" die selber in der Hardware nichts anderes machen als die 
Daten zu sampeln und sofort jedes Datenpaket an den PC übertragen. Die 
maximale Geschwindigkeit ist hier dramatisch von der "tatsächlich 
verfügbaren" USB geschwindigkeit abhängig. Der Speicher ist aber nur 
durch die Festplattengröße begrenzt.

Oder aber die reinen Hardware Sampler die einen Teil der 
Datenverarbeitung direkt im Gerät erledigen und auch dort erst einmal 
zwischenspeichern. Diese können tatsächlich viel schneller arbeiten, 
sind von der USB Geschwindigkeit unabhängig, aber leider ist der interne 
Speicher begrenzt.
Die gängigen Speichern die gesamten Signalverläufe in der HArdware, die 
Protokollanalyse erledigt der PC nachdem die Daten übertragen werdem.
Die noch hochwertigeren können zumindest eine rudimentäre 
Protokollanalyse bereits in HArdware und so sogar auf einzelne serielle 
Datenpakete  mit speziellen Inhalt triggern. Da ist man aber ganz 
schnell in "höheren" Preisregionen.

Die "USB basierenden" LAs sind recht einfach selbst nachzubauen. Viele 
basieren sogar auf der selben Hardware (einen Cypress 8051µC mit 
FullSpeed usb) Hardwarekosten (nur Elektronik) liegen so bei unter 
20Euro. Der Saleae ist ein solcher Vertreter. Der USBee ein anderer.
Das Gerät hält das was die Saleae Werbung verspricht, auch der 
Originalpreis ist grunsätzlich noch akzeptabel. Die Funktionalitäten die 
der Hersteller des USBee verspricht und die über die Saleae Werbung 
hinausgehen sind teilweise aber Praktisch nicht wirklich nutzbar.
(USB Fullspeed geht nur mit maximaler Samplerate, die ist aber nur mit 
Glück nutzbar wenn man einen schnellen Rechner UND so gut wie keine 
weiteren Devices an USB hat UND das Betriebssystem kaum sonstige Arbeit 
verrichtet!)
Ein Thread wo auch der NAchbau dieser Geräte besprochen wird ist:
Beitrag "Logikanalzyer mit FT232BL"

Die "besseren" LA sind im Nachbau schon etwas aufwendiger.
Beispiel ist hier der MiniLA der hier im Forum schon öfter beahndelt 
wurde und wo es auch Sammelbestellungen gibt. Bin gerade am Überlegen ob 
SPI
in der SW vorhanden ist. Glaube aber schon.
Beitrag "[S] Leute die einen Logic Analyzer (MiniLA) bauen wollen"
http://www.mikrocontroller.net/articles/Minila_Version_MockUp

BEi den Kommerziellen gehört SPI bei so gut wie allen zur 
Grundausstattung.
Die hier bekanntesten Kommerziellen sind sind wohl die GEräte von 
Zeroplus und Intronix.
http://www.pctestinstruments.com/deutsch
http://www.zeroplus.com.tw/logic-analyzer_en/products.php

Bei diesen Geräten ist neben maximaler Samplerate und Kanalzahl 
unbedingt die Speichertiefe zu beachten. Wobei man darauf achten muss 
wie die Angabe zu verstehen ist. Einige Hersteller geben die 
Speichertiefe pro Kanal an, andere dann wieder -weil es ja viel toller 
klingt- für das Gesamtgerät!
Es ist aber ein Riesenunterschied ob man nun 2MBit pro Kanal hat oder 
sich die 2MBit auf 32Kanäle verteilen.
Auf jeden Fall MUSS man überlegen ob der Speicher für die eigenen 
Anforderungen reicht. Was nutzt ein 500Mhz 32KAnal LA mit dem selbt bei 
kleiner Samplefrequenz 10Mhz nur 50ms Aufzeichnen kann?

Es gibt also massig Auswahl.
Was für dich am besten ist kannst nur du selbst sagen, oder du musst 
weitere Informationen geben.

Wenn es in erster Linie nur um serielle Protokolle wie SPI geht, DIESE 
aber recht langsam sind (max. um die 5Mbit/s Datenclock würde ich sagen 
) dir aber reine lange Aufzeichnungsdauer wichtig ist, dann ist ein 
Saleae (Original oder Clone) nicht schlecht. Usbee als Original finde 
ich im Vergleich zu den sonstigen auf dem MArkt erhältlichen Geräten 
schlicht überteuert...
Clone - OK. Wobei ganz klar sein Muss. Die verwendung von Clones ist 
rechtlich -zumindest- eine Grauzone! (GRAU meiner ansicht nach deshalb, 
weil die SW frei herunterladbar ist und das Design selbt wohl auf eine 
AN des Chipherstellers zurückgeht.) Aber vielleicht sieht es auch ja 
auch ein Richter anders...

Sobald die Übertragung schneller wird ist es aber mit diesen Geräten ein 
echtes Glücksspiel ob man noch zuverlässig schnell genug samplen kann.
(FSample min. = 2x F_Daten)

Bei den rein kommerziellen Vertretern Ihrer Zunft würde ich sagen das 
für jemanden der als ersten Anspruch hauptsächlich serielle Protokolle 
hat im Moment der Zeroplus C16032 das beste Preis/Leistungsverhältniss 
bietet.
http://www.tigal.com/product/1491 (Achtung: Preis von 89Eur, ist OHNE 
MwSt! Ergibt 109Eur. Endsumme)

Dieser ist durch eine Änderung der PID/VID ohne jeden Hardwareeingriff
zu einem 16128 Aufrüstbar. (gibt wohl sogar ein Programm dafür).
http://www.tigal.com/product/1699
Wenn man die 100Eur für einen 72MB Speicherchip investieren will und es 
wagt am ASIC GEhäuse herumzufeilen soagr auf 162000...
Der Umbau auf 32 Kanäle der im Netz zu finden ist, der ist aber NICHT 
mehr möglich!
Für diesen gibt es neben den Standartprotokollen noch 30 Protokolle 
freier Wahl zusätzlich gratis! (Will man "aufbohren" die Protokolle erst 
NACH dem Aufbohren Freischalten!!!)
Zum Vorgang selbst werde ich hier aber keine weiteren Angaben machen...

Braucht man 32Kanäle oder noch höhere Samplegeschwindigkeit ist der 
Intronix Logikport wohl die bessere Wahl, allerdings unterstützt dieser 
nicht so viele verschiedene Protokolle. Die Benutzeroberfläche soll beim 
Intronix wohl etwas organisierter sein. Beim Zeroplus ist die teilweise 
"gewöhnungsbedürftig". Aber auch damit kommt man zurecht!

Gruß
Carsten

von Lukas K. (carrotindustries)


Lesenswert?

Patrick B. schrieb:
> Lukas K. schrieb:
>> Genau das kann der bus pirate
>
> Mhm, hab ich jetzt was falsch verstanden, oder nimmt der Bus Pirate im
> binary mode nur Daten entgegen, wenn er auch welche sendet?
Nein, wie kommst du darauf?

von Martin (Gast)


Lesenswert?

Patrick B. schrieb:
> Lukas K. schrieb:
>> Genau das kann der bus pirate
>
> Mhm, hab ich jetzt was falsch verstanden, oder nimmt der Bus Pirate im
> binary mode nur Daten entgegen, wenn er auch welche sendet? Dies wäre
> dann sehr ungünstig, da ich nur ein Empfänger brauche.

Ohne mir etwas über den Piraten durchgelesen zu haben ...

Wie funktioniert eine SPI Schnittstelle?

Es gibt einen Master einen Takt für ein Schieberegister sendet. Nun hat 
ein SPI Gerät zwei von diesen Schieberegistern. Eins zum Senden und eins 
zum Empfangen die werden beide mit diesem Takt versorgt. Also schiebt 
das Sendeschieberegister seine Daten auch beim Empfang raus. Also was 
tun? Die Sende Leitung einfach nicht anschließen!

von Carsten S. (dg3ycs)


Lesenswert?

Patrick B. schrieb:
> Das USB-Gerät müsste ein SPI-Slave simulieren und dann die Daten wie
>
> gesagt an den PC senden. Diese Daten müssten weiter verarbeitbar sein
>
> (z.B. aus den 8Bit Packeten 32Bit Variablen machen und dann sortiert in
>
> ein Excel schreiben. Dies ist nicht das Problem, man müsste einfach an
>
> die Daten kommen über exportfunktion oder so ähnlich. Dann einfach einen
>
> Converter...)

Ok..
Man sollte wenn man das schreiben wg. Abendessen unterbricht zumindest 
mal nachsehen ob sich was im Thread getan hat ;-)
Das was du hier schreibst ist dann definitiv nicht mehr die Funktion 
eines SPI-Schniffers...

ICh verstehe das jetzt so, das du nicht mitlesen willst, sondern das 
Gerät AKTIV am geschehen als Slave teilnehmen soll. Richtig?
(Ein Sniffer ist ja für die "zu untersuchende Elektronik" 
sinnvollerweise praktisch einfach nicht vorhanden)
Das was du möchtest, "also GEgenstelle" kann "GLAUBE ICH" der PicKit 
SErialAnalyzer. Da war auch was mit Datenübernahme. BIn da aber gerade 
nicht ganz im Bilde.

Aber letzendlich ist das doch auch überhaupt kein Problem das ebend mit 
einem fast beliebigen µC selbst zu realisieren...
ICh würde da jetzt einen USB PIC18F nehmen und eines der 
Beispielprogramme  für CDC so abändern das dieser sich als COm Anmeldet 
und die Datenpakete dann über dne Emulierten COm an den PC sendet.
Die COM Abfrage zur Weiterverarbeitung auf PC Seite ist ja mit so 
wziemlich jeder Entwicklungsumgebung nur eine Fiungerübung .

Gruß
Carsten

P.S. sollte es jetzt doch von mir falsch verstanden sein und es geht 
nicht um die "aktive Teilnahme" sondenr nu um die Möglichkeit 
mitgeschriebene Pakete irgendwann mal weiterzuverarbeiten:
Ds können viele LA auch. Die Daten werden dann als TXT ausgegeben und 
können dann wieder eingelesen werden.

von Carsten S. (dg3ycs)


Lesenswert?

Martin schrieb:
> Patrick B. schrieb:
>> Lukas K. schrieb:
>>> Genau das kann der bus pirate
>>
>> Mhm, hab ich jetzt was falsch verstanden, oder nimmt der Bus Pirate im
>> binary mode nur Daten entgegen, wenn er auch welche sendet? Dies wäre
>> dann sehr ungünstig, da ich nur ein Empfänger brauche.
>
> Ohne mir etwas über den Piraten durchgelesen zu haben ...
>
> Wie funktioniert eine SPI Schnittstelle?
>
> Es gibt einen Master einen Takt für ein Schieberegister sendet. Nun hat
> ein SPI Gerät zwei von diesen Schieberegistern. Eins zum Senden und eins
> zum Empfangen die werden beide mit diesem Takt versorgt. Also schiebt
> das Sendeschieberegister seine Daten auch beim Empfang raus. Also was
> tun? Die Sende Leitung einfach nicht anschließen!

In den meisten Fällen funktioniert das auch.
Allerdings gibt es ja durchaus Implementierungen die nach jedem xten 
Datenpaket eine Reaktion erwarten. Das ist natürlich genaugenommen KEINE 
SAche der SPI Schnittstelle sondern der Firmware die auf dem sendenden 
Device läuft, aber das kommt vor.

Wo ich gerade aber einen Blackout habe: Wie funktioniert die 
Spannungsversorgung beim High Pegel? Treibt der Master aktiv High oder 
geschieht dies mit einem Pull-Up (evtl. beim Slave) und de rMAster zieht 
mit OC nur nach Low? Das müsste man ggf. auch beachten.

Gruß
Carsten

von holger (Gast)


Lesenswert?

>>> Daten werden von einem ARM über SPI versendet. Diese müssen möglichst
>>
>>> schnell zum PC, da alle 1ms 128Bytes über SPI geschrieben werden
>>
>> Das ist ja Schneckentempo...


Bei z.B. 25MHz SPI Clock ist das alles andere
als Schneckentempo.

von holger (Gast)


Lesenswert?

>Wie funktioniert die
>Spannungsversorgung beim High Pegel? Treibt der Master aktiv High

Ja.

> oder geschieht dies mit einem Pull-Up (evtl. beim Slave) und de rMAster >zieht 
mit OC nur nach Low?

Nein.

Was willst du eigentlich tatsächlich machen? Daten per SPI
an den PC schicken oder die Übertragung zu einem Slave abhören?

von Patrick B. (p51d)


Lesenswert?

Oh, da hat sich aber sehr viel getan.

Ich kann eure Verwirrung nachfollziehen, habe gemerkt, dass ich hier 
wohl ein paar Dinge durcheinander gebracht habe.

Der Master ist ein ARM, der einen Regler Implementiert hat. Jetzt möchte 
man diverse Regelparameter (Strom, Soll, Ist...) als 32Bit an den PC 
senden. Da der ARM keinen Speicher mehr frei hat, soll hier ein 
SPI-Slave hinzukommen, der vom Master die Daten empfängt und diese dann 
direkt ohne Puffer über das USB weiter an den PC sendet.
Der Arm schiebt dann 128Byte mit ~2MHz alle 1ms heraus.

@Carsten: Hattest du gerade nichts zu tun, oder wieso kommt so ein 
ausführlicher Bericht zustande?

Die LAs sind sehr sehr umfangreich, zu umfangreich.
Mir ist schon klar, dass uC + FT232/FT245 und Firmware sowie GUI etwa 
einen Tag Arbeit bedeuten, aber als Betriebsinterne Arbeit einen 
Elektroniker damit zu beschäftigen ist überrissen, da kann man bis 
200Euro etwas kaufen und ist immer noch weit unter den Kosten des 
Elektronikers.

Schönen Abend noch

von Carsten S. (dg3ycs)


Lesenswert?

Patrick B. schrieb:
> @Carsten: Hattest du gerade nichts zu tun, oder wieso kommt so ein
> ausführlicher Bericht zustande?

NAja, zu tun eigendlich genug... Aber ich habe mir gerade an einem 
Problem die Zähne ausgebissen und musste auf andere Gedanken kommen.
Und da ich mich die Tage selbst noch einmal etwas mit LA befasst habe.

Allerdings passiert es mir durchaus öfter das ich "zu ausführlich" 
werde. Wobei ich das immer noch für besser halte als einfach ein paar 
Dinge in den Raum zu werfen und dem Fragenden ist damit immer noch nur 
begrenzt geholfen.

Patrick B. schrieb:
> Die LAs sind sehr sehr umfangreich, zu umfangreich.
> Mir ist schon klar, dass uC + FT232/FT245 und Firmware sowie GUI etwa
> einen Tag Arbeit bedeuten, aber als Betriebsinterne Arbeit einen
> Elektroniker damit zu beschäftigen ist überrissen, da kann man bis
> 200Euro etwas kaufen und ist immer noch weit unter den Kosten des
> Elektronikers.

Sol das jetzt erst einmal nur rein als Test laufen? Oder ist ds eine 
Anwendung wo es dann als Einzelstück später so bleiben soll.
ICh weiß ja jetzt nicht wie groß die Anforderungen an die GUI sind, aber 
alles µC seitige ist incl. Aufbau auf Lochraster in einer Stunde 
abgehakt. Wenn es denn ordentlich mit LAyout auf geätzter Leiterplatte 
sein soll sind es 2h. Auch FT232 usw. braucht man nicht wenn man den 
richtigen µC nimmt.
Eine GUI die nur die Daten Anzeigt und evtl. noch die PArametern ändern 
lässt sind vielleicht 45minuten. Wenn die Daten dann noch aufwendig 
bearbeitet werden sollen wird es natürlich komplexer. Aber das hat man 
mit jeder anderen Lösung unter Nutzung der Exportfunktion auch. Geht es 
nur uim eine Überprüfung reciht sogar ein Terminalprogramm ohne eigene 
GUI, dann muss auf dem µC halt eine CDC kompatible Firmware.

Aber BTT:
Wie geschrieben GLAUBE ich das man das mit dem PicKit SerialAnalyzer 
hinbekommen kann skripte Ausführen zu lassen und die Ergebnisse 
exportieren zu können. Etwas anderes fertiges ist mir so nicht bekannt 
wenn man von den "richtigen" LAs absieht die m.W. aber keine 
"automatisierten" Funktionen haben. Die Microchip Website ist seit 
einigen Stunden Down (und ich muss da dringend noch etwas anderes 
nachschlagen!) sonst hätte ich mal kurz das Anwendugnsprogramm geladen 
und mit meinem PK_SA nachgeschaut. (Habe zwar auch die CD, aber bis ich 
die gefunden habe...)

Wenn das mit dem Pickit nicht geht und du anderweitig auch nicht fündig 
wirst musst du dich mal direkt bei mir melden. Für 200Euro könnt ihr von 
mir locker einen passenden SPI-USB Umsetzer incl. einfacher GUI 
bekommen. NAtürlich geätzt und mit Rechnung... ;-) Da liege ich noch gut 
in meinem Stundensatz.

Gruß
Carsten

von holger (Gast)


Lesenswert?

>Der Master ist ein ARM, der einen Regler Implementiert hat. Jetzt möchte
>man diverse Regelparameter (Strom, Soll, Ist...) als 32Bit an den PC
>senden.

Ok.

>Da der ARM keinen Speicher mehr frei hat,

Da machst du was falsch.

>soll hier ein
>SPI-Slave hinzukommen, der vom Master die Daten empfängt und diese dann
>direkt ohne Puffer über das USB weiter an den PC sendet.
>Der Arm schiebt dann 128Byte mit ~2MHz alle 1ms heraus.

Wozu zum Teufel? Keinen UART mehr frei? Was soll der Quatsch
mit dem SPI in Richtung PC? So ein Deppenkram.

von Patrick B. (p51d)


Lesenswert?

Carsten Sch. schrieb:
> Wenn das mit dem Pickit nicht geht und du anderweitig auch nicht fündig
> wirst musst du dich mal direkt bei mir melden. Für 200Euro könnt ihr von
> mir locker einen passenden SPI-USB Umsetzer incl. einfacher GUI
> bekommen. NAtürlich geätzt und mit Rechnung... ;-) Da liege ich noch gut
> in meinem Stundensatz.

Ich habe den Auftrag so bekommen, jetzt geht es bei mir einmal um 
Varianten-Studium, und um zu sehen, ob es sich lohnt.
Selber machen könnte ich es auch, aber nur mit FTDI-Chip, da ich bis 
jetzt den Durchblick bei einem USB-uC noch nicht habe (ist ein klein 
wenig komplizierter als die USART). Und bis ich eine solche 
Kommunikation am laufen habe, vergeht viel mehr Zeit, als wenn ich schon 
bekanntes nehme. Ausserdem kann man ja nicht einfach so ein USB-Device 
bauen (VID, PID).

holger schrieb:
>>Da der ARM keinen Speicher mehr frei hat,
>
> Da machst du was falsch.

Der Regler ist eine bestehende Platine. Wie das aufgebaut ist, weiss ich 
nicht.

holger schrieb:
> Wozu zum Teufel? Keinen UART mehr frei? Was soll der Quatsch
> mit dem SPI in Richtung PC? So ein Deppenkram.

Es hat eine USART, die herausgeführt ist, als Debugg-Schnittstelle. Ich 
weiss aber nicht wieso sie die Daten nicht über diese herauslesen 
können.

von Patrick B. (p51d)


Lesenswert?

Patrick B. schrieb:
> Es hat eine USART, die herausgeführt ist, als Debugg-Schnittstelle. Ich
> weiss aber nicht wieso sie die Daten nicht über diese herauslesen
> können.

So wie es mir gesagt wurde, ist die UART zu langsam...

von Lukas K. (carrotindustries)


Lesenswert?

Patrick B. schrieb:
> Patrick B. schrieb:
>> Es hat eine USART, die herausgeführt ist, als Debugg-Schnittstelle. Ich
>> weiss aber nicht wieso sie die Daten nicht über diese herauslesen
>> können.
>
> So wie es mir gesagt wurde, ist die UART zu langsam...

 >1 MBaud sollte der ARM doch schaffen?

von Carsten S. (dg3ycs)


Lesenswert?

Patrick B. schrieb:
> Ich habe den Auftrag so bekommen, jetzt geht es bei mir einmal um
> Varianten-Studium, und um zu sehen, ob es sich lohnt.
> Selber machen könnte ich es auch, aber nur mit FTDI-Chip, da ich bis
> jetzt den Durchblick bei einem USB-uC noch nicht habe (ist ein klein
> wenig komplizierter als die USART). Und bis ich eine solche
> Kommunikation am laufen habe, vergeht viel mehr Zeit, als wenn ich schon
> bekanntes nehme. Ausserdem kann man ja nicht einfach so ein USB-Device
> bauen (VID, PID).

Naja, es kommt darauf an wie die Randbedingungen sind...
GErade für solch triviale Sachen kann man wunderbar ein fertiges 
Framework nehmen. Idealerweise eines das direkt vom Prozessorhersteller 
herausgegeben wird, direkt läuft und auch für Kommerzielle Verwendung 
ohne Einschränkung freigegeben ist. Da kann die USB Kommunikation schon 
mal auf auf das Einbinden der richtigen Header und zwei bis vier 
Funktionen die aufgerufen werden müssen zusammenschrumpfen. Das ist dann 
genauso leicht wie UART.

PID/VID ist dann so eine Frage... ISt es eine rein interne Anwendung 
kann man ja nehmen was man will. Wichtig wird das ja erst wenn man das 
"vertreiben möchte"

Aber auch da bieten einige Halbleiterhersteller unterstützung. Für 
kmomerzielle Verwertung in Kleinserien bis hin zu einigen tausend Stück 
pro Jahr bekommt man z.B. von Microchip auf Antrag eine individuelle PID 
kostenlos zugewiesen die man dann zusammen mit der Microchip VID ganz 
offiziell und legal für seine Produkte verwenden kann.

ICh schrieb ja schon das ich z.B. zu einem PIC18F unter verwendung des 
Microchip USB Frameworks greifen würde. Dazu gibt es eine reine 
Beispielprogramme die man als Ausgangsbasis für eigene Projekte nehmen 
kann (und zumindest als einsteiger auch sollte). Darunter ist zum 
Beispiel das USB-CDC Serial Demo. Dieses Programm macht aus dem PIC 
einen USB UART umsetzer. Im Prinzip 100% dasselbe wie ein käuflicher 
USB-RS232 Adapter.

Dieses Programm würde ich aus Ausgangsbasis nehmen und nur die 
ConfigBits für den USART Port ändern um den Eingangsport von UART auf 
SPI umzustellen.
Das währe dann wohl der schnellste Weg mit dem der "Käse" gegessen ist.

Wenn es nicht über CDC laufen soll, dann dauert es halt statt 10minuten 
20minuten bis es läuft... An Peripherie braucht man neben dem Prozesor 
nur einen Quarz sowie die beiden Kondensatoren für den Quarz sowie die 
Abblockkondensatoren für die Spannungsversorgung. Dann nur noch die 
Anschlüsse. Das war es auch schon.

Allerdings bietet nicht jeder Halbleiterhersteller eine so umfangreiche 
Unterstützung an. Aber man kann ja entsprechend auch wählen.
Wobei man natürlich immer bedenken muss das der Rückgriff auf 
vorgefertigte Lösungen auch nur bis zu einer gewissen komplexität 
ordentlich funktioniert. Aber das hier liest sich wirklich trivial.

GRuß
Carsten

von Patrick B. (p51d)


Lesenswert?

Carsten Sch. schrieb:
> Naja, es kommt darauf an wie die Randbedingungen sind...
> GErade für solch triviale Sachen kann man wunderbar ein fertiges
> Framework nehmen. Idealerweise eines das direkt vom Prozessorhersteller
> herausgegeben wird, direkt läuft und auch für Kommerzielle Verwendung
> ohne Einschränkung freigegeben ist. Da kann die USB Kommunikation schon
> mal auf auf das Einbinden der richtigen Header und zwei bis vier
> Funktionen die aufgerufen werden müssen zusammenschrumpfen. Das ist dann
> genauso leicht wie UART.

Naja, ich habe mir die ganze Microchip applicatin library einmal 
angesehen, und es schein, als hättenw wir unterschiedliche Ansichten von 
leicht:
Es sollte nicht über CDC laufen, aber was soll genommen werden? Generic, 
MSD? HID fällt ja weg.
Und leider hat Microchip nicht wirklich eine gute Doku, wo ersichtlich 
ist, welche Dateien man schlussendlich wie braucht, und was abgeändert 
werden muss, da ja das OTG Config Tool nur für OTG funktioniert und 
Peripherie-Devices nicht unterstützt (habe nachgefragt).
Also, wenn du mir da etwas weiterhelfen kannst, wäre mir schon sehr 
geholfen. Die Frage ist sowieso ob PIC-USB oder einen Wandler...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Patrick B. schrieb:
> Es sollte nicht über CDC laufen

Warum eigentlich nicht?  Für derartige Daten würde sich das doch
anbieten.

von Patrick B. (p51d)


Lesenswert?

Wäre die Geschwindigkeit dann nicht zu langsam, da CDC ein virtueller 
COM-Port ist? Direktes ansprechen des USB wäre doch schneller?
Und die DLL von Microchip sieht auch nicht sehr schwer aus. Einziges 
Problem ist bei mir die uC Seite, da nicht wirklich klar ist, wie ich wo 
was anpassen muss und welche Dateien ich benötige.

Jedes Demo-Projekt hat folgende Dateien:
- main.c
- HardwareProfile.c
- usb_config.h
- usb_descriptors.c
Z.T
- user.h
- user.c

Desweiteren wird immer in den Ordner USB verwiesen, wo wiederum ein HAL 
vorhanden ist, wieso also HardwareProfile.c?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Patrick B. schrieb:
> Wäre die Geschwindigkeit dann nicht zu langsam, da CDC ein virtueller
> COM-Port ist?

Er ist doch nur virtuell.

Im Gegenteil, es gibt Situationen, wo ein echter serieller Port
deutlich schneller ist als USB insgesamt, bspw. wenn man ihn zum
"Bitwackeln" missbraucht (wie bei einfachen ISP-Programmiergeräten).
Dann wird man durch die USB-Framerate (1 ms) ausgebremst, aber das
ist für dich kein Thema.

> Direktes ansprechen des USB wäre doch schneller?

Warum sollte das schneller werden?

Der schlichte Vorteil von CDC ist es, dass man auf praktisch allen
existierenden Betriebssystemen bereits einen Treiber dafür vorfindet.
Man muss das Teil also nur anstöpseln.  (OK, unter Windows muss noch
einmal der Admin dann ran und trotzdem noch die "Hardware
installieren", aber das ist dort ohnehin immer so.  Andere Systeme
leiden nicht an dieser Krankheit, bei denen ist USB wirklich "plug &
play", wie es in USB's Selbstdefinition auch sein sollte.)

von Patrick B. (p51d)


Lesenswert?

Jörg Wunsch schrieb:
>> Direktes ansprechen des USB wäre doch schneller?
>
> Warum sollte das schneller werden?

Warum nicht? FTDI hat ja auch unterschiedliche Geschwindigkeiten wenn 
der VCP oder D2XX verwendet wird.
Wird bei VCP nicht zuerst auf das USB geschrieben, wass dann wieder der 
PC verabeiten muss? Beim USB-Treiber geht man doch direkt auf den PC 
los.

Ich habe mir einmal das CDC Beispiel von Microchip angesehen, und da 
verwenden sie um die 15 Dateien. Aber soweit ich es überblickt habe, 
muss man nur die Device Descriptor und Configuration Descriptor, sowie 
die Strings anpassen? Und dann natürlich die eignetliche Software. Hat 
da jemand schon Erfahrungen?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Patrick B. schrieb:
> Jörg Wunsch schrieb:
>>> Direktes ansprechen des USB wäre doch schneller?
>>
>> Warum sollte das schneller werden?
>
> Warum nicht?

Weil die Geschwindigkeit vom zugrunde liegenden USB und dessen
Physik (insbesondere der maximalen Paketgröße und der Framerate
von 1 ms) bestimmt wird.  Es ist ja nirgends ein Flaschenhals in
Form einer realen seriellen Schnittstelle eingebaut, der da
irgendwas ausbremsen würde.

> FTDI hat ja auch unterschiedliche Geschwindigkeiten wenn
> der VCP oder D2XX verwendet wird.

Dann haben sie was falsch gemacht.  Oder sie wollen die Vorzüge
ihres proprietären D2XX-Treibers herausstellen, und haben in den
VCP-Treiber eine Bremse reingebaut. ;-)

> Wird bei VCP nicht zuerst auf das USB geschrieben, wass dann wieder der
> PC verabeiten muss? Beim USB-Treiber geht man doch direkt auf den PC
> los.

Tut mir leid, ich kann dir nicht folgen.  Mir scheint, dass du
dir manche Dinge umständlicher vorstellst, als sie am Ende sind.

> Ich habe mir einmal das CDC Beispiel von Microchip angesehen, und da
> verwenden sie um die 15 Dateien.

Ja, die meisten Frameworks, die die Hersteller so anbieten, sind
ziemlich generisch aufgebaut und dadurch reichlich umständlich.
Ich habe mal für AT90USB ein CDC-Implementierung geschrieben (für
das µracoli-Projekt), die kommt mit 1400 Zeilen C-Code in einer
einzigen Datei aus, während sowohl das Atmel-Framework als auch
Dean Cameras Opensource-Framework (LUFA) sich in endlosen
Abstraktionen ergehen, verteilt auf einen relativ großen Baum an
Quelldateien.  Dafür können diese Frameworks eben alle gängigen
device types implementieren, während ich mich auf das absolute
Minimum für eine CDC-Implementierung beschränken wollte.

Von der Benutzbarkeit her spielt das aber sicher keine große Rolle,
solange man so ein Framework einfach 1:1 benutzen will und nicht
unbedingt bis ins letzte verstehen.

> Aber soweit ich es überblickt habe,
> muss man nur die Device Descriptor und Configuration Descriptor, sowie
> die Strings anpassen?

Auf sowas läuft es bei USB mehr oder weniger immer hinaus, wenn man
schon mal eine funktionierende Firmware hat.

von Patrick B. (p51d)


Lesenswert?

OK, bin schon etwas weiter gekommen mit dem Verständnis.

Aber hier happerts noch:
1
/* Configuration 1 Descriptor */
2
ROM BYTE configDescriptor1[]={
3
    /* Configuration Descriptor */
4
    0x09,//sizeof(USB_CFG_DSC),    // Size of this descriptor in bytes
5
    USB_DESCRIPTOR_CONFIGURATION,                // CONFIGURATION descriptor type
6
    67,0,                   // Total length of data for this cfg
7
    2,                      // Number of interfaces in this cfg
8
    1,                      // Index value of this configuration
9
    0,                      // Configuration string index
10
    _DEFAULT | _SELF,               // Attributes, see usb_device.h
11
    50,                     // Max power consumption (2X mA)
12
              
13
    /* Interface Descriptor */
14
    9,//sizeof(USB_INTF_DSC),   // Size of this descriptor in bytes
15
    USB_DESCRIPTOR_INTERFACE,               // INTERFACE descriptor type
16
    0,                      // Interface Number
17
    0,                      // Alternate Setting Number
18
    1,                      // Number of endpoints in this intf
19
    COMM_INTF,              // Class code
20
    ABSTRACT_CONTROL_MODEL, // Subclass code
21
    V25TER,                 // Protocol code
22
    0,                      // Interface string index
23
24
    /* CDC Class-Specific Descriptors */
25
    sizeof(USB_CDC_HEADER_FN_DSC),
26
    CS_INTERFACE,
27
    DSC_FN_HEADER,
28
    0x10,0x01,
29
30
    sizeof(USB_CDC_ACM_FN_DSC),
31
    CS_INTERFACE,
32
    DSC_FN_ACM,
33
    USB_CDC_ACM_FN_DSC_VAL,
34
35
    sizeof(USB_CDC_UNION_FN_DSC),
36
    CS_INTERFACE,
37
    DSC_FN_UNION,
38
    CDC_COMM_INTF_ID,
39
    CDC_DATA_INTF_ID,
40
41
    sizeof(USB_CDC_CALL_MGT_FN_DSC),
42
    CS_INTERFACE,
43
    DSC_FN_CALL_MGT,
44
    0x00,
45
    CDC_DATA_INTF_ID,
46
47
    /* Endpoint Descriptor */
48
    //sizeof(USB_EP_DSC),DSC_EP,_EP02_IN,_INT,CDC_INT_EP_SIZE,0x02,
49
    0x07,/*sizeof(USB_EP_DSC)*/
50
    USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
51
    _EP01_IN,            //EndpointAddress
52
    _INTERRUPT,                       //Attributes
53
    0x08,0x00,                  //size
54
    0x02,                       //Interval
55
56
    /* Interface Descriptor */
57
    9,//sizeof(USB_INTF_DSC),   // Size of this descriptor in bytes
58
    USB_DESCRIPTOR_INTERFACE,               // INTERFACE descriptor type
59
    1,                      // Interface Number
60
    0,                      // Alternate Setting Number
61
    2,                      // Number of endpoints in this intf
62
    DATA_INTF,              // Class code
63
    0,                      // Subclass code
64
    NO_PROTOCOL,            // Protocol code
65
    0,                      // Interface string index
66
    
67
    /* Endpoint Descriptor */
68
    //sizeof(USB_EP_DSC),DSC_EP,_EP03_OUT,_BULK,CDC_BULK_OUT_EP_SIZE,0x00,
69
    0x07,/*sizeof(USB_EP_DSC)*/
70
    USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
71
    _EP02_OUT,            //EndpointAddress
72
    _BULK,                       //Attributes
73
    0x40,0x00,                  //size
74
    0x00,                       //Interval
75
76
    /* Endpoint Descriptor */
77
    //sizeof(USB_EP_DSC),DSC_EP,_EP03_IN,_BULK,CDC_BULK_IN_EP_SIZE,0x00
78
    0x07,/*sizeof(USB_EP_DSC)*/
79
    USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
80
    _EP02_IN,            //EndpointAddress
81
    _BULK,                       //Attributes
82
    0x40,0x00,                  //size
83
    0x00,                       //Interval
84
};
Verstehe ich das richtig? Hier werden 2 Interfaces generiert, die dann 
dementsprechende Treiber laden? Das erste hat wohl mit dem CDC zu tun, 
und das zweite nur noch mit USB, wobei der 2. Endpunkt als In sowie Out 
verwendet wird. Aber je nach Datenmenge, die gesendet werden soll, wäre 
es doch besser wenn man mehrere als nur ein 64Byte Output oder Input hat 
(hier ist auch etwas unlogisch: beide verwenden 64Byte, wobei der 
Endpunkt nur 64Byte gross ist???)?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Patrick B. schrieb:

> Verstehe ich das richtig? Hier werden 2 Interfaces generiert,

Ja, das CDC-Modell braucht ein Interface für die Daten und eins
als "abstract call management".  Letzteres ist (war) eigentlich
dafür da, dass man darüber Wählvorgänge eines Modems etc.
anschieben kann, ohne dies mittels in-band signalling (vulgo
"AT-Befehlen") zu tun.

Das brauchst du zwar nicht gar nicht, aber das CDC-Modell besteht
darauf, dass es dies gibt, und die meisten Betriebssysteme
konfigurieren ihren CDC-Treiber folglich auch nur, wenn das
Device das Ding drin hat.  Lass es also einfach da ruhen, bis auf
ein paar Bytes im Flash ist dir das nirgends im Weg.

> die dann
> dementsprechende Treiber laden?

Nein.  Das Betriebssystem lädt genau einen Treiber für all
dies.

> Das erste hat wohl mit dem CDC zu tun,
> und das zweite nur noch mit USB,

Versuch' doch nicht, CDC und USB trennen zu wollen.  CDC heißt
"communication device class" und ist eine der möglichen Geräte-
klassen, die man in einem USB-Gerät implementieren kann.

> wobei der 2. Endpunkt als In sowie Out
> verwendet wird.

CDC braucht 3 Endpunkte (was auch der Grund ist, warum man es
offiziell nicht auf einem Lowspeed-Device implementieren kann:
dieses soll laut Spec nur 2 Endpunkte unterstützen).  Generell
ist ein Endpunkt auf dem USB unidirektional, wenn man also eine
bidirektionale Verbindung aufbauen will, braucht man davon zwei
(wobei das Bit 7 in der Endpunkt-Nummerierung die Richtung
unterscheidet, d. h. die haben dann die Nummern 0x02 und 0x82).
Diese beiden Endpunkte sind vom Typ "bulk", d. h. sie dienen
dem Massen-Datentransfer.

Der dritte Endpunkt ist ein sogenannter Interrupt-Endpunkt (wobei
USB gar keine wirklichen Interrupts kennt, aber das ist jetzt 'ne
andere Geschichte).  Ähnlich wie das abstract call management ist
das eher "historisch gewachsen".  Ich habe jetzt nicht ganz genau
im Kopf, wofür der da ist, aber vermutlich könnte damit das Modem
Dinge wie einen ankommenden Ruf vermelden.  Der muss gemäß CDC-Spec
auch einfach da sein, obwohl du ihn nicht wirklich brauchst.  Aber
wie oben: lass ihn, wie er ist, er stört dich nicht.

> Aber je nach Datenmenge, die gesendet werden soll, wäre
> es doch besser wenn man mehrere als nur ein 64Byte Output oder Input hat

Nein, du brauchst für deine Daten nur einen Endpunkt in jede Richtung.
Ob die Hardware dann dahinter mehr als einen FIFO setzen kann, um
die Verarbeitung zu beschleunigen, ist 'ne andere Sache.  Da kenne
ich mich mit den PICs nicht aus, bei den USB-AVRs ist es aber so,
dass sie mehr als einen FIFO-Block im Wechsel automatisch
benutzen können.  Man kann also die Hardware vom USB in den einen
FIFO Daten schieben lassen, während die Firmware gerade den zweiten
FIFO (desselben Endpunkts) verarbeitet.  Erst, wenn alle FIFOs voll
sind (weil die Firmware nicht hinterher kommt), dann würde es einen
"stall" geben, d. h. die Datenflusssteuerung würde in Richtung Host
vermelden, dass jetzt erstmal gewartet werden muss.

Diese Datenrichtung interessiert dich ja allerdings gar nicht, du
brauchst ja die andere Richtung.

Für dein eigenes Verständnis tätest du gut daran, dich mal über den
Aufbau des USB und der Übertragung darüber sowie ggf. dann auch die
CDC zu informieren.  Ob du dafür die (eher trockene) USB Spec nimmst
oder irgendwo ein Tutorial findest, ist egal, aber wie das Zusammen-
spiel von Endpunkten, Pipes, Interfaces etc. ist, dass kannst du
besser nachlesen, als dir das hier aus dritter Hand vorkauen zu
lassen.

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.