Forum: Mikrocontroller und Digitale Elektronik USB schneller als mit den FTDIs


von Tobias M. (mhad-ngad)


Lesenswert?

Nabend Zusammen,
ich möchte für meine Anwendung aus verschiedenen Gründen einen STR730 
(ARM7-Core) nutzen. Ich plane unter anderem große Datenmengen, die ich 
von AD-Wandlern und vom CAN aufzeichne auf einer CF-Karte abzulegen. Um 
die Daten dort wieder runterzukriegen, würde ich gern USB verwenden. Nun 
kriegt man mit den FTDIs meines Wissens nach nur max 3Mbit/s hin. Daher 
habe ich überlegt einen PIC oder AVR mit direktem USB-Interface zu 
verwenden, um dann per UART oder wie auch immer mit diesem zu 
kommunizieren und eine schnellere Verbindung herzustellen, da ich mit 3 
Mbit/s bei Datenmengen von bis zu 2 GByte sonst Stunden zum runterladen 
benötige. Hat jemand ne Idee oder fällt euch vielleicht ne deutlich 
einfachere Möglichkeit zur Datenübertragung ein? Die CF-Karte zu 
entfernen und direkt an den Rechner zu stöpseln kommt nicht in Frage.

Gruß

Tobi

von Andreas K. (a-k)


Lesenswert?

USB 480Mbps ist in Controllern eher selten anzutreffen, daher sind's 
ohnehin nicht mehr als 12Mbps (theoretisch). Gibt's keine STR7 mit USB 
drin?

von crazy horse (Gast)


Lesenswert?

doch, hab ich mich auch schon gefragt, bei den 750ern.

von holger (Gast)


Lesenswert?

PIC18F2550 schafft gerade mal so 88kB/s. Mehr ist da nicht
drin.

von Tobias M. (mhad-ngad)


Lesenswert?

Habt Ihr Erfahrungen aus der Praxis, was die ARMs effektiv über das 
USB-Interface schauffeln können? Den 730er habe ich wegen der 3 CANs 
genommen. Die 750er haben nur einen und damit genau einen zu wenig für 
meine Anwendung. Wobei ein externer CAN-Controller vermutlich weniger 
kritisch ist, als externes USB, oder?

Gruß

Tobias

von 2921 (Gast)


Lesenswert?

Der unguenstige Aspekt an USB ist einen PC Treiber zu schreiben.

von Andreas K. (a-k)


Lesenswert?

Wenn du es beim Datentransport eilig hast, scheint mir ein µC mit 
internem 100Mbps Ethernet sinnvoller. Fehlende CAN Kanäle kannst du ja 
ggf. extern erweitern, da ist die Datenrate ja nun erheblich geringer.

Ausserdem ist die Softwareseite auf dem PC bei Ethernet erheblich 
einfacher.

von Tobias M. (mhad-ngad)


Lesenswert?

Naja,
nicht zwingend, soweit ich weiss. Zumindest die FTDIs liefern ja schon 
Treiber mit, die über die emulierte Com-Schnittstelle hinausgehen. Wie 
es bei den ARMs ist, weiss ich ehrlich gesagt nicht.

von Tobias M. (mhad-ngad)


Lesenswert?

@Andreas: Daran habe ich auch schon gedacht, allerdings muss ich dann 
auf dem µC TCP/IP oder UDP implementieren. Das ist vermutlich auch kein 
Zuckerschlecken...

von Jonas G. (jonny)


Lesenswert?

die stacks gibt es ja notfalls fertig :)

von Supa M. (supa_micha)


Lesenswert?

Hi,

vielleicht könntest du auch einfach nur einen anderen externen USB 
Controller als den FTDI nehmen. Es gibt da ja durchaus auch welche, die 
High Speed unterstützen. Ist dann natürlich nicht mehr das 
Rundum-Sorglos-Paket wie mit dem FTDI.

Optimale Lösung denke ich wäre sicherlich, wenn du den MCU bei der 
USB-Kommunikation aussen vorläst. Du schließt also ein USB High Speed 
Controller und deinen MCU parallel an die CF-Karte. Wenn du deine Daten 
aufnimmst, spricht nur der MCU mit der Karte. Wenn du die Daten 
ausliest, spricht nur der USB Controller mit der Karte. Dabei könnte das 
ganze als Mass Storage Device angesprochen werden.

Ein Beispiel für einen USB Full Speed Controller ist z.B. der TUSB6250. 
Auch von Cypress gibt es ähnliche.

Viele Grüße
Michael

von Andreas K. (a-k)


Lesenswert?

UDP ist ziemlich einfach. Einfacher als USB. Und für TCP gibt's fertige 
Lösungen.

von Thomas (Gast)


Lesenswert?

Wenn du die Daten auf der Karte in einem für den PC lesbaren Dateisystem 
speichern kannst, dann könntest du sie auch mit einem Kartenleser 
auslesen.

von Sven (Gast)


Lesenswert?

Das hört sich ja alles ganz gut an:

Ich hätte den Vorschlag sich den Blackfin Prozessor
anzusehen und sich ein Application Board zu besorgen.
Der läuft mit Linux oder auch native mit einfachen Programmen.
Datendurchsatz ist da massig vorhanden und wenn man Linux benutzen
würde hätte man sofort auch Netzwerkunterstützung.
Eine AD-Wandler Platine muss man ja denke ich sowieso erstellen,
die könnte man dann einfach mit einem Linux Treiber über die IOs
abfragen.
Somit würde sich also vom Know-How ergeben:

- Compiler und/oder Toolchain anschauen
- Linux Treiber entwickeln (man kann da mit einfachen Beispielen
  anfangen)
- Platine mit AD-Wandlern designen
- Server Applikation schreiben die die Daten vom Board über
  TCP/IP bereitstellt
- Client Applikation z.B. für Windows schreiben

Gruß Sven

von Sven (Gast)


Lesenswert?

>  ich möchte für meine Anwendung aus verschiedenen Gründen einen STR730
> (ARM7-Core) nutzen

Sorry, im ersten Satz überlesen.

von Tobias M. (mhad-ngad)


Lesenswert?

@Thomas:
leider werde ich die Karte nicht entfernen können, wenn das Gerät 
erstmal in Betrieb ist.
@Sven:
Rein vom Prinzip her ging es mir bei der Auswahl des µCs um eine 
einigermaßen erprobte Plattform, mit 2 CANs integriert, wenn möglich, 
und Peripherie in Form von UART, SPI, Timern usw. Von daher ist der 
Blackfin wohl auch keine schlechte Wahl, zumal in meinem Projekt auch 
ein sehr fitter Linuxprogrammierer involviert ist und ich mich auf die 
Hardware konzentrieren könnte. Offensichtlich ist aber noch kein 
Chiphersteller auf die Idee gekommen, mehr als einen CAN zu spendieren, 
wenn man schon Ethernet und oder USB an Board hat.

Nach kurzem Infos sammeln im Netz ist der Blackfin wohl doch etwas 
oversized für meine Anwendung. Im Grunde wird das nur ein 
konfigurierbarer Datenlogger.

Gruß

Tobias

von Andreas K. (a-k)


Lesenswert?

Ethernet plus 2-Kanal CAN findet sich in den neuen LPC2300/2400.

von Tobias M. (mhad-ngad)


Lesenswert?

@Andreas:
Ich las leider schon viel vom verbuggtem CAN in den LPCs, hast Du 
Erfahrung damit?

Gruß

Tobi

von Andreas K. (a-k)


Lesenswert?

Das dürfte sich auf den CAN Controller vom alten LPC2129 (sowie 
LPC2194,...) beziehen. Der hat einige Bugs, darunter einer der FullCAN 
in Hardware ausschliesst. Aber wenn man diese Bugs umschifft 
funktioniert er. Hat mir jedenfalls keinen Ärger bereitet, andererseits 
ist meine App auch nicht sonderlich anspruchsvoll.

Die Errata-Liste vom LPC2300 sieht deutlich zivilisierter aus, da 
scheint man nur auf Overruns aufpassen zu müssen. Allerdings ist das 
Teil recht neu, und Errata-Listen pflegen mit den Jahren zu wachsen.

von Tobias M. (mhad-ngad)


Lesenswert?

@Andreas:
Ja, das mit den leeren Erratas bei jungen Controllern kenne ich leider 
auch...allerdings gibt es den auch mit integriertem SD/MMC Interface, 
was sehr reizvoll für die Datenspeicherung ist.

Gruß

Tobias

von crazy horse (Gast)


Lesenswert?

ich würde mir den Controller nach dem Flaschenhals aussuchen, also in 
deinem Fall die externe Verbindung. CAN ist leicht dazugestrickt.
Wenn möglich, nimm auf jeden Fall Ethernet.

von Tobias M. (mhad-ngad)


Lesenswert?

Ich nehme an mit Ethernet wird der Lesezugriff auf das Speichermedium 
der Flaschenhals. Hat einer von euch Erfahrung mit dem möglichen 
Datendurchsatz über Ethernet mit ARMs?

Gruß

Tobias

von Robert Teufel (Gast)


Lesenswert?

Bin ich erst mal froh, dass ich nicht als erster die LPCs in Spiel 
gebracht habe ;-)

Die LPC23xx haben schone einen hohen Durchsatz wenns um Ethernet geht, 
sogar einen eigenen Bus, eigene 16k SRAM, eigene DMA Controller sind 
spendiert worden, damit im Spitzenbelastungsfall die CPU noch was 
anderes tun kann, z.B. CAN messages abzuholen oder USB (ebenfalls 
unterstuetzt mit einer eigenen DMA).

Soweit ich weiss sind so langsam die Teile der Rev "B" zu haben, die 
haben fast alle Erratas soweit bekannt beseitigt und laufen auch volle 
Geschwindigkeit bei 72 MHz. Die kommen und gehen sehr schnell bei 
Digikey. Zu meinem Erstaunen gibt es dort einige LPC24xx, im Grunde 
dasselbe Teil aber zusaetzlich mit einem externen Bus.

STR73x wuerde ich deshalb nicht unbedingt empfehlen, weil es sich um 
wirklich alte Technologie handelt und sobald die Automotive Anwendung 
mal nicht mehr in Serie produziert wird es wohl auch mit der 
Restlebensdauer des STR73x nicht mehr so lange hin sein. Der STR75x ist 
da eine ganz andere Geschichte, der ist noch recht jung, gefertigt in 
viel neueren Prozessen und kann auch 5V, den wird es wohl noch lange 
Zeit geben, ebenso den STR9x, der zwar dafuer, dass es ein ARM9 ist in 
der Performance zu wuenschen uebrig laesst aber sich definitiv mit den 
schnellsten ARM7 messen kann. Also wenn ST, vielleicht muss es nicht 
gerade der 730 sein.

Gruss, Robert

von Tobias M. (mhad-ngad)


Lesenswert?

Hallo Robert,
wo ich dich gerade am Wickel habe: Ich habe mich eben mal durch das 
Errata des LPC2378 
http://www.standardics.nxp.com/support/documents/microcontrollers/pdf/errata.lpc2378.pdf
gewühlt. Da ist der CAN.1 Fehler nach wie vor nicht behoben. Allerdings 
verstehe ich die Fehlerlösung nicht so richtig:

