INHOUDSOPGAWE:

WIDI - Draadloos HDMI met behulp van Zybo (Zynq Development Board): 9 stappe (met foto's)
WIDI - Draadloos HDMI met behulp van Zybo (Zynq Development Board): 9 stappe (met foto's)

Video: WIDI - Draadloos HDMI met behulp van Zybo (Zynq Development Board): 9 stappe (met foto's)

Video: WIDI - Draadloos HDMI met behulp van Zybo (Zynq Development Board): 9 stappe (met foto's)
Video: HDMI, DisplayPort, DVI, VGA, Thunderbolt - Video Port Comparison 2024, Julie
Anonim
WIDI - Draadloos HDMI met behulp van Zybo (Zynq Development Board)
WIDI - Draadloos HDMI met behulp van Zybo (Zynq Development Board)
WIDI - Draadloos HDMI met behulp van Zybo (Zynq Development Board)
WIDI - Draadloos HDMI met behulp van Zybo (Zynq Development Board)

Het u al ooit gewens dat u u TV as 'n eksterne monitor aan 'n rekenaar of skootrekenaar kon koppel, maar wou u nie al die lastige toue in die pad hê nie? As dit die geval is, is hierdie tutoriaal net vir u! Alhoewel daar 'n paar produkte is wat hierdie doel bereik, is 'n selfdoenprojek baie meer bevredigend en moontlik goedkoper.

Hierdie konsep verskil van produkte soos chromecast, aangesien dit bedoel is om 'n HDMI -koord in te neem wat aansluit op 'n monitor in plaas van 'n stroomtoestel.

Ons projek is geskep as 'n finale projek vir 'n Real Time Operating Systems -kursus aan die California State Polytechnic University, San Luis Obispo.

Die doel van die projek is om twee Digilent Zybo-borde te gebruik om as die draadlose kommunikasie-koppelvlak tussen 'n HDMI-sender (rekenaar, blu-ray, ens.)

Die een Digilent Zybo word via HDMI aan die sender gestuur, en die ander via HDMI aan die ontvangende toestel.

Die draadlose kommunikasie sal geskied deur gebruik te maak van 'n draadlose plaaslike netwerk wat toegewy is aan die sender en ontvanger, sonder om deur 'n tuisrouter of ander sodanige toestel gestuur te word. Die draadlose module wat vir hierdie projek gebruik word, is die tplink wr802n nanorouter, waarvan die een as 'n toegangspunt werk om die netwerk te vestig en die ander om as 'n kliënt te werk om aan die netwerk te koppel. Elke nanorouter word via 'n ethernetkabel aan die Zybo -kaart gekoppel. As hulle aan hierdie routers gekoppel is, kommunikeer die toestelle via TCP asof hulle met 'n enkele ethernetkabel gekoppel is (wat beteken dat die enigste konfigurasie wat nodig is om 'n verbinding tot stand te bring, die IP -adres van die kliënt is).

Alhoewel die doel van die projek was om 'n stroom van 1080x720 video @ 60Hz te vergemaklik, was dit nie haalbaar nie as gevolg van bandbreedtebeperkings in die draadlose netwerk en die gebrek aan intydse videokompressie om die data wat nodig is om te stuur, te verminder. Hierdie projek dien in plaas daarvan as die raamwerk vir toekomstige ontwikkeling om hierdie doel te bereik, aangesien dit die beperkinge in raamtempo baie beperk het om HDMI -data behoorlik te stroom soos bedoel.

Projekvereistes:

2x Digilent Zybo Development Boards (moet ten minste een HDMI -poort hê)

2x HDMI kabels

2x mikroUSB -kabels (om Zybo aan die rekenaar te koppel vir ontwikkeling)

2x tplink wr802n nanorouters (insluitend adtl. 2x mikroUSB- en muuradaptere)

2x ethernetkabels

*** Opmerking: hierdie tutoriaal veronderstel vertroudheid met die Vivado -ontwerppakket en ervaring met die skep van 'n nuwe projek en blokontwerp. ***

Stap 1: Stel Zynq programmeerbare logika op vir die sender

Stel Zynq programmeerbare logika vir sender in
Stel Zynq programmeerbare logika vir sender in
Stel Zynq programmeerbare logika vir sender in
Stel Zynq programmeerbare logika vir sender in
Stel Zynq programmeerbare logika vir sender in
Stel Zynq programmeerbare logika vir sender in

Ons benadering tot die ontwikkeling van die programmeerbare logika van die sender was om 'n hdmi-to-hdmi-deurvoer vanaf 'n rekenaar uit te voer om te monitor met behulp van twee Video Direct Memory Access (VDMA) blokke, een vir skryf en een vir lees.

Albei is gekies vir vrylopende, 3 raam-buffer-modus (0-1-2). Aangesien die videokern vir 60 rame per sekonde geoptimaliseer is, beteken dit dat die VDMA elke 16,67 ms in hierdie volgorde na 'n nuwe raam sal skryf of lees: 0, 1, 2, 0, 1, 2, 0, 1, 2. Die DDR -geheue -liggings vir elke raam is anders vir die twee VDMA's omdat hulle nie meer met mekaar gesinchroniseer is nie. In plaas daarvan word 'n hardeware -timer (TTC1), gekonfigureer vir 60 Hz, gebruik om die beweging van data tussen die twee geheue -liggings te sinchroniseer.

Die prent hierbo toon 3 rame, hul afmetings en die hoeveelheid geheue wat elkeen benodig (regs van die raam). As ons die skryf -VDMA aan hierdie geheue -liggings toewys, kan ons die geleesde VDMA -geheue -liggings buite hierdie stel toewys, byvoorbeeld, begin met 0x0B000000. Elke raam bestaan uit 1280*720 pixels en elke pixel bestaan uit 8 bisse rooi, groen en blou vir 'n totaal van 24 bisse. Dit beteken dat 'n raam bestaan uit 1280*720*3 grepe (2,76 MB).

Binne die timer IRQ, wat beskryf word in die opstelling van die VDMA -bestuurder, hanteer die kopiëring van data tussen die twee VMDA -geheue -liggings. Die VDMA bied 'n wyser na die huidige raam waaruit geskryf of gelees word. Die raam word verteenwoordig deur 'n spesifieke grys kode, wat in sagteware omgeskakel word. Die definisies van die grys kode vir 'n 3 raambuffer-opset kan gevind word in die AXI VDMA-produkgids in aanhangsel C.

Dit stel ons in staat om die inhoud wat na die geheue geskryf is, te kopieer sonder om te lees uit 'n raam wat tans geskryf word.

*** Let daarop dat die geleesde VDMA nie gebruik word wanneer data oor die draadlose netwerk gestuur word nie. Die enigste doel daarvan is om die korrekte werking van die kopiëring van geheue uit die skryf -VMDA te verifieer. Die geleesde VMDA moet gedeaktiveer word. ***

Hier is die stappe om die senderblokontwerpblok te skep:

  1. As u 'n nuwe projek skep, is dit 'n goeie idee om 'n chip of bord aan die projek toe te ken. Hierdie skakel beskryf hoe u nuwe bordlêers by die Vivado -gids kan voeg en die regte bord met u projek kan koppel. Dit sal handig wees as u die verwerkingsstelselblok byvoeg en van hardeware na sagteware (SDK -kant) oorgaan.
  2. Voeg die volgende blokke by:

    • dvi2rgb
    • Video in Axi4-stroom
    • Tydsberekening kontroleerder
    • axi4-stream om uit te kyk
    • rgb2dvi
    • AXI VDMA x2
    • AXI GPIO x2
    • Klok towenaar
    • Konstante
    • Zynq -verwerkingstelsel
  3. As u die verwerkingsisteem byvoeg, klik op 'Run Block Automation' in die boonste groen gekleurde balk en maak seker dat die 'Apply Board Preset' opsie gekies is. Laat al die ander standaard.
  4. Beelde van elke blokkonfigurasievenster kan in die bostaande beelde gevind word. As u nie 'n prentjie vir 'n spesifieke venster sien nie, laat dit dan as standaard.
  5. Begin met die opstel van die Zynq -verwerkingstelsel:

    • Aktiveer M AXI GP0-koppelvlak in PS-PL-konfigurasie AXI, nie-veilige, aktiveer GP Master AXI
    • Aktiveer beide HP0 en HP1 in die PS-PL-konfigurasie HP Slave AXI-koppelvlak
    • In die MIO -konfigurasie Maak seker dat ENET0 aangeskakel is onder I/O -randapparatuur, en dan die toepassingsverwerker -eenheid, aktiveer die tydteller0
    • Aktiveer FCLK_CLK0 in Clock Configuration PL Fabric Clocks en stel dit op 100 MHz.
    • Klik op Ok
  6. Voordat u op 'Run Connection Automation' klik, moet u die videoblokke verbind soos in die TX -blokontwerp hierbo gesien. U wil die konstante hernoem na VDD en die waarde stel op 1. Verbind die videoblokke dienooreenkomstig.
  7. Maak die HDMI TMDS -klok en datapennetjies buite op die rgb2dvi- en dvi2rgb -blokke
  8. Skep 'n invoer- en afvoerpoort vir die warmprop -opsporingssein (HPD) en koppel dit aan mekaar; dit word gedefinieer in die beperkingslêer
  9. Die pixelklok word herstel van die TMDS_Clk_p, wat in die beperkingslêer geskep word. Dit sal 74,25 MHz wees volgens die resolusie van 720p. Dit is belangrik om die pixelklok (vanaf die dvi2rgb -blok) aan die volgende penne te koppel:

    • vid_io_in_clk (vid in na axi -stroomblok)
    • vid_io_out_clk (aksi stroom na vid uit blok)
    • clk (tydsbeheerder)
    • PixelClk (rgb2dvi)
  10. *** Opmerking: om die herstel van die pixelklok te aktiveer, moet die HDMI rx- en tx -verbindings tans in 'n aktiewe bron/wasbak gekoppel word. Een manier om dit te doen is om die video rx en tx blokke in verskillende klokdomeine te skei (met ander woorde, 'n nuwe 74,25 MHz klok genereer om na die tx -blok te voer). ***
  11. Stel dan die klokassistent in sodat u 'n 100 MHz-invoer (globale bufferbron) en 3 uitsetklokke @ 50 MHz (AXI-Lite-klok), 150 MHz (AXI4-stroomklok), 200 MHz (dvi2rgb RefClk-pen) het.
  12. Koppel die FCLK_CLK0 -verwerkingstelselpen aan die invoer van die klokassistent
  13. Klik op hierdie punt op "Run Connection Automation" in die groen balk bo -aan die ontwerpvenster. Dit is 'n goeie idee om dit vir een blok op 'n slag te doen en die TX -blokontwerp hierbo te volg.
  14. Die instrument sal probeer om die AXI Interconnect by te voeg, wat dien as die master/slave-verbinding vir die blokke wat die AXI-Lite-bus (VDMA's en GPIO's) gebruik.
  15. Dit sal ook AXI SmartConnect byvoeg, wat dien as die hoof/slaaf-verbinding vir die AXI4-Stream- en hoëprestasie-verwerkerskoppelvlakke wat deur die VDMA gebruik word (Stroom na geheue kaart en omgekeerd).
  16. Die instrument sal ook 'n verwerkingstelselherstel byvoeg. Maak seker dat dit slegs gekoppel is aan die VDMA's, GPIO's en verwerkerverwante blokke. Moet dit nie aan enige videoblokke koppel nie (dws dvi2rgb, tydsberekeningkontroleerder, vid om te stroom, ens.)
  17. As die outomatisering van die verbinding voltooi is, moet u seker maak dat die verbindings ooreenstem met die van die TX -blokontwerpbeeld. U sal 'n ekstra System ILA -blok sien wat nie genoem is nie. Dit is slegs vir ontfouting en is tans nie nodig nie. Dit maak gebruik van die 150M verwerkerterugstelling, dus dit is ook nie nodig nie. Oral waar u klein groen "goggas" op busse sien, is dit as gevolg van die ILA en kan dit geïgnoreer word.
  18. Die laaste stap is om met die rechtermuisknop op die blokontwerp in die boom van die projekbronne te klik en "Skep HDL Wrapper" te kies. As u van plan is om logika by die omslag te voeg, word dit telkens oorskryf wanneer dit gekies word.
  19. Sien die afdeling VDMA Driver Setup vir meer inligting aan die SDK -kant.

Horlosies en herstel

Ek het gevind dat die belangrikste aspekte van enige programmeerbare logika -projek deeglike oorweging is van klokdomeine en reset -seine. As dit behoorlik gekonfigureer is, kan u u ontwerp goed laat werk.

Pixelhorlosie en tydsberekening gesluit

Om te verifieer dat sekere seine aktief is, is dit 'n goeie idee om hierdie seine aan LED's (horlosies, terugstellings, slotte, ens.) Vas te maak. Twee seine wat ek nuttig gevind het om op die senderbord op te spoor, was die pixelklok en die 'geslote' sein op die AXI4-Stream to video out-blok, wat u vertel dat die video-tydsberekening gesinkroniseer is met die tydsbestuurder en die videobron data. Ek het 'n bietjie logika bygevoeg by die ontwerpblokomslag wat die pixelhorlosie volg met die PixelClkLocked -sein op die dvi2rgb -blok as 'n reset. Ek het die lêer hier as hdmi_wrapper.v aangeheg. Die beperkingslêer is ook hier aangeheg.

Stap 2: Stel Zynq programmeerbare logika vir ontvanger op

Stel Zynq programmeerbare logika vir ontvanger op
Stel Zynq programmeerbare logika vir ontvanger op
Stel Zynq programmeerbare logika vir ontvanger op
Stel Zynq programmeerbare logika vir ontvanger op
Stel Zynq programmeerbare logika vir ontvanger op
Stel Zynq programmeerbare logika vir ontvanger op

Die programmeerbare logika -blok vir die ontvanger is eenvoudiger. Die belangrikste verskil, behalwe die ontbrekende hdmi -invoerblokke, is die afwesigheid van 'n herstelde pixelklok. Om hierdie rede moet ons ons eie genereer uit die klokassistent. Hierdie ontwerp moet in 'n aparte projek van die sender gedoen word. Vir ons doeleindes het die ontvangerprojek die Zybo 7Z-20-bord gevolg, terwyl die sender die Z7-10-bord gevolg het. Die FPGA's op die borde is anders, so wees versigtig.

Hier is die stappe om die ontvangerontwerpblok te skep:

  1. Voeg die volgende ip -blokke by u ontwerp:

    • Tydsberekening kontroleerder
    • AXI4-stroom na video-uitgang
    • RGB na DVI
    • AXI VDMA
    • AXI GPIO
    • Verwerkingstelsel
    • Klok towenaar
    • Konstant (VDD ingestel op 1)
  2. Volg dieselfde patroon om hierdie blokke op te stel as die sender. Beelde vir die noemenswaardige konfigurasieverskille is hier ingesluit. Die ander bly dieselfde as die sender.
  3. Stel die VDMA vir hierdie ontwerp net as leeskanaal op. Skakel die skryfkanaal uit.
  4. Die klokassistent moet gekonfigureer word vir die volgende uitsette:

    • clk_out1: 75 MHz (pixelklok)
    • clk_out2: 150 MHz (stroomklok)
    • clk_out3: 50 MHz (axi-lite klok)
  5. Koppel die videoblokke aan soos getoon in die RX -blokontwerpbeeld.
  6. Begin dan die outomatisering van die verbinding, wat die AXI Interconnect, AXI SmartConnect en System Reset -blokke byvoeg en probeer om die regte verbindings te maak. Gaan stadig hierheen om seker te maak dat dit nie ongewenste verbindings voer nie.
  7. Maak die HDMI TMDS -klok en datapennetjies buite op die rgb2dvi -blok
  8. Daar is geen warmpropsein nodig vir hierdie ontwerp nie.

Stap 3: Stel VDMA -bestuurder op

Stel VDMA -bestuurder op
Stel VDMA -bestuurder op

Die opstelling van die verskillende blokke wat via die AXI-Lite-koppelvlak gekonfigureer is, kan die beste gedoen word deur middel van demoprojekte wat by die BSP ingesluit is, as verwysing. Nadat u die ontwerphardeware uitgevoer en die SDK van Vivado gelanseer het, wil u 'n nuwe pakketondersteuningspakket byvoeg en die lwip202 -biblioteek in die BSP -instellingsvenster insluit. Maak die system.mss -lêer vanaf die BSP oop, en u sien die randapparatuurbestuurders in u blokontwerp. Met die opsie "Invoervoorbeelde" kan u demo -projekte invoer wat hierdie randapparatuur gebruik, en u dus wys hoe u dit in sagteware kan opstel met behulp van die beskikbare Xilinx -bestuurders (sien aangehegte prentjie).

Dit was die metode wat gebruik is vir die opstel van die VDMA, Timer & Interrupt en die GPIO. Die bronkode vir beide stuur en ontvang is hier ingesluit. Die verskille is byna uitsluitlik in main.c.

*** OPMERKING: Aangesien die stelsel nie ten volle funksioneer tydens die skryf van hierdie tutoriaal nie, bevat die bronkode in hierdie afdeling nie die draadlose netwerkkode nie. Verskeie foute moet aangespreek word as gevolg van die kombinasie van projekte vir die stuur/ontvang van videokern met die projekte vir die stuur/ontvang van die netwerk. Daarom behandel hierdie tutoriaal hulle voorlopig afsonderlik. ***

TX Interrupt Handler -funksie (IRQHandler)

Hierdie funksie lees die grys kodes wat deur beide die lees- en skryf -VDMA's verskaf word via die GPIO -blokke. Die grys kodes word omgeskakel na desimale en word gebruik om die raambasisgeheue van die huidige raam te kies. Die raam wat gekopieer is, is die vorige raam na die een wat deur die VDMA geskryf is (bv. As die VDMA na raam 2 skryf, kopieer ons raam 1; as ons na raam 0 skryf, draai ons om en lees ons uit raam 2).

Die funksie vang slegs elke 6de raam op om die raamtempo tot 10 Hz eerder as 60 Hz te verminder. Die boonste grens van die netwerk is 300 Mbps. Met 10 rame per sekonde word 'n bandwydte van 221,2 Mbps benodig.

Deur op twee reëls in hierdie funksie kommentaar te lewer/nie kommentaar te lewer nie, kan die gebruiker oorskakel na die HDMI passthru-modus vir ontfoutings-/toetsdoeleindes (die kode word opgemerk om die toepaslike reëls aan te dui). Dit kopieer tans die raam na 'n geheue -plek wat deur die ethernet -kode gebruik word.

RX Interrupt Handler -funksie (IRQHandler)

Hierdie funksie is baie soortgelyk aan die TX -funksie, maar dit kopieer van 'n 2 buffer FIFO wat die ethernet gebruik om inkomende data na te skryf. Die ethernetkode dui aan watter raam van die FIFO geskryf word, data word van die teenoorgestelde raam gekopieer. Die data word gekopieer na die raam direk agter die een wat deur die VDMA gelees word om te voorkom dat dit skeur.

Stap 4: Stel Nanorouter -netwerk op

Stel Nanorouter -netwerk op
Stel Nanorouter -netwerk op

Om 'n netwerk te skep met behulp van die TPlink -nanorouters, skakel hulle individueel aan en maak verbinding met die standaard wifi -SSID vir die toestelle. Meer inligting oor die konfigurasie -instellings vir hierdie spesifieke toestel kan gevind word in die gebruikershandleiding van die toestel.

Stel een van die toestelle in as 'n toegangspunt, dit dien as die primêre verbinding vir die netwerk. Maak seker dat u die netwerk noem, let op die naam en skakel DHCP uit (ons wil nie hê dat die router die IP -adresse dinamies moet konfigureer nie, ons wil hê dat die tansmitter en ontvanger Zybo -borde hul IP -adresse self moet stel sodat hulle konsekwent is). Nadat u dit gekonfigureer het, moet u seker maak dat die toestel herlaai en die netwerk daargestel word.

Stel die ander toestel as 'n kliënt op en maak seker dat dit aansluit by die netwerk -SSID wat u met die eerste nanorouter opgestel het. Maak weer seker dat DHCP vir die kliënt uitgeskakel is.

Sodra die kliënt klaar is en herlaai, moet dit aan die toegangspunt nanorouter koppel (as dit nie die geval is nie, is daar waarskynlik 'n probleem met u konfigurasie van een van die toestelle). U sal sien dat die LED -lig op die kliënt solied sal wees sodra dit aan die toegangspunt gekoppel is.

Die toegangspunt nanorouter LED sal waarskynlik op hierdie stadium aanhou flikker, dit is goed! Die flikkerende lig beteken dat dit nie via die ethernet -poort aan 'n ander toestel gekoppel is nie, en sodra dit gekoppel is aan 'n gekonfigureerde Zybo, sal die LED konstant bly, wat 'n suksesvolle netwerkverbinding aandui.

Noudat ons ons nanorouters opgestel het, het ons 'n draadlose netwerk waarmee ons kan kommunikeer. 'N Belangrike opmerking is dat ons opsetmetode vir die nanorouters (as toegangspunt en kliënt) ons in staat stel om van die Zybo -bord na die ontvangende Zybo -kaart te kommunikeer asof die twee met 'n enkele ethernetdraad verbind is. Dit maak ons netwerkopstelling minder moeilik, aangesien die alternatief waarskynlik die konfigurasie van die Zybo -borde bevat om eksplisiet aan te sluit op die bediener saam met die beoogde verbinding.

Sodra albei toestelle opgestel is, is die nanorouters gekonfigureer en gereed om in u WIDI -netwerk geïmplementeer te word. Daar is geen spesifieke koppeling tussen die nanorouters en die Zybo -borde nie, aangesien óf die toegangspunt óf die kliënt vir die versend- of ontvangtoestel sal werk.

Stap 5: Stel die Zynq -verwerkingstelsel op vir data -oordrag via Ethernet

Stel Zynq -verwerkingstelsel op vir data -oordrag via Ethernet
Stel Zynq -verwerkingstelsel op vir data -oordrag via Ethernet
Stel Zynq -verwerkingstelsel op vir data -oordrag via Ethernet
Stel Zynq -verwerkingstelsel op vir data -oordrag via Ethernet

Om die HDMI -data van die een Zybo -bord na die ander oor te dra, moet ons 'n Ethernet -protokol by ons VDMA -bestuurder opneem. Ons doel hier is om individuele videorame deur die Ethernet -randapparaat in die verwerkingstelsel te stroom, teen 'n vasgestelde koers wat in ooreenstemming is met ons netwerkbandwydte. Vir ons projek het ons gebruik gemaak van TCP wat deur die kaalmetaal LwIP API verskaf word. Aangesien albei die projeklede relatief onervare is met netwerkhulpprogramme, is hierdie keuse gemaak sonder om die implikasies en beperkings van TCP ten volle te erken. Die grootste probleem met hierdie implementering was die beperkte bandwydte en die feit dat dit regtig nie ontwerp is vir die stoom van groot hoeveelhede data nie. Alternatiewe oplossings om TCP te vervang en tbe in hierdie projek te verbeter, sal later bespreek word.

'N Kort beskrywing van TCP met LwIP: Data word oor die netwerk gestuur in pakkies van grootte tcp_mss (TCP maksimum segmentgrootte), wat gewoonlik 1460 grepe is. As u tcp_write bel, neem 'n paar data waarna 'n wyser verwys, pbufs (pakketbuffers) op om die data te bewaar en 'n struktuur vir die TCP -bedrywighede te verskaf. Die maksimum hoeveelheid data wat gelyktydig in die tou gestaan kan word, word as tcp_snd_buf (TCP sender buffer buffer) gestel. Aangesien hierdie parameter 'n 16 bis -getal is, is ons beperk tot 'n stuurbuffergrootte van 59695 grepe (die stuurbuffer benodig 'n paar opvullings). Sodra die data in die tou gestaan het, word tcp_output gebel om die data te begin stuur. Voordat u die volgende segment data versend, is dit noodsaaklik dat al die vorige pakkies suksesvol gestuur is. Hierdie proses word uitgevoer met behulp van die recv_callback -funksie, aangesien dit die funksie is wat genoem word wanneer die erkenning vanaf die ontvanger gesien word.

Die gebruik van die voorbeeldprojekte in Vivado SDK is baie nuttig om te leer hoe die LwIP TCP -werking is, en is 'n goeie beginpunt vir die begin van 'n nuwe projek.

Die prosedure vir die WiDi -oordragapparaat is soos volg:

  1. Initialiseer die TCP-netwerk met die oproepe van die metaal LWIP-bestuurderfunksie.
  2. Spesifiseer alle terugbelfunksies wat nodig is vir netwerkbedrywighede.
  3. Koppel aan die WiDi -ontvanger deur aan te sluit op die IP -adres en poort (ons opset: IP -ontvanger is 192.168.0.9, maak verbinding met poort 7).
  4. As die VDMA -bestuurder -timer verstryk, voer die TX ISR in.
  5. Bepaal die huidige raambuffer vir toegang, gebaseer op die VDMA -grys kode
  6. Wag die eerste segment data in die TCP -stuurbuffer
  7. Stel die data af en werk plaaslike veranderlikes op om by te hou hoeveel data van die huidige raam gestuur is.
  8. By die ontvangs van die terugbel (funksie -oproep wat gemaak word nadat die sender 'n erkenning van dataherwinning gekry het), staan die volgende segment data in die ry.
  9. Herhaal stappe 7 en 8 totdat die hele raam gestuur is.
  10. Keer terug na 'n ledige toestand om te wag vir die volgende tydonderbreking om aan te dui dat 'n nuwe raam gereed is (terug na stap 4).

Maak seker dat u die LwIP -instellings vir die kaartondersteuningspakket opstel soos in die prent hierbo getoon. Al die waardes is standaard behalwe tcp_snd_buf, tcp_pueue_ooseq, mem_size, memp_n_tcp_seg. Let ook daarop dat gedetailleerde ontfouting bereik kan word deur die BSP -parameters vir die debug_options -groep te verander.

Stap 6: Stel die Zynq -verwerkingstelsel op vir data -ontvangs via Ethernet

Die Zybo -ontwikkelbord wat as die draadlose ontvanger optree, werk op dieselfde manier as die sender. Die instellings vir pakketondersteuning vir LwIP is identies aan die in die vorige stap.

Die toestel neem pakkies in wat die videorame -segmente van die nanorouter bevat, en dit sal die videorame -data na die drievoudige raambufferruimte vir die ontvangende VDMA kopieer. Om te voorkom dat data oorgeskryf word, word 'n dubbele databuffer (ons noem dit die netwerkbuffer) gebruik om data van die nanorouter te versamel, sodat netwerkverkeer kan voortgaan om in te stroom terwyl die vorige volledige videorame na die VDMA buffer.

Die prosedure vir die WiDi -ontvangstoestel vereis twee take, waarvan een die ontvang van ethernetdata is, en die ander is die kopiëring van videorame van die netwerkbuffer na die drievoudige raambuffer van die VDMA.

Ethernet -ontvangstaak:

  1. Initialiseer die TCP-netwerk met die oproepmetale LWIP-bestuurderfunksieoproepe (opstel met 'n IP-adres waarmee die sender sal koppel, 192.168.0.9 in ons s'n)
  2. Spesifiseer alle terugbelfunksies wat nodig is vir netwerkbedrywighede.
  3. Kopieer pakketdata na die ethernet -pakkie in die huidige netwerkbuffer, verhoog die huidige opgehoopte data.
  4. As die pakkie die netwerkraambuffer vul, gaan voort na stap 5 en 6. Gaan andersins terug na stap 3 vir hierdie taak.
  5. sein dat die VDMA -drievoudige raambuffertaak van die nuut afgewerkte netwerkbuffer moet kopieer.
  6. Skakel oor na die ander netwerkbuffer en gaan voort met die versameling van data via ethernet.
  7. Wag totdat die nuwe ethernet -pakkie ontvang is (stap 3).

Kopieer netwerkbuffer na VDMA tripel frame buffer:

  1. As die VDMA -bestuurder -timer verstryk, voer die RX ISR in.
  2. Bepaal die huidige raambuffer vir toegang, gebaseer op die VDMA -grys kode.
  3. Bepaal watter netwerkbuffer na die VDMA -buffer gekopieer sal word en kopieer die data

Stap 7: Koppel u Zybo -borde aan die HDMI -bron en HDMI -wasbak

Koppel u Zybo -borde aan die HDMI -bron en HDMI -wasbak
Koppel u Zybo -borde aan die HDMI -bron en HDMI -wasbak

Koppel nou die hdmi -kabels vir beide die ontvanger en die sender, programmeer die FPGA's en voer die verwerkingstelsel uit. Die raamtempo sal waarskynlik baie stadig wees as gevolg van die enorme oorhoofse koste in die LwIP -operasie en beperkte bandwydte. As daar probleme is, skakel via UART en probeer om waarskuwings of foute te identifiseer.

Stap 8: Alternatiewe idees vir verbetering

Alternatiewe idees vir verbetering
Alternatiewe idees vir verbetering

'N Groot probleem vir hierdie projek was die hoeveelheid data wat nodig is om via wifi te stuur. Dit is verwag, maar ons het die impak wat dit sou hê, onderskat en het gelei tot meer foto's op 'n skerm eerder as 'n videostroom. Daar is verskillende maniere om hierdie projek te verbeter:

  • Intydse videokompressie. Deur die inkomende videostroom raam vir raam saam te druk, verminder die hoeveelheid data wat oor die netwerk gestuur moet word, aansienlik. Ideaal gesproke sal dit met hardeware gedoen word (wat nie 'n maklike taak is nie), of dit kan in sagteware gedoen word deur die ander ARM -kern te gebruik om 'n kompressie -algoritme uit te voer (dit sal 'n bietjie meer analise benodig om te verseker dat die tydsberekening uitwerk). Daar is 'n paar oopbron -intydse videokompressiekomponente wat ons op die internet gevind het, maar die meerderheid is IP.
  • Implementering van die Ethernet -stroom in hardeware, eerder as sagteware. As gevolg van die beperking op die segmentgrootte, was daar 'n groot hoeveelheid oorhoofse koste as gevolg van die gebrek aan ruimte om uitgaande data in die sender in die ry te plaas. 'N Baie doeltreffender proses is om die AXI Ethernet IP met 'n FIFO -buffer of DMA te gebruik om data daarin te voer. Dit sal die ekstra bagasie van LwIP TCP verminder en meer datavloei moontlik maak.

Stap 9: Toeganklikheid

Die gevolglike produk van hierdie WiDi -projek moet 'n volledig geïntegreerde, kompakte paar toestelle wees wat 'n gebruiker aan enige HDMI -bron kan koppel en dan die videostroom draadloos na 'n skerm met HDMI -vermoë kan sink. Die toestelle bevat die Zynq-7000 SoC op die Zybo-verwysingsbord en bevat die netwerkhardeware wat in die TP-Link nano-routers voorkom. Ideaal gesproke sou die gebruiker die stuurmodule vanaf 'n diskrete plek binne die teikenbedryfstelsel kon beheer, met min behoefte aan aansienlike tegniese vermoëns.

Sekuriteit en konneksie

Die toestelle moet ook Transport Layer Security (TLS) bevat en 'n beperkte outomatiese verbindingsvermoë hê, beide vir privaatheidsdoeleindes. Dit is die bedoeling van die ontwerpers om die verbinding met 'n skerm oor 'n draadlose koppelvlak doelbewus namens die gebruiker te maak om te voorkom dat verkeerdelik sensitiewe materiaal uitgesaai word.

Huidige status

Tot dusver is die toestand van die projek nog baie aan die gang. Om die huidige eindpuntgebruiker voordeel te trek uit hierdie tutoriaal, moet hy of sy 'n sterk tegniese begrip hê van die ingeboude stelselontwerp en moet vertroud wees met programmeerbare hardeware en ingebedde sagteware wat saamwerk.

Die data wat via die netwerk gestuur word, is op hierdie stadium nie geïnkripteer nie en word aangeneem as 'n rou oordrag van TCP/IP -pakkies.

Die videokernprojek is suksesvol getoets vir beide stuur en ontvang. Aan die ander kant is die draadlose verbinding tussen twee zybo -borde tot stand gebring en die toetsraamdata is suksesvol gestuur. Dit is egter steeds nodig om die netwerkkode by elke videokernprojek te kombineer en die oordrag van werklike videorame te toets.

Aanbeveel: