Anfängerfrage: Board mit Cortex-M4 und Ethernet

Gast #5830713
Lesenswert?

Hallo,

Ich suche ein Board mit Cortex-M4 und der Möglichkeit, dass ich Ethernet 
nutzen kann, um über TCP/IP zu kommunizieren (zB Webserver/Client).

Im Grunde ist die Sache klar: soweit ich das verstanden habe, brauche 
ich irgendein Board, welches den MAC-Teil implementiert und kann dann 
irgendein PHY Breakout Board wie z.B. das DP83848 nutzen, korrekt? Als 
Board würde ich z.B. ein STM32F407 nehmen.

Nun bin ich etwas unerfahren in dem Thema und habe ein paar Fragen.

Wenn ich LwIP nutze, was soweit ich das sehe die Standard Lösung für 
TCP/IP für so ein Board ist, wie viel RAM und ROM verbrauche ich damit 
grob?

Was wäre eine geeignete (= einfache und effiziente) Möglichkeit, um 
Daten während der Ausführung des Programmes auf dem Mikrocontroller 
rauszuschreiben? Ich würde gerne nachvollziehen, was das Programm auf 
dem Board gemacht hat :)

Habt ihr sonst noch Hinweise oder Empfehlungen für mich? Im Prinzip 
hätte ich gerne ein nicht allzu teures Setup (also kein 200€ 
Entwicklerboard). Und wenn ich das richtig sehe, dann ist ein STM32F407 
recht verbreitet, d.h. ich habe gute Chancen, Tutorials/HowTos, 
Antworten auf meine sicherlich aufkommenden Fragen und funktionierende 
Tools zu finden, richtig?
Gast #5830737
Lesenswert?

>Im Grunde ist die Sache klar: soweit ich das verstanden habe, brauche
>ich irgendein Board, welches den MAC-Teil implementiert und kann dann
>irgendein PHY Breakout Board wie z.B. das DP83848 nutzen, korrekt?

Ja.

>Als Board würde ich z.B. ein STM32F407 nehmen.

Nimm ein Nucleo Board, da gibt es viele wo Ethernet schon komplett drauf 
ist. Kein basteln notwendig, eine Fehlerquelle weniger.
Gast #5831253
Lesenswert?

Danke, ich gucke mir die Nucleos mal an. Ich verstehe nicht so genau wo 
die Unterschiede zwischen den beiden Reihen im Detail liegen. Die 
Nucleos sind hauptsächlich mir Arduino Shields kompatibel, oder? Aber 
ich vermute mal, es wird sowieso keinen Unterschied für mich machen. 
Letztendlich brauche ich weder OS, noch ganz spezielle Schnittstellen 
(außer Ethernet natürlich).

Danke!
Gast #5831330
Lesenswert?

Muz123 schrieb:
> Danke, ich gucke mir die Nucleos mal an. Ich verstehe nicht so genau wo
> die Unterschiede zwischen den beiden Reihen im Detail liegen.

Welche Reihen von was?

> Die Nucleos sind hauptsächlich mir Arduino Shields kompatibel, oder?

Das ist nur ein zusätzliches Bonus-Feature. So richtig kompatibel sind 
sie aber nicht, da viele Pins nur 3,3V unterstützten und mit anderen 
Funktionen belegt sind. Nur wenige Shields passen dazu.

Die "normalen" Anschlüsse sind die doppelreihigen Stiftleisten, heißen 
Morpho-Connector.
Gast #5831352
Lesenswert?

Dumpfbacke schrieb:
>> Welche Reihen von was?
> Er meint die Reihe von Discovery(ies) und die Reihe von Nucleos.

Es gibt zahlreiche Nucleo-64 Boards, die sich im Prinzip nur durch den 
aufgelöteten Mikrocontroller unterscheiden.

Siehe 
https://www.st.com/content/ccc/resource/technical/document/user_manual/98/2e/fa/4b/e0/82/43/b7/DM00105823.pdf/files/DM00105823.pdf/jcr:content/translations/en.DM00105823.pdf

Bei der Nucleo-144 Reihe ist das auch so, wobei nicht alle Boards mit 
Ethernet Anschluss bestückt sind.

Siehe 
https://www.st.com/content/ccc/resource/technical/document/user_manual/group0/26/49/90/2e/33/0d/4a/da/DM00244518/files/DM00244518.pdf/jcr:content/translations/en.DM00244518.pdf
Gast #5831371
Lesenswert?

Muz123 schrieb:
> Letztendlich brauche ich weder OS

LwIP passt gut zur Nutzung mit RTOS. Es geht aber auch ohne, da lwIP 
komplett asynchron programmiert ist. Ohne RTOS kann man aber nur das 
"raw" API nutzen. Das ist sowieso am Effizientesten, aber umständlicher 
zu bedienen als das auch von Linux/Unix bekannte Socket-API.
#5831382
Lesenswert?

Stefanus F. schrieb:
> Bei der Nucleo-144 Reihe ist das auch so, wobei nicht alle Boards mit
> Ethernet Anschluss bestückt sind.
>
> Siehe
> 
https://www.st.com/content/ccc/resource/technical/document/user_manual/group0/26/49/90/2e/33/0d/4a/da/DM00244518/files/DM00244518.pdf/jcr:content/translations/en.DM00244518.pdf

Ähhm, ja, das von mir oben erwähnte F446ZE-Nucleo hat natürlich keinen. 
Stattdessen dann eben ein Nucleo mit F429ZI oder F439ZI nehmen.
Gast #5831401
Lesenswert?

Ich habe mit dem Ti msp432 gute Erfahrungen:
https://www.mouser.at/ProductDetail/Texas-Instruments/MSP-EXP432E401Y?qs=j%252B1pi9TdxUbU%2FFmadQLPsg

Der uC hat die Ethernet Phy bereits integriert.

Bei den Beispielen, die mit dem Board kommen, ist ein Webserver und ein 
Client bereits dabei. Neben lwip kannst du auch den Ti eigenen Stack 
verwenden.
Neben Freertos ist auch das Ti eigene rtos dabei.

Ein einfacher Webserver und Client braucht ca 50 MB, RAM, ohne Rtos.
#5832014
Lesenswert?

udok schrieb:
> Ich habe mit dem Ti msp432 gute Erfahrungen:
> 
https://www.mouser.at/ProductDetail/Texas-Instruments/MSP-EXP432E401Y?qs=j%252B1pi9TdxUbU%2FFmadQLPsg
>
> Der uC hat die Ethernet Phy bereits integriert.
>
> Bei den Beispielen, die mit dem Board kommen, ist ein Webserver und ein
> Client bereits dabei. Neben lwip kannst du auch den Ti eigenen Stack
> verwenden.
> Neben Freertos ist auch das Ti eigene rtos dabei.
>
> Ein einfacher Webserver und Client braucht ca 50 MB, RAM, ohne Rtos.

kB bitte. 50MB hat der MSP432 nicht. Ich stimme dem zu. Bei meinem 
Arbytegeber habe ich mehrere Designs mit TI TIVA TM4C129 am Laufen. 
Diese Serie ist sehr sehr ähnlich zum MSP432, bietet aber mehr Auswahl. 
Und das TI RTOS ist auch sehr in Ordnung.

Anderer Vorschlag: PIC32. Ist zwar kein ARM, aber in der gleichen 
Leistungsklasse. Der Microchip Stack ist nach meiner Erfahrung deutlich 
besser als lwIP. Als Tipp: Lass die alten PIC32MX6xx/7xx liegen und nimm 
PIC32MZ EF. Damit bekommst Du fürs gleiche Geld einfach Faktor 2.5 mehr 
Rechenleistung.

fchk
Gast #5832373
Lesenswert?

Christopher J. schrieb:
> Muz123 schrieb:
>> Als Board würde ich z.B. ein STM32F407 nehmen
>
> Das ist aber kein Board, sondern ein Mikrocontroller

Stimmt, habe mich etwas unglücklich ausgedrückt :)
Und ja, ich meinte Discovery Boards vs Nucleo Boards.

Ich gucke mir eure Vorschläge später mal im Detail an, vielen Dank 
jedenfalls schon mal!

> Ein einfacher Webserver und Client braucht ca 50 MB, RAM, ohne Rtos.

Das ist schon relativ viel, zur Not aber okay. Wie kommt man denn dann 
z.B. auf die 4 KB, oder überhaupt in die Region deutlich unter 50 KB?
Gast #5832483
Lesenswert?

Ich würde mich jetzt einfach für ein F429ZI oder F439ZI entscheiden.

