Stránka 1 z 1
Seznámení s ethernetem
Napsal: 04 srp 2016, 21:09
od Wolfik
V rámci projektu se potřebuju obecně seznámit s ethernetem. Ve výsledku bude použita gigabitová varianta s kombinací softcoru v fpgačku (UDP přenost dat), ale pro začátek si chci tuto technologii osahat s kombinací s ARMama od ST kvůli zkušenostem na 10/100 Mbit.
Mohli byste prosím doporučit s čím začít? Kolega mi doporučil kity s KSZ8091RNB, koukám, že docela letí obvody ENC28J60 atd. Jak zhruba se pak liší práce s ARMama, co mají už nějakou ethernet periferii vestavěnou?
Napsal: 04 srp 2016, 22:35
od HiGhLaNdEr
Doporučuju prostudovat OSI model.
ENC28J60 je kompletní síťová karta která řeší i mac vrstvu.
KSZ8091RNB je jen konvertor MII na ethernet. Musí mít u sebe něco co řeší tu MAC vrstvu.
Pokud má jednočip integrovanou MAC vrstvu a má MII tak bude použit KSZ8091RNB, pak softwarově nad tím už musí být jen tcp/ip obsluha protokolu.
ENC28J60 se hodí k jednočipum který nemaji integrovanou MAC vstvu.
https://cs.wikipedia.org/wiki/ENC28J60
Chová se to jako síťová karta v PC. má to zběrnici pro setup a data a nohu pro vyvolání přerušení od prijatých dat. Aby to jednočip mohl zpracovat v obsluze protokolu TCP/IP.
V podstatě stejně se bude chovat intergrovaná MAC vrstva v nějakém pokročilejším jednočipu.
Ty softwarově nebudeš řešit jaký máš jednočip. Budeš používat hotovou obsluhu TCP/IP pro daný jednočip. Je potřeba nastudovat jak funguje TCP/IP protokol.
Napsal: 05 srp 2016, 13:07
od Wolfik
díky za rady
pro záčátek zkusím STM32F4DISCOVERY s rozšiřující deskou STM32F4DIS-BB. Samotný mcu by mělo mít nějakou MAC vrstvu v sobě a na rozšiřující desce je nějaký obdobný čip s převodem mii na ethernet.
Napsal: 05 srp 2016, 14:25
od Cowley
A co pouzit nejaky hotovy modul, treba od Lantronixu? X-port?
Napsal: 05 srp 2016, 20:36
od Cowley
Omlouvám se, že jsem nepochopil zadání
Budu o to víc sledovat další příspěvky

Napsal: 23 srp 2016, 08:15
od Wolfik
Rozběhal jsem po několika dnech udp komunikaci a ještě s tím blbnu.
Zkoušel jsem orientačně změřit rychlost odesílání dat přes dobu provedení kódu (měřeno pomocí časovače plus dodatečné ověření přes togglovaní GPIO a měření časového intervalu přes logický analyzátor).
Mám něco takového (STM32F407VG@168MHz, Raw mode lwip):
500B užitečných dat na paket:
80Mbit/s - bez zpoždění
30Mbit/s - se zpožděním (80us)
200B užitečných dat na paket:
48Mbit/s - bez zpoždění
15Mbit/s - se zpožděním (80us)
Tedy mcu nic nedělá než odesílá bloky dat nebo ještě k tomu řeší krátké obsluhovací rutiny.
Mohli by ty hodnoty odpovídat reálu nebo jsem se někde hrubě sekl?
Na tyhle věci nemám ještě inženýrský odhad

Napsal: 23 srp 2016, 17:04
od Wolfik
počítal jsem to bez hlaviček - vzal jsem délku dat v udp datagramu * 8 * počet odeslaných paketů / (doba trvání kódu * 1024^2 - převod na Mbit/s)
Wireshark hlásí u přijatých paketů bez dat IPV4 total length 28B, UDP část má délku 8B.
Zkoušel jsem ještě utilitku Jperf (echo tam a zpátky) a ta tvrdí při 200B/500B datech na paket maximálně 70 Mbit/s
Nevím jak to myslíš s tou obsluhou, ale používám zprovozněný lwip, který tyhle věci řeší za mě (aspoň myslím). Zachytil jsem wiresharkem protokoly ICMP, ARP od mcu kitu s korektní komunikací pokaždé, když změním mac adresu vrstvy
Napsal: 23 srp 2016, 20:21
od Wolfik
mohl bys mi prosím vysvětlit, jak si došel k tomu součtu 110 Mbit/s?
Napsal: 24 srp 2016, 08:36
od Wolfik
jak jsem psal, tak jsem měřil dobu provádění úseku kódu, kde jsem posílal třeba 1000 paketů s tím, že payload byl určité délky (200B nebo 500B) naplněný nějakým balastem.
Takže např pro 500B payload, 10 000 paketů jsem změřil dobu provádění 1100ms.
Takže (500B × 8b × 10000paketů) ÷ (1,1s * 1024²) ≈ 34,7Mbit/s - rychlost přenosu užitečných dat
Proto jsem nechápal, kde jsi sebral těch 110Mbit/s, protože když k těm 500B přičtu 28/32B z hlaviček upd+ipv4, tak se požadavky na rychlost zvýšej o jednotky Mbit a ne o desítky...aspoň podle mě
Jak jsem psal, tak jsem zkoušel ještě utilitku Jperf, ale čistě jenom jako echo -tam a zpátky pro tisíce opakování...předtím to bylo, že přišla udp zpráva, co spustila pak valení tisíců paketů s udp datagramy.
Jperf mi pak házelo různý rychlosti pro různou délku dat, ale víc jak nad 70Mbit/s jsem se nedostal
Specifikace tvrdí, že do ethernetového rámce se dá cpát nějak těch 1500B payload...jelikož v cílové aplikaci bude na aplikační vrstvě jednoduchej protokol, tak si nemůžu dovolit jakoukoliv fragmentaci payload v ethernetovém rámci. Proto jsem zkoušel těch 200 nebo 500B na udp datagram. Stále do toho pomalu pronikám, tak nevím jestli tvrdím blbosti, protože se setkávám s názory (ať podložené zdrojem nebo ne), že v praxi lze posílat max 512B payloadu bez fragmentace, jinde zas, že to číslo je kolem 200B atd.
Teď se přesouvám na hw/sw army (čistý cpu nebo softcore mcu) na fpgačkách (to bude masakr

), protože bude třeba řešit přenos dat kolem 200-400 Mbit/s. Tam chci taky zprovoznit něco podobného.
Napsal: 24 srp 2016, 11:02
od Wolfik
a když to bude připojeno přímo na PC?
Napsal: 24 srp 2016, 11:16
od rnbw
A navyse UDP paket moze len tak zahodit, ked ho nestihne spracovat.
Napsal: 24 srp 2016, 12:16
od Wolfik
omlouvám se...po ujasnění s kolegou jsem se dozvěděl, že aplikační protokol má část řešící pořadí zpráv. Pokud se něco ztratí, tak se to neřeší - jde o valení dat vybraný z AD převodníků, kde nemá cenu řešit nedoručené pakety.
Narážel jsem na problém fragmentace a až teprve vím, že z pohledu obsluhy se to neřeší-buďto se ztratí celý paket nebo část fragmentu.
Zkoušel jsem třeba echo na 1500-2000B a na některé pakety jsem dostával jak od serveru tak od mcu ICMP zprávy (Time-to-live exceeded, Fragment reassembly time exceeded).
Jak do toho pronikám, tak si říkám, jestli jsem neměl jít studovat IT