Workaround:1. Recovering from this situation is only possible with a 
soft reset to the CAN controller.
2. If software cannot read all messages in time before a third message 
comes in, it is recommend to change the acceptance filtering by adding 
further acceptance filter group(s) for messages, which are normally 
rejected. With this approach, the third incoming message is accepted and 
the Data Overrun condition is avoided. These additional messages are 
received with the corresponding
group index number can be easily identified and rejected by software.

1. Mit einem Softreset des CAN controllers kriege ich ihn wieder zum 
Laufen.
2. Wenn die Software es nicht packt, die Receive Buffer zu leeren, bevor 
eine dritte Nachicht den Data Overrun auslöst, dann soll man die 
Acceptance Filter so anpassen, dass Sie Nachrichten durchlassen, die sie 
vorher geblockt haben, weil dann die dritte Nachricht ohne auslösen des 
Overruns akzeptiert wird? Das widerspricht sich doch irgendwie...denn 
gerade wenn diese dritte Nachricht dann durchkommt, versucht er sie in 
einem der Receive Buffer abzulegen und merkt, dass die noch nicht 
gelesen worden ist und schon ist der Overrun da...oder nicht?

Gruß

Tobias

von crazy horse (Gast)


Lesenswert?

tja, das scheint ne ewige und schwierige Geschichte zu sein, so ein 
CAN-Controllerchen zu integrieren.
Ich hätte da echt keinen Bock drauf, mich mit solchen Dingen 
rumzuschlagen. Für kleines Geld gibts den MCP2515 oder SJA1000. Damit 
habe ich immer schnell und effektiv alle CAN-Probleme erledigen können 
und auf getestete und funktionierende Software zurückgreifen können. 
Nebenbei erlaubt das mir,den Controller meiner Wahl zu nehmen.
Ein Design läuft mit dem AT90CAN128, dass hat mich ne Menge Zeit 
gekostet :-(.

von Andreas K. (a-k)


Lesenswert?

crazy horse wrote:

> tja, das scheint ne ewige und schwierige Geschichte zu sein, so ein
> CAN-Controllerchen zu integrieren.

Und die Ironie daran ist, dass auch Microchip selbst von dieser Seuche 
befallen ist. Auch da hat der Versuch, µCs mit integriertem CAN 
rauszubringen, vor allem für deftig gewürzte Buglisten gesorgt 
(PIC18Fx58,2580,PIC30,PIC24-ECAN). Während der MCP2515 in der aktuellen 
Version vergleicherweise sauber ist.

von Tobias M. (mhad-ngad)


Lesenswert?

Hmm, ich habe schon in mehreren Designs PIC18F4580 und PIC18F8680 
benutzt. Da hatte ich überhaupt keine Probleme mit den integrierten 
CAN-Controllern.

Gruß

Tobias

von Andreas K. (a-k)


Lesenswert?

Mag sein, aber dessen Bugs sind ärger als die vom MCP2515.

Was mich besonders stört, ist ein Bug, der scheinbar in allen 
integrierten Versionen drin steckt und bislang nur im MCP2515 behoben 
wurde: Wenn aus irgend einem Grund an passender Stelle in der Interframe 
Gap eine Störung kommt, dann kann ein Frame mit falscher ID 
rausrutschen, dessen CRC zur defekten ID passt, somit nicht als defekt 
erkennbar ist. Das muss allerdings kein Problem sein - ist das Timing 
aller Nodes in Ordnung und der Bus sauber, dann passiert nichts.

Auch ein paar andere Bugs von 2580 stören mich etwas. Insgesamt wirkt 
der alte 258 auf mich diesbezüglich besser als der 2580.

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

Andreas Kaiser wrote:
> Und die Ironie daran ist, dass auch Microchip selbst von dieser Seuche
> befallen ist. Auch da hat der Versuch, µCs mit integriertem CAN
> rauszubringen, vor allem für deftig gewürzte Buglisten gesorgt
> (PIC18Fx58,2580,PIC30,PIC24-ECAN). Während der MCP2515 in der aktuellen
> Version vergleicherweise sauber ist.

Das ECAN Modul in den neuen dsPICs ist wesentlich überarbeitet im 
Vergleich zum "alten" MCP2515. Die haben zB DMA.
Ich hab die ECAN Module der 33er schon benutzt und ich kann berichten, 
dass die Sache funktioniert. Die im Errata beschriebenen Probleme 
beziehen sich eher auf Randanwendungen die wohl sogut wie nie vorkommen 
(zB: Loopback Mode).

Die Erratas der LPC hingegen haben mich bis jetzt immer davon abgehalten 
diese mal zu testen.

von Andreas K. (a-k)


Lesenswert?

Willivonbienemaya .. wrote:

> Die im Errata beschriebenen Probleme
> beziehen sich eher auf Randanwendungen die wohl sogut wie nie vorkommen
> (zB: Loopback Mode).

Mich stören die Probleme mit den Error Countern. Denn ein Randproblem 
ist das mitnichten - eine Node allein am Bus und man ist in nullkommanix 
am Limit. Auch die Overflow-Problematik ist ärgerlich.

Und das erwähnte Interframe Gap Problem ist trotz der Überarbeitung 
drin.

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

Ja, eigentlich hast du da recht.
Bei mir funktioniert der CAN zwar ganz gut, aber wenn ich mir anschau 
was da schon alles als "workaround" im code steht stimmts schon. das 
muss nicht sein.

von Christian R. (supachris)


Lesenswert?

Nochma zum Anfang zurück: Wenn du eh schon eine CF-Karte da dran hast, 
ist doch das einfachste, parallel an den ATA-Bus, den der ARM zur 
Verfügung stellt, einen Cypress 68300 dran zu hängen. Der kann 
Bus-Sharing, wenn du dann das USB Kabel ansteckst und den einen Pin da 
freigibst, meldet der sich als Massenspeicher an, und du kannst die 
Daten von deiner CF-Karte mit einigen MByte/s runter ziehen.
So machen wir das. Eine Logik sorgt dafür, dass jeweils der andere 
ATA-Master den Bus auf Tristate schaltet.

von Tobias M. (mhad-ngad)


Lesenswert?

Hi Chris,
dann müsste ich aber die Daten in FAT auf der Karte ablegen, oder?

Gruß

Tobias

von Condi (Gast)


Lesenswert?

Jain, nur das auslesen unter Windows wird schwerer da du direkt auf den 
Speicher zugreifen musst. Du kannst die auch im Rechner formatieren und 
dann eine Große Datei anlegen und dann nur zwischen den End und 
Anfangsblöcken der Datei auf die Karte schreiben.

Kannst du nicht auch ne 2te Karte reinbauen? Kann ja auch SD oder so 
sein, dann kannst du bei bedarf auf die Karte kopieren und dann per 
Kartenleser auslesen. Dann kann der auch weiter loggen.

Es gibt auch CF Sata converter.

von Tobias M. (mhad-ngad)


Lesenswert?

Hi, eine 2te Karte geht leider nicht, da die Größe der Schaltung 
kritisch ist und sie im Fahrzeug so verbaut sein wird, dass man nicht 
rankommt.

Gruß

Tobias

von Condi (Gast)


Lesenswert?


von Tobias M. (mhad-ngad)


Lesenswert?

Hik,
danke für den Link. Allerdings wäre da natürlich das Problem, wie man 
beides zusammen nutzbar auf einer Platine vereint. Also auf der einen 
Seite auf die SD-Karte schreiben, auf der anderen Seite per USB 
auslesen. Da müsste ich vermutlich auch per FAT auf die Karte schreiben. 
Warum ich immer auf FAT rumreite: Die Datenraten, die von meinem Logger 
auf die Karte fließen, könnten so hoch werden, dass FAT deutlich zu viel 
Overhead erzeugt, abgesehen von der Implementierung, die ich ja auch 
noch hinbekommen muss :)

Mein momentaner Favorit wäre daher doch das Auslesen per LAN, da es 
vermutlich auch von der externen Beschaltung die kleinste Lösung ist. 
Leider hat sich noch niemand dazu geäußert, ob er Erfahrung mit dem 
LAN-Durchsatz der LPCs hat.

Gruß

Tobi

von Christian R. (supachris)


Lesenswert?

FAT muss nicht sein. Kannst die Karte dann auch über die Windows API 
Funktionen als RAW-Device öffnen und blockweise auslesen. CreateFile(..) 
in der MSDN ma suchen.
Das geht dann auch von beiden Seiten recht fix. Also µC und Windows. 
Kannst ja dann immer blockweise sehr schnell schreiben, ohne auf Dateien 
usw. zu achten.

von Tobias M. (mhad-ngad)


Lesenswert?

Hmm,
damit wäre der Cypress doch wieder im Spiel. Habt Ihr gute Erfahrungen 
damit gemacht? Gibt es irgendwelche Fallen, auf die ich achten sollte?

Gruß

Tobias

von Christian R. (supachris)


Lesenswert?

Also wir haben den mittlerweile in 2 Projekten im Einsatz. In der 
beschriebenen Konfiguration. Wichtig ist vor allem ein sauberer und 
SCHNELLER Reset. Da gibts aber ein Dokument bei Cypress. Reset 
Conditions oder sowas.
Ein RC-Glied am Reset geht nicht, es muss ! ein Reset-Chip sein.
Ansonsten Plug&Play. Einstecken, EEPROM Programmieren, neu anstecken 
Festplatte.

Wenn du ohne FAT arbeitest, musst du vorher abklären, ob Windows 
überhaupt einen Laufwerksbuchstaben vergeben will....aber soweit ich das 
in Erinnerung hab, kann man auch auf physikalische Laufwerke 
zugreifen....müsste man dann bloß rausfinden, wo genau das Laufwerk 
hängt.
Aber das lässt sich ja mit einem Kartenleser und einer unter Linux auf 
EXT2 oder so formatierten Karte im Vorfeld abklären. Ansonsten ist FAT 
ja nicht sooo aufwendig, und bei einer nicht-fragmentierten Karte kannst 
du ja die Daten auch ein einem Fort draufschreiben.

Achso, und lies dir GENAU das Dokument zum Sharen des ATA-Bus durch.

von Tobias M. (mhad-ngad)


Lesenswert?

Das ist gut zu wissen, danke! Man neigt ja doch zum Überlesen, wenn man 
nur bestimmte Infos sucht ;) Ich muss zugeben, dass ich noch nicht das 
ganze Datenblatt gelesen habe bzw. nur überflogen, kann man das EEPROM 
des Chips per USB programmieren?

Gruß

Tobias

von Christian R. (supachris)


Lesenswert?

Ja, da gibts eine Manufactoring Software samt Treiber von Cypress. Ohne 
progr. EEPROM meldet der sich als Manufactoring Device. Dann einfach das 
passende File rein und gut ist. Ist aber alles gut beschrieben. Beim 
Layout solltest du gleich einen Jumper in der SDA-Leitung des EEPROMS 
vorsehen, da kannst du immer wieder programmieren. Einmal als 
Massendatenspeicher programmiert lässt es sich schwer wieder in den 
Urzustand zurück versetzen. Mit Jumper gehts prima. Machen wir immer so.

von Tobias M. (mhad-ngad)


Lesenswert?

Vielen Dank für die Tipps!

Gruß

Tobias

von Olly K. (rossi75)


Lesenswert?

2921 wrote:
> Der unguenstige Aspekt an USB ist einen PC Treiber zu schreiben.

Es gibt ne Firma "Thesycon", die bieten einen selbstkonfigurierenden 
Treiber an... Ist allerdings kommerziell und kostet etwa 1500 Euro für 
die nicht-share/free-ware-Version

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.