Newsgroup: it.hobby.elettronica.digitale
Titolo: Stack TCP/IP affidabile e relativo hardware

Dovrei realizzare una scheda di controllo con microcontrollore che, 
oltre alle tipiche periferiche di questi dispositivi (timer, GPIO, UART, 
USB), abbia anche una connettività Ethernet 10/100.
In giro esistono moltissime soluzioni, dagli 8 bit con stack minimali 
(con relative grosse limitazioni) a microprocessori a 32 bit (ARM o 
Atom) con sistemi operativi con uno stack TCP/IP completo.
Vorrei una soluzione intermedia, soprattutto per una questione di costo 
(dovrei sostituire una scheda che oggi mi costa una cinquantina di 
euro), ma al tempo stesso affidabile per quanto riguarda la connettività 
TCP/IP (verrà usato su Internet con la possibilità di avere anche 
connessioni multiple contemporanee).
In particolare vorrei anche aggiungerci un web server (tipo lighttpd) e 
quindi associare al micro una memoria su cui risiedono le pagine web di 
complessità media (vorrei fare affidamento almeno su una decina di MB di 
memoria per le pagine web).
Da un lato sono attratto dai sistemi operativi embedded (che hanno già 
un filesystem, il supporto USB, Ethernet, TCP/IP, web server, ecc. 
ecc.), dall'altro mi spaventano i costi, i tempi di accensione e la 
possibilità di gestire semplici task che venivano quasi gratis con un 
microcontrollore (alzare un pin di output, leggere un pin di input, fare 
un'acquisizione da un ADC esterno SPI, leggere l'orario da un RTC I2C, 
pilotare un piccolo display alfanumerico/grafico, gestire una piccola 
keypad).
Avete suggerimenti in merito?

Avete suggerimenti in merito?
Qui ci sono diversi esempi webserver con AVR, non sono ovviamente molto
performanti, vedi se ti possono servire:
 
http://tuxgraphics.org/electronics/
Puoi anche dare un' occhiata ad Ethernut, c'è la versione per AVR o ARM7-9, a
seconda delle performances, tutto HW e SW open source.  
 
http://ethernut.de/en/hardware/index.html
--
ciao
  Stefano

  
http://ethernut.de/en/hardware/index.html
Già questi potrebbero andare bene, però che mi dici di questo Nut/OS e
del suo stack TCP/IP? Quanto performante è? Limitazioni?
Mi sentirei più sicuro con un Linux embedded... ma su quali
piattaforme semplici gira?

piattaforme semplici gira?
Mah, un linux embedded � pesante per definizione perh� � un s.o., richiede tempi
di attesa di 20-30 secondi all'accensione e almeno un ARM9, anche se c'�
qualcuno che ha usato un ARM7 per versioni pi� stringate.
Se devi solo farci girare quello che hai detto non userei quella strada, ma �
solo una mia opinione.
--
ciao
  Stefano

 qualcuno che ha usato un ARM7 per versioni pi� stringate.
Si puo' usare uCLinux, su ARM7.
Linux richiede una MMU e quindi almeno un ARM9.
BTW, io ho usato il FreeRTOS su ARM7 NPX (LPC2378) e uno stack
TCP/IP minimale  (uIP) ma perfettamente funzionate che si
accompagna al free Rtos. Il tutto gira nella RAM interna:
se si usa della RAM esterna, si puo' utilizzare uno stack
piu' corposo...
http://www.freertos.org/
bye,
aa.

 solo una mia opinione.
Forse mi preoccupo inutilmente... :-)

 accompagna al free Rtos.
Immagino che la tua esperienza sia positiva. Come era collegato il tuo 
dispositivo? Una connessione diretta ad un computer oppure un 
collegamento ad un modem ADSL o che altro?
Hai fatto girare un web server su uIP? Quale e con quali prestazioni?
Leggendo la documentazione di uIP, sembra che ci siano parecchie 
limitazioni. Nella realtà, queste limitazioni si "sentono", oppure no?
 > Il tutto gira nella RAM interna:
 > se si usa della RAM esterna, si puo' utilizzare uno stack
 > piu' corposo...
Più corposo... che intendi dire? Allochi staticamente maggiore RAM per 
le operazioni dello stack?


Io penso di sì :-)
A parte gli scherzi, noi usiamo BeRTOS con lwIP, che è uno stack completo.
Richiede un bel po' di RAM e flash (decine di kb di ognuna), ma è 
abbastanza completo, e per adesso non ho trovato bug di sorta.
Ci ho fatto anche girare un webserver, servendo poche connessioni alla 
volta.
Dipende un po' da quello che deve fare la tua applicazione e da quanti 
utenti deve servire contemporaneamente.
Diciamo che fino ad una decina di utenti dovrebbe andare bene, se poi 
cominci a dover fornire decine di MB a centinaia/migliaia di utenti alla 
volta allora hai bisogno di un server in hosting :-)
Ciao!

 Vorrei una soluzione intermedia
TI Stellaris (Cortex-M3) con sopra lwIP. Va come il vento.
-- 
emboliaschizoide.splinder.com

Forse mi preoccupo inutilmente... :-)
Si, ti hanno gi� risposto, se devi fare solo uno stack TCP, lwIP va benissimo ed
� supportato anche su ARM7
--
ciao
  Stefano

 volta allora hai bisogno di un server in hosting :-)
Una decina di utenti dovrebbero andare più che bene. L'importante è
che
poi le ulteriori connessioni vengano semplicemente ignorate senza
mandare
in crisi il software.

 le operazioni dello stack?
Con lwIP hai uno stack completo, ma in questo caso e' meglio
aggiungere un banco di RAM esterno: nel nostro caso 32Mbyte
e una NAND flash come memoria di massa...con la sola memoria
interna della CPU NPX non c'e' abbastanza memoria per il freeRTOS
los tack IP e l' applicazione!
Via freeRTOS la memoria è gestica dinamicamente con malloc e free.
a.

 USB), abbia anche una connettivitï¿œ Ethernet 10/100.
Ciao,
non so qualcuno te l'abbia giï¿œ suggerito ma io ho utilizzato per 
un'applicazione simile i moduli Rabbit (in particolare ho utilizzato 
l'RCM4000 che ha 32 MB di NAND flash a bordo per le pagine web).
Non ha l'USB (ma ti serve Ethernet e USB sulla stessa scheda?) e forse 
il costo non rientra nel tuo budget (siamo sui 75$ per poche unitï¿œ) ma 
ha di corredo una buona libreria per quanto riguarda il TCP/IP.
Marco

 in crisi il software.
Ovviamente. Il tutto era mono utente: non venivano servite altre 
richieste fintanto che la pagina in corso non era stata inviata. Quindi 
le richieste erano di fatto serializzate. Se gli utenti sono pochi e le 
pagine da fornire non sono troppo pesanti (qualche decina di KB) con una 
decina di utenti, su una rete locale a 100Mb non ti accorgevi della 
serializzazione.

 hanno molti oggetti diversi.
In effetti stavo valutando anche questo.

 Nella flash del micro? Ma avevi un filesystem lì sopra?
Sì e no: le pagine non dovevano essere modificate quindi erano di 
fatto array, mi sono basato sull'esempio httpserver_raw di lwip.
-- 
  _|/ Francesco Sacchi - Develer S.r.l., R&D dept.
   |\ 
http://www.develer.com/
 - 
http://www.bertos.org

 piattaforme semplici gira?
Una piattaforma basata su una distribuzione Linux embedded sicuramente
ti mette al riparo da tanti problemi legati ad un firmware "custom".
Personalmente ti suggerisco di dare un occhio alla piattaforma XFlar
(
http://www.xflar.com
).
In particolare su questo modulo gira la distribuzione Linux Angstrom
(
http://www.angstrom-distribution.org
) su cui, con il gestore di
pacchetti ipkg puoi facilmente installare al volo un web server come
Cherokee (
http://www.cherokee-project.com
).
Senza troppe complicazioni hai a disposizione la gestione di server
virtuali, SSL, interprete PHP, CGI, Video streaming, etc.
Chiaramente puoi archiviare le tue pagine sui vari supporti a
disposizione (memoria flash, chiavetta USB, SD...).
Stefano