Ich kann aber nirgends ablesen, wie viel RAM so ein Ding jetzt hat. 144 
Pins, 2MB Flash, usw, usf. Aber RAM? Ich finde nur allgemeine 
Datenblätter wo für eine ganze Serie, zB F429/F439 "up to X MB" steht.

Außerdem: Brauche ich einfach Micro-USB B? Es ist etwas verwirrend, weil 
an manchen Stellen etwas von Micro-USB AB steht.
Gast #5832790
Lesenswert?

Muz123 schrieb:
> Wie kommt man denn dann z.B. auf die 4 KB

Mit kleinen Puffern und kleinen Window-Sizes (im Extremfall 1, wie bei 
µIP). HTTP Responses werden während der Auslieferung blockweise 
generiert. Schön bunte HTMl Seiten liefert man damit aber wohl eher 
nicht aus.

8bit Quelltext und ein paar Screenshots: 
http://stefanfrings.de/net_io/index.html

Bitte nicht nachmachen. Der knappe Speicher nervt kollossal, heute macht 
man so etwas mit 32bit Controllern.
Gast #5833624
Lesenswert?

> Und die sind ziemlich segmentiert.

Oh. Mangels Erfahrung: Was sind die konkreten Auswirkungen? Kann ich das 
effizient nutzen bzw wird das irgendwie wegabstrahiert? Oder muss ich 
dann unschöne Dinge tun, wie, statt Speicher ganz normal auf dem Stack 
oder per malloc zu allozieren, selbst die Adressen auf den übrigen RAM 
Blöcken managen?

> Mit kleinen Puffern und kleinen Window-Sizes (im Extremfall 1, wie bei
µIP).

> Mit kleinen Puffern und kleinen Window-Sizes (im Extremfall 1, wie bei
µIP).

Zur Einordnung, kann man damit sinnvoll arbeiten? Ich brauche keinen 
schicken Webserver, der Webserver ist eigentlich nur Mittel zum Zweck 
und es werden Daten kommuniziert. Ist aber eher als Proof of Concept zu 
verstehen, daher ist es auch egal, ob die Kommunikation jetzt X mal so 
lange dauert :) Wenn man dafür 50 KB RAM einspart (und man sie braucht), 
könnte man das überlegen. Das ist nichts, was ich direkt im ersten 
Schritt machen will, aber ich könnte es im Hinterkopf behalten.
Gast #5833947
Lesenswert?

Muz123 schrieb:
>> Mit kleinen Puffern und kleinen Window-Sizes (im Extremfall 1, wie bei µIP).
> kann man damit sinnvoll arbeiten?

Ja kann man.

Schau Dir das bereits genannte Ethernet-IO Projekt an 
(http://stefanfrings.de/net_io/index.html). Es funktioniert sehr 
zuverlässig. Gut genug für Alarmanlagen in Ferienhäusern und 
Beleuchtungsanlagen in Produktionshallen. Ich habe davon 8 Produkte 
verkauft ohne eine einzige Reklamation. Für mich war es nur ein 
Hobby-Projekt, die Firma Chip45 verkauft diese Dinger als Modul.

Kleine Puffer bewirken, dass mehr Ethernet Pakete übertragen werden 
müssen, was die Performance herab setzt. Im lokalen Netz merkt man das 
kaum, bei längeren Strecken übers Internet aber schon.

Wenn die Windows-Size kleiner ist, als von der Gegenstelle erwartet, 
entsteht nach jeden einzelnen Paket ein Delay von 200ms, bis es 
quittiert wird und damit die Übertragung des nächsten Paketes 
ermöglicht. Bei Webseiten sieht das in der Praxis so aus, das die 
Webseite Stückweise geladen wird, mit sichtbaren Pausen (200ms) zwischen 
den Paketen. Bei den Seiten meiner Ethernet-IO Firmware sind das 2-4 
Stücke. Der Effekt ist unter Windows wesentlich stärker ausgeprägt, als 
unter Linux.

Bei selbst geschriebenen Programmen, die mit dem µC kommunizieren, 
kannst du im Client die Option TCP-NODELAY setzen, dann wird jeden Paket 
vom Client sofort quittiert, so dass die 200ms Pausen entfallen.

Bei UDP gibt es keine Verzögerungen, weil UDP nicht auf Quittierungen 
wartet.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren