UDP komunikace na Zynq/Microblaze (lwip, Vivado, SDK)

Už jsem to pořešil. Jak jsem psal, “síťařinu se teprv učím…” :smiley: :smiley:
Šlo v módu klienta o to, že přijímané udp pakety neměli platný source port. Utilitka na straně PC, co používám na odesílání definovaných udp/tcp paketů, defaultně vybírá jako zdrojový “volný port”. Zkrátka pokud z desky posílám udp datagram se zdrojovým portem xxx a cílovým portem yyy, tak odpověď od serveru bude mít ty porty přehozené. Já jsem měl cílový port správně, ale zdrojový byl nějkaý náhodný, co zrovna systém vybral.

Rozdíly v použití LWIP mezi platformama nejsou - je to “čisté Céčko” nezávislé na platformě. Liší se to jenom inicializací toho stacku na driver obsluhující mac vrstvu napojenou na fyzickou (nějakej phy čip s rozhráním mii/rmii/gmii/rgmii…). Ten driver je třeba napsat nebo použít od výrobce - ST má jak pro SPL tak pro HAL (ta STCube pičovina) pro jednotlivé mcučka pro uživatele připravený. To samé Xilinx…pro mě to jsou zdrojové molochy, tak jsem to jen převzal a použil podle dostupných příkladů od výrobce.
Pak je s tím práce stejná pro RAW mode. Ty vyšší (prý pohodlnější) módy, co potřebujou nějaký OS jsem nepoužíval - s RTOS mám chabé zkušenosti a nějaké programování s BSD socketama na Linuxu jsem nedělal.

Ano univerzální sběrnice AXI. V Zynqu má ten ARM ještě hardwarový bloky jako je třeba mac kontrolér. GPIO výstupy toho procesoru včetně bloků jsou natvrdo nadrátovaný na nějakej pin čipu (PS část) a nedájí se překonfigurovat jako u programovatelné logiky fpga části (PL část).
Soft procesor microblaze je vytvořenej v PL logice a defaultně k sobě tyto kontroléry nemá. Nijak mu nemůžeš nadrátovat ve volné PL logice tu hardwarovou PS část ARMu. Proto se mu musí ve volné PL části vytvořit MAC kontrolér s převodníkem na RMII (GMII v případě gigabitovýho ethernetu) nebo jeho obdoby. Vím, že existujou fpga free IP cores, co řeší čistě udp komunikaci, takže není potřeba použít lwip stack. TOhle je pro microblaze optimálnější řešení, protože ten procesor může tiká na PL části (max 200-300 MHz, zatímco ten hw ARM v Zynqu dělaj od 666MHz do 1GHz). Já ale VHDLkař nejsem, takže od toho zatím ruce držím pryč a hraju si jenom s procesorovou částí toho SoC čipu.