Sisällysluettelo:

WIDI - langaton HDMI Zybo: n avulla (Zynq Development Board): 9 vaihetta (kuvien kanssa)
WIDI - langaton HDMI Zybo: n avulla (Zynq Development Board): 9 vaihetta (kuvien kanssa)

Video: WIDI - langaton HDMI Zybo: n avulla (Zynq Development Board): 9 vaihetta (kuvien kanssa)

Video: WIDI - langaton HDMI Zybo: n avulla (Zynq Development Board): 9 vaihetta (kuvien kanssa)
Video: MiraScreen G2 Wireless HDMI Dongle Miracast Airplay DLNA 2024, Marraskuu
Anonim
WIDI - langaton HDMI Zybo: n avulla (Zynq Development Board)
WIDI - langaton HDMI Zybo: n avulla (Zynq Development Board)
WIDI - langaton HDMI Zybo: n avulla (Zynq Development Board)
WIDI - langaton HDMI Zybo: n avulla (Zynq Development Board)

Oletko koskaan toivonut, että voit liittää television tietokoneeseen tai kannettavaan tietokoneeseen ulkoisena näyttönä, mutta et halunnut saada kaikkia näitä ärsyttäviä johtoja tielläsi? Jos on, tämä opetusohjelma on juuri sinua varten! Vaikka jotkut tuotteet saavuttavat tämän tavoitteen, DIY -projekti on paljon tyydyttävämpi ja mahdollisesti halvempi.

Tämä konsepti eroaa muista tuotteista, kuten chromecastista, koska sen on tarkoitus korvata näyttöön liitettävä HDMI -johto sen sijaan, että se olisi suoratoistolaite.

Projektimme luotiin viimeisenä projektina Kalifornian osavaltion ammattikorkeakoulun San Luis Obispon reaaliaikaisten käyttöjärjestelmien kurssille.

Hankkeen tavoitteena on käyttää kahta Digilent Zybo -levyä toimimaan langattomana tiedonsiirtoliitäntänä HDMI-lähetinlaitteen (PC, blu-ray jne.) Ja HDMI-vastaanottimen (pöytätietokone, projektori, televisio jne.) Välillä.

Yksi Digilent Zyboot yhdistetään HDMI -liitännän kautta lähettävään laitteeseen ja toinen HDMI -liitännän kautta vastaanottavaan laitteeseen.

Langaton viestintä tapahtuu lähettimelle ja vastaanottimelle omistettua langatonta lähiverkkoa käyttäen ilman reititystä kotireitittimen tai muun vastaavan laitteen kautta. Tässä projektissa käytetty langaton moduuli on tplink wr802n -nanoreititin, joista toinen toimii tukiasemana verkon muodostamisessa ja toinen asiakkaana verkkoon yhdistämisessä. Jokainen nanoreititin liitetään ethernet -kaapelilla kumpaankin Zybo -korttiin. Kun laitteet on yhdistetty näihin reitittimiin, ne kommunikoivat TCP: n kautta ikään kuin ne olisi kytketty yhdellä ethernet -kaapelilla (eli yhteyden muodostamiseen tarvitaan vain asiakkaan IP -osoite).

Hankkeen tavoitteena oli helpottaa 1080x720 -videovirtaa @ 60 Hz, mutta tämä ei ollut mahdollista langattoman verkon kaistanleveysrajoitusten ja reaaliaikaisen videon pakkaamisen puuttuessa lähetettävän tiedon vähentämiseksi. Sen sijaan tämä projekti toimii puitteina tulevalle kehitykselle tämän tavoitteen saavuttamiseksi, koska sillä on vakavasti rajoitettu kehysnopeuden rajoituksia HDMI -datan suoratoistoon tarkoitetulla tavalla.

Projektivaatimukset:

2x Digilent Zybo -kehityslevyä (vähintään yksi HDMI -portti)

2x HDMI -kaapelit

2x microusb -kaapelit (Zyboyn yhdistämiseen tietokoneeseen kehitystä varten)

2x tplink wr802n nanoreititin (mukaan lukien adtl. 2x microusb- ja pistorasiavirtasovittimet)

2x ethernet -kaapelia

*** Huomautus: Tässä opetusohjelmassa oletetaan perehtyvän Vivadon suunnittelupakettiin ja kokemukseen uuden projektin ja lohkon suunnittelusta. ***

Vaihe 1: Määritä ohjelmoitava Zynq -logiikka lähettimelle

Määritä Zynqin ohjelmoitava logiikka lähettimelle
Määritä Zynqin ohjelmoitava logiikka lähettimelle
Määritä Zynqin ohjelmoitava logiikka lähettimelle
Määritä Zynqin ohjelmoitava logiikka lähettimelle
Määritä Zynqin ohjelmoitava logiikka lähettimelle
Määritä Zynqin ohjelmoitava logiikka lähettimelle

Lähestymistapamme lähettimen ohjelmoitavan logiikan kehittämisessä oli suorittaa hdmi-hdmi-läpivienti tietokoneesta monitoriin käyttämällä kahta VDMA (Video Direct Memory Access) -lohkoa, yksi kirjoittamista ja toinen lukemista varten.

Molemmat valitaan vapaasti juoksevaksi, 3 kehyspuskuritilaa (0-1-2). Koska videoydin on optimoitu 60 kuvaa sekunnissa, tämä tarkoittaa, että VDMA kirjoittaa tai lukee uuteen kehykseen 16.67 ms välein tässä järjestyksessä: 0, 1, 2, 0, 1, 2, 0, 1, 2. Kunkin kehyksen DDR -muistipaikat ovat erilaiset kahdelle VDMA: lle, koska niitä ei enää synkronoida keskenään. Sen sijaan laitteiston ajastinta (TTC1), joka on määritetty 60 Hz: lle, käytetään synkronoimaan tiedonsiirto kahden muistipaikan välillä.

Yllä olevassa kuvassa on 3 kehystä, niiden mitat ja tarvittava muistimäärä (kehyksen oikealla puolella). Jos määritämme kirjoittavan VDMA: n näille muistipaikoille, voimme määrittää luetut VDMA -muistipaikat tämän joukon ulkopuolelle, esimerkiksi 0x0B000000. Jokainen kehys koostuu 1280*720 pikselistä ja jokainen pikseli koostuu 8 bitistä punaista, vihreää ja sinistä, yhteensä 24 bittiä. Tämä tarkoittaa, että kehys koostuu 1280*720*3 tavusta (2,76 Mt).

Ajastimen IRQ, joka on kuvattu VDMA -ohjaimen asetuksissa, käsittelee tietojen kopiointia kahden VMDA -muistipaikan välillä. VDMA tarjoaa osoittimen nykyiselle kehykselle, jolle kirjoitetaan tai josta se luetaan. Kehystä edustaa tietty harmaa koodi, joka muunnetaan ohjelmistolla. Harmaan koodin määritelmät 3 kehyspuskurikonfiguraatiolle löytyvät AXI VDMA -tuoteoppaasta liitteestä C.

Tämän avulla voimme kopioida kirjoitettavan sisällön muistiin lukematta kehyksestä, johon sillä hetkellä kirjoitetaan.

*** Huomaa, että luettua VDMA: ta ei käytetä lähetettäessä tietoja langattoman verkon kautta. Sen ainoa tarkoitus on varmistaa, että muisti kopioidaan kirjoitus VMDA: sta. Lukeminen VMDA pitäisi poistaa käytöstä. ***

Tässä on vaiheet lähettimen suunnittelulohkon luomiseksi:

  1. Kun luot uutta projektia, on hyvä määrittää projektille siru tai levy. Tässä linkissä kuvataan, kuinka voit lisätä uusia levytiedostoja Vivado -hakemistoon ja liittää oikean levyn projektiin. Siitä on hyötyä, kun lisäät prosessointijärjestelmän lohkon ja siirryt laitteistosta ohjelmistoon (SDK -puoli).
  2. Lisää seuraavat lohkot:

    • dvi2rgb
    • Video Axi4-streamiin
    • Ajoitusohjain
    • axi4-stream videoon
    • rgb2dvi
    • AXI VDMA x2
    • AXI GPIO x2
    • Kellotoiminto
    • Jatkuva
    • Zynq -prosessointijärjestelmä
  3. Kun lisäät prosessointijärjestelmää, napsauta "Suorita lohkoautomatiikka" vihreän yläpalkista ja varmista, että Käytä levyn esiasetusta -vaihtoehto on valittu. Jätä kaikki muu oletusarvoon.
  4. Kunkin lohkon määritysikkunan kuvat löytyvät yllä olevista kuvista. Jos et näe tietyn ikkunan kuvaa, jätä se oletusarvoksi.
  5. Aloita Zynq -prosessointijärjestelmän määrittäminen:

    • Ota PS-PL-määrityksessä AXI Non Secure Enable GP Master AXI käyttöön M AXI GP0 -liitäntä
    • Ota PS-PL Configuration HP Slave AXI Interface -palvelussa käyttöön sekä HP0 että HP1
    • MIO -kokoonpanossa Varmista, että ENET0 on otettu käyttöön I/O -oheislaitteet -kohdassa, ja sitten Sovellusprosessoriyksikkö, ota käyttöön ajastin0
    • Ota kellokokoonpanossa PL Fabric Clocks käyttöön FCLK_CLK0 ja aseta arvoksi 100 MHz.
    • Napsauta OK
  6. Ennen kuin napsautat Suorita yhteysautomaatio, muista liittää videolohkot yllä olevan lähetyslohkon suunnittelukuvan mukaisesti. Haluat nimetä vakion uudelleen VDD: ksi ja asettaa arvoksi 1. Liitä videolohkot vastaavasti.
  7. Tee HDMI TMDS -kello ja datanastat ulkoisiksi rgb2dvi- ja dvi2rgb -lohkoissa
  8. Luo tulo- ja lähtöportti kuumapistokkeen tunnistussignaalille (HPD) ja liitä ne yhteen, nämä määritellään rajoitustiedostossa
  9. Pikselikello palautetaan TMDS_Clk_p -tiedostosta, joka luodaan rajoitustiedostoon. Tämä on 74,25 MHz 720p -resoluution mukaisesti. On tärkeää liittää pikselikello (dvi2rgb -lohkosta) seuraaviin nastoihin:

    • vid_io_in_clk (vid in axi stream block)
    • vid_io_out_clk (axi stream to vid out block)
    • clk (ajoitusohjain)
    • PixelClk (rgb2dvi)
  10. *** Huomaa: Tällä hetkellä pikselikellon palautuksen aktivoimiseksi HDMI rx- ja tx -liittimet on kytkettävä aktiiviseen lähteeseen/pesualtaan. Yksi tapa kiertää tämä on erottaa videon rx- ja tx -lohkot eri kellotunnuksiksi (toisin sanoen luoda uusi 74,25 MHz: n kello tx -lohkoon syötettäväksi). ***
  11. Aseta seuraavaksi ohjattu kellotoiminto niin, että sinulla on 100 MHz: n tulo (yleinen puskurilähde) ja 3 lähtökelloa @ 50 MHz (AXI-Lite-kello), 150 MHz (AXI4-Stream-kello), 200 MHz (dvi2rgb RefClk-nasta).
  12. Liitä FCLK_CLK0 -käsittelyjärjestelmän nasta ohjatun kellon tuloon
  13. Napsauta tässä vaiheessa Suorita yhteysautomaatio suunnitteluikkunan yläosassa olevasta vihreästä palkista. Tämä on hyvä idea tehdä yksi lohko kerrallaan ja noudattaa yllä olevaa lähetyslohkon suunnittelukuvaa.
  14. Työkalu yrittää lisätä AXI-yhdysliitännän, joka toimii isäntä/orja-yhdysliittimenä lohkoille, jotka käyttävät AXI-Lite-väylää (VDMA ja GPIO).
  15. Se lisää myös AXI SmartConnectin, joka toimii VDMA: n käyttämien AXI4-Stream- ja High Performance -prosessoriliitäntöjen isäntä/orja-yhdysliittymänä (Stream to Memory Map ja päinvastoin).
  16. Työkalu lisää myös suorittimen järjestelmän nollaus. Varmista, että tämä on kytketty vain VDMA-, GPIO- ja prosessoriin liittyviin lohkoihin. Älä liitä sitä mihinkään videolohkoon (esim. Dvi2rgb, ajoitusohjain, suoratoistettava video jne.)
  17. Kun yhteysautomaatio on valmis, tarkista, että liitännät vastaavat lähetyslohkon suunnittelukuvan liitoksia. Huomaat ylimääräisen järjestelmän ILA -lohkon, jota ei ole mainittu. Tämä on tarkoitettu vain virheenkorjaukseen, eikä sitä tarvita tällä hetkellä. Se käyttää 150M prosessorin nollausta, joten sitäkään ei tarvita. Missä tahansa näet pieniä vihreitä "bugeja" busseissa, se johtuu ILA: sta ja ne voidaan jättää huomiotta.
  18. Viimeinen vaihe on napsauttaa hiiren kakkospainikkeella projektin lähteiden puun lohkomallia ja valita "Luo HDL -kääre". Jos aiot lisätä logiikkaa kääreeseen, se korvataan joka kerta, kun tämä valitaan.
  19. Katso SDK -puolen tiedot VDMA -ohjaimen asennus -osiosta.

Kellot ja nollat

Olen huomannut, että kaikkien ohjelmoitavien logiikkaprojektien tärkeimmät näkökohdat ovat kellotunnusten ja nollasignaalien huolellinen harkitseminen. Jos ne on määritetty oikein, sinulla on hyvä mahdollisuus saada suunnittelu toimimaan.

Pixel -kello ja ajoitus lukittu

Sen varmistamiseksi, että tietyt signaalit ovat aktiivisia, on hyvä yhdistää nämä signaalit LED -valoihin (kellot, nollat, lukot jne.). Kaksi signaalia, joita pidin hyödyllisinä seurata lähetinkortilla, olivat pikselikello ja "lukittu" -signaali AXI4-Stream to Video Out -lohkossa, joka kertoo, että videon ajoitus on synkronoitu ajoitusohjaimen ja videolähteen kanssa tiedot. Olen lisännyt logiikkaa suunnittelulohkon kääreeseen, joka seuraa pikselikelloa käyttämällä dvi2rgb -lohkon PixelClkLocked -signaalia nollausasetuksena. Olen liittänyt tiedoston nimellä hdmi_wrapper.v tänne. Rajoitustiedosto on myös liitetty tähän.

Vaihe 2: Määritä Zynq -ohjelmoitava logiikka vastaanottimelle

Määritä Zynqin ohjelmoitava logiikka vastaanottimelle
Määritä Zynqin ohjelmoitava logiikka vastaanottimelle
Määritä Zynqin ohjelmoitava logiikka vastaanottimelle
Määritä Zynqin ohjelmoitava logiikka vastaanottimelle
Määritä Zynqin ohjelmoitava logiikka vastaanottimelle
Määritä Zynqin ohjelmoitava logiikka vastaanottimelle

Vastaanottimen ohjelmoitava logiikkalohko on yksinkertaisempi. Keskeinen ero, paitsi puuttuvat hdmi -tulolohkot, on palautetun pikselikellon puuttuminen. Tästä syystä meidän on luotava oma kello -ohjatusta toiminnosta. Tämä suunnittelu on tehtävä erillisessä projektissa lähettimestä. Meidän tarkoituksemme varten vastaanotinprojekti seurasi Zybo 7Z-20 -korttia ja lähetin Z7-10-korttia. Taulujen FPGA: t ovat erilaisia, joten… ole varovainen.

Tässä on vaiheet vastaanottimen suunnittelulohkon luomiseksi:

  1. Lisää seuraavat ip -lohkot suunnitteluosi:

    • Ajoitusohjain
    • AXI4-Stream videolähtöön
    • RGB - DVI
    • AXI VDMA
    • AXI GPIO
    • Käsittelyjärjestelmä
    • Kellotoiminto
    • Vakio (VDD asetettu arvoon 1)
  2. Määritä nämä lohkot samalla kaavalla kuin lähetin. Kuvat merkittävistä kokoonpanoeroista on lisätty tähän. Muut ovat samat kuin lähetin.
  3. Määritä tämän mallin VDMA vain luku -kanavaksi. Poista kirjoituskanava käytöstä.
  4. Ohjattu kellotoiminto on määritettävä seuraaville lähdöille:

    • clk_out1: 75 MHz (pikselikello)
    • clk_out2: 150 MHz (stream -kello)
    • clk_out3: 50 MHz (axi-lite-kello)
  5. Yhdistä videolohkot RX -lohkon suunnittelukuvan mukaisesti.
  6. Suorita sitten yhteysautomaatio, joka lisää AXI Interconnect-, AXI SmartConnect- ja System Reset -lohkot ja yrittää muodostaa tarvittavat yhteydet. Siirry hitaasti tänne varmistaaksesi, että se ei muodosta ei -toivottuja yhteyksiä.
  7. Tee HDMI TMDS -kello ja datanastat ulkoisiksi rgb2dvi -lohkossa
  8. Tässä mallissa ei tarvita kuumapistokesignaalia.

Vaihe 3: Asenna VDMA -ohjain

Asenna VDMA -ohjain
Asenna VDMA -ohjain

Asennus eri lohkoille, jotka on määritetty AXI-Lite-liitännän kautta, on parasta tehdä käyttämällä BSP: n mukana toimitettuja demoprojekteja viitteenä. Kun olet vienyt suunnittelulaitteiston ja käynnistänyt SDK: n Vivadosta, haluat lisätä uuden levyn tukipaketin ja sisällyttää lwip202 -kirjaston BSP -asetusikkunaan. Avaa system.mss -tiedosto BSP: stä ja näet lohkon suunnittelussa olevat oheisohjaimet. "Tuo esimerkkejä" -vaihtoehdon avulla voit tuoda demohankkeita, jotka käyttävät näitä oheislaitteita, ja näyttää siten, kuinka voit määrittää ne ohjelmistossa käytettävissä olevien Xilinx -ohjainten avulla (katso liitteenä oleva kuva).

Tätä menetelmää käytettiin VDMA: n, ajastimen ja keskeytyksen ja GPIO: n määrittämiseen. Sekä lähetyksen että vastaanoton lähdekoodi on lisätty tähän. Erot ovat lähes yksinomaan main.c.

*** HUOMAUTUS: Koska järjestelmä ei ole täysin toimiva tämän opetusohjelman kirjoittamishetkellä, tämän osan lähdekoodi ei sisällä langattoman verkon koodia. Useita virheitä on korjattava, koska videon ydinlähetys/vastaanotto -projektit yhdistetään verkon lähetys/vastaanotto -projekteihin. Siksi tämä opetusohjelma käsittelee niitä toistaiseksi erikseen. ***

Lähetyksen keskeytyskäsittelijä (IRQHandler)

Tämä toiminto lukee GPIO -lohkojen kautta sekä luku- että kirjoitus VDMA: iden antamat harmaat koodit. Harmaat koodit muunnetaan desimaaleiksi ja niitä käytetään nykyisen kehyksen kehyksen perusmuistipaikan valitsemiseen. Kopioitu kehys on edellinen kehys siihen, johon VDMA kirjoittaa (esim. Jos VDMA kirjoittaa kehykseen 2, kopioimme kehyksen 1; jos kirjoitat kehykseen 0, kääritään ja luemme kehyksestä 2).

Toiminto kaappaa vain joka kuudes kuva vähentääkseen kuvataajuuden 10 Hz: iin 60 Hz: n sijasta. Verkon yläraja on 300 Mbps. Nopeudella 10 kuvaa sekunnissa kaistanleveys on 221,2 Mbps.

Kahden toiminnon rivin kommentoiminen/kommentoinnin poistaminen antaa käyttäjälle mahdollisuuden vaihtaa HDMI passthru -tilaan virheenkorjausta/testausta varten (koodi kommentoidaan sopivien rivien osoittamiseksi). Se kopioi kehyksen tällä hetkellä ethernet -koodin käyttämään muistipaikkaan.

RX Interrupt Handler -toiminto (IRQHandler)

Tämä toiminto on hyvin samanlainen kuin TX -toiminto, mutta se kopioi 2 -puskurisesta FIFO -tiedostosta, jota ethernet käyttää tulevien tietojen kirjoittamiseen. Ethernet -koodi osoittaa, mihin kehykseen FIFO kirjoitetaan, data kopioidaan vastakkaisesta kehyksestä. Tiedot kopioidaan kehykseen, joka on suoraan VDMA: n lukeman taakse, repeytymisen välttämiseksi.

Vaihe 4: Asenna Nanorouter -verkko

Asenna Nanorouter -verkko
Asenna Nanorouter -verkko

Jos haluat luoda verkon TPlink -nanoreitittimillä, käynnistä ne erikseen ja muodosta yhteys laitteiden oletus -wifi -SSID -tunnukseen. Lisätietoja tämän laitteen kokoonpanoasetuksista on laitteen käyttöoppaassa.

Määritä yksi laitteista liityntäpisteeksi, tämä toimii verkon ensisijaisena yhteytenä. Muista nimetä verkko ja merkitä nimi muistiin ja poistaa DHCP käytöstä (emme halua reitittimen määrittävän IP -osoitteita dynaamisesti, haluamme, että lähetin- ja vastaanotin -Zybo -levyt asettavat itse IP -osoitteensa, jotta ne ovat johdonmukaisia). Määrittämisen jälkeen varmista, että laite käynnistyy uudelleen ja muodostaa tämän verkon.

Asenna toinen laite asiakkaaksi ja varmista, että se muodostaa yhteyden verkon SSID -tunnukseen, jonka määritit ensimmäisen nanoreitittimen avulla. Varmista vielä kerran, että DHCP on poistettu käytöstä asiakkaalta.

Kun asiakas on valmis ja käynnistynyt uudelleen, sen pitäisi muodostaa yhteys tukiaseman nanoreitittimeen (jos ei, on todennäköistä, että jonkin laitteen kokoonpanossa on ongelma). Huomaat, että asiakkaan LED -valo palaa tasaisesti, kun se on muodostanut yhteyden tukiasemaan.

Tukiaseman nanorouter -merkkivalo vilkkuu todennäköisesti edelleen tässä vaiheessa, tämä on okei! Vilkkuva valo tarkoittaa, että sitä ei ole yhdistetty toiseen laitteeseen ethernet -portin kautta, ja kun se on yhdistetty määritettyyn Zybo -laitteeseen, LED -valo pysyy tasaisena, mikä osoittaa onnistuneen verkkoyhteyden.

Nyt kun meillä on nanoreitittimet, meillä on langaton verkko, jonka avulla voimme kommunikoida. Tärkeä huomautus on, että määritysmenetelmämme nanoreitittimille (liityntäpisteenä ja asiakkaana) mahdollistaa kommunikoinnin lähettävältä Zybo -kortilta vastaanottavalle Zybo -levylle ikään kuin nämä kaksi olisi kytketty yhdellä ethernet -johdolla. Tämä tekee verkkoasetuksistamme vähemmän vaikean, koska vaihtoehto sisältäisi todennäköisesti Zybo -levyjen määrittämisen muodostamaan yhteyden palvelimeen nimenomaisesti yhdessä suunnitellun yhteyden kanssa.

Kun molemmat laitteet on asennettu, nanoreitittimet on konfiguroitu ja valmiina asennettavaksi WIDI -verkkoon. Nanoreitittimien ja Zybo -levyjen välillä ei ole erityistä pariliitosta, koska joko tukiasema tai asiakas toimii joko lähetys- tai vastaanottolaitteessa.

Vaihe 5: Asenna Zynq -käsittelyjärjestelmä tiedonsiirtoa varten Ethernetin kautta

Asenna Zynq -prosessointijärjestelmä tiedonsiirtoon Ethernetin kautta
Asenna Zynq -prosessointijärjestelmä tiedonsiirtoon Ethernetin kautta
Asenna Zynq -prosessointijärjestelmä tiedonsiirtoon Ethernetin kautta
Asenna Zynq -prosessointijärjestelmä tiedonsiirtoon Ethernetin kautta

Jotta voimme siirtää HDMI -tietoja yhdeltä Zybo -kortilta toiselle, meidän on sisällytettävä VDMA -ohjaimeemme Ethernet -protokolla. Tavoitteenamme on suoratoistaa yksittäisiä videokehyksiä käsittelyjärjestelmän Ethernet -oheislaitteen kautta asetetulla nopeudella, joka on yhdenmukainen verkon kaistanleveyden kanssa. Projektissamme käytimme paljaan metallin LwIP-sovellusliittymän tarjoamaa TCP: tä. Koska molemmat projektin jäsenet ovat suhteellisen kokemattomia verkkoapuohjelmista, tämä valinta tehtiin täysin tunnistamatta TCP: n vaikutuksia ja rajoituksia. Suurin ongelma tässä toteutuksessa oli rajallinen kaistanleveys ja se, että sitä ei todellakaan ole suunniteltu suurten tietomäärien höyrystämiseen. Vaihtoehtoisia ratkaisuja TCP: n korvaamiseksi ja tbe: n parantamiseksi tässä projektissa käsitellään myöhemmin.

Lyhyt kuvaus TCP: stä LwIP: llä: Tiedot lähetetään verkon yli paketeissa, joiden koko on tcp_mss (TCP: n suurin segmentin koko), joka on yleensä 1460 tavua. Tcp_write -kutsu vie jonkin datan, johon osoitin viittaa, ja määrittää pbufs -paketit (pakettipuskurit) pitämään tiedot ja muodostamaan rakenteen TCP -toiminnoille. Enimmäismäärä kerrallaan jonotettavissa olevia tietoja on asetettu tcp_snd_buf (TCP -lähettäjän puskuritila). Koska tämä parametri on 16 -bittinen luku, voimme rajoittaa lähetyspuskurin koon 59695 tavua (lähetyspuskurissa on joitakin pakollisia täyteaineita). Kun tiedot on asetettu jonoon, tcp_output kutsutaan aloittamaan tietojen lähettäminen. Ennen seuraavan datasegmentin lähettämistä on välttämätöntä, että kaikki edelliset paketit on lähetetty onnistuneesti. Tämä prosessi tehdään recv_callback -toiminnolla, koska tämä on toiminto, joka kutsutaan, kun kuittaus näkyy vastaanottimelta.

Esimerkkiprojektien hyödyntäminen Vivado SDK: ssa on erittäin hyödyllistä LwIP TCP -toiminnon oppimisessa ja on hyvä lähtökohta uuden projektin aloittamiselle.

WiDi -lähetyslaitteen menettely on seuraava:

  1. Alusta TCP-verkko paljain metallisilla LWIP-ohjainkutsutoiminnoilla.
  2. Määritä verkkotoiminnoissa tarvittavat takaisinsoittotoiminnot.
  3. Yhdistä WiDi -vastaanottimeen yhdistämällä sen IP -osoite ja portti (kokoonpanomme: Vastaanottimen IP on 192.168.0.9, yhdistä porttiin 7).
  4. Kun VDMA -ohjaimen ajastin on kulunut, syötä TX ISR.
  5. Määritä käytettävissä oleva kehyspuskuri VDMA -harmaakoodin perusteella
  6. Järjestä TCP -lähetyspuskurin ensimmäinen tietosegmentti jonoon
  7. Tulosta tiedot ja päivitä paikalliset muuttujat seurataksesi kuinka paljon tietoja on lähetetty nykyisestä kehyksestä.
  8. Kun saavutat vastaanotetun takaisinsoiton (toimintopuhelu, joka lähetetään sen jälkeen, kun lähetin saa kuittauksen tietojen hausta), aseta jono seuraavaan datasegmenttiin.
  9. Toista vaiheita 7 ja 8, kunnes koko kehys on lähetetty.
  10. Palaa valmiustilaan odottamaan seuraavaa ajastinta, joka osoittaa uuden kehyksen olevan valmis (Takaisin vaiheeseen 4).

Varmista, että määrität levyn tukipaketin LwIP -asetukset yllä olevan kuvan mukaisesti. Kaikki arvot ovat oletusarvoja lukuun ottamatta tcp_snd_buf, tcp_pueue_ooseq, mem_size, memp_n_tcp_seg. Huomaa myös, että yksityiskohtainen virheenkorjaus voidaan saavuttaa muuttamalla debug_options -ryhmän BSP -parametreja.

Vaihe 6: Asenna Zynq -käsittelyjärjestelmä tiedonsiirtoa varten Ethernetin kautta

Langattomana vastaanottimena toimiva Zybo -kehityskortti toimii samalla tavalla kuin lähettävä laite. Kortin tukipaketin asetukset LwIP: lle ovat samat kuin edellisessä vaiheessa.

Laite ottaa vastaan paketteja, jotka sisältävät videokehyssegmenttejä nanoreitittimestä, ja kopioi videokehystiedot vastaanottavan VDMA: n kolminkertaisen puskurin tilaan. Tietojen päällekirjoittamisen välttämiseksi käytetään kaksinkertaista datapuskuria (jota kutsutaan verkkopuskuriksi) kerättäessä tietoja nanoreitittimestä, jotta verkkoliikenne voi jatkaa suoratoistoa, kun edellinen koko videokehys kopioidaan VDMA -puskuri.

WiDi -vastaanottolaitteen toimenpide vaatii kaksi tehtävää, joista toinen vastaanottaa ethernet -tietoja ja toinen on videokehysten kopioiminen verkkopuskurista VDMA: n kolminkertaiseen puskuriin.

Ethernet -vastaanotto:

  1. Alusta TCP-verkko käyttämällä paljain metallisilla LWIP-ohjainkomentokutsuilla (asennus IP-osoitteella, johon lähetin muodostaa yhteyden, 192.168.0.9 meidän)
  2. Määritä verkkotoiminnoissa tarvittavat takaisinsoittotoiminnot.
  3. Kun vastaanotat ethernet -paketin, kopioi pakettidata nykyiseen verkkopuskuriin, lisää nykyistä kertynyttä dataa.
  4. Jos paketti täyttää verkkokehyspuskurin, jatka vaiheisiin 5 ja 6. Muussa tapauksessa palaa vaiheeseen 3 tästä tehtävästä.
  5. signaali siitä, että VDMA -kolmoiskehyksen puskuritehtävän pitäisi kopioida juuri valmistuneesta verkkopuskurista.
  6. Vaihda toiseen verkkopuskuriin ja jatka datan keräämistä ethernetin kautta.
  7. Odota, kunnes uusi ethernet -paketti on vastaanotettu (vaihe 3).

Kopioi verkkopuskuri VDMA -kolminkertaiseen puskuriin:

  1. Kun VDMA -ohjaimen ajastin on kulunut, syötä RX ISR.
  2. Määritä käytettävissä oleva kehyspuskuri VDMA -harmaakoodin perusteella.
  3. Määritä, mikä verkkopuskuri kopioidaan VDMA -puskuriin, ja kopioi tiedot

Vaihe 7: Liitä Zybo -levyt HDMI -lähteeseen ja HDMI -pesualtaan

Liitä Zybo -levyt HDMI -lähteeseen ja HDMI -pesualtaan
Liitä Zybo -levyt HDMI -lähteeseen ja HDMI -pesualtaan

Liitä nyt sekä vastaanottimen että lähettimen hdmi -kaapelit, ohjelmoi FPGA: t ja suorita käsittelyjärjestelmä. Kuvanopeus on todennäköisesti erittäin hidas LwIP -toiminnon valtavien yleiskustannusten ja rajallisen kaistanleveyden vuoksi. Jos ongelmia ilmenee, muodosta yhteys UARTin kautta ja yritä tunnistaa mahdolliset varoitukset tai virheet.

Vaihe 8: Vaihtoehtoisia ideoita parantamiseen

Vaihtoehtoisia ideoita parantamiseen
Vaihtoehtoisia ideoita parantamiseen

Suuri ongelma tässä projektissa oli wifi -yhteyden kautta lähetettävän datan määrä. Tämä oli odotettua, mutta aliarvioimme sen vaikutuksen ja saimme aikaan enemmän kuvasarjoja näytöllä kuin videosyötteellä. Tätä projektia voidaan parantaa useilla tavoilla:

  • Reaaliaikainen videopakkaus. Saapuvan videosyötteen pakkaaminen kehyksestä toiseen pienentäisi suuresti verkon kautta lähetettävän datan määrää. Ihannetapauksessa tämä tehtäisiin laitteistossa (mikä ei ole helppo tehtävä) tai se voitaisiin tehdä ohjelmistossa käyttämällä toista ARM -ydintä pakkausalgoritmien suorittamiseen (tämä vaatisi lisäanalyysia ajoituksen varmistamiseksi). Verkosta löytyi joitain avoimen lähdekoodin reaaliaikaisia videopakkauskomponentteja, mutta suurin osa on IP -osoitteita.
  • Ethernet -virran käyttöönotto laitteistossa ohjelmiston sijasta. Siellä oli paljon yleiskustannuksia, koska lähettimen lähtevän datan jonottamiseen ei ollut tilaa, koska segmentin kokoa on rajoitettu. Paljon tehokkaampi prosessi on käyttää AXI Ethernet IP: tä FIFO -puskurilla tai DMA: lla datan syöttämiseksi siihen. Tämä vähentäisi LwIP TCP: n ylimääräisiä matkatavaroita ja mahdollistaisi enemmän tiedonkulkua.

Vaihe 9: Esteettömyys

Tämän WiDi -projektin tuloksena olevan tuotteen tulisi olla täysin integroitu, kompakti laitepari, jonka käyttäjä voi liittää mihin tahansa HDMI -lähteeseen ja upottaa sitten videosyötteen näyttöön, jossa on HDMI -ominaisuus langattomasti. Laitteissa olisi Zynq-7000 SoC, joka löytyy Zybo-viitelevyltä, ja ne sisältäisivät TP-Link-nano-reitittimissä olevan verkkolaitteiston. Ihannetapauksessa käyttäjä kykenisi ohjaamaan lähetysmoduulia erillisestä paikasta kohdekäyttöjärjestelmässä ilman suurta teknistä osaamista.

Suojaus ja yhteydet

Laitteiden tulisi sisältää myös TLS (Transport Layer Security) ja niillä on rajoitettu automaattinen yhdistämismahdollisuus sekä yksityisyyden suojaamiseksi. Suunnittelijoiden tarkoituksena on tehdä yhteyden muodostaminen näytön kanssa langattoman liittymän kautta tahalliseksi toimenpiteeksi käyttäjän puolesta, jotta vältetään arkaluontoisen materiaalin lähettäminen virheellisesti.

Nykyinen tila

Tähän asti hankkeen tila on edelleen hyvin kesken. Jotta nykyinen päätepistekäyttäjä hyötyisi tästä opetusohjelmasta, hänellä on oltava vahva tekninen ymmärrys sulautetun järjestelmän suunnittelusta ja hänen on tunnettava ohjelmoitavat laitteistot ja sulautetut ohjelmistot yhdessä.

Verkon kautta lähetettävää dataa ei salata tässä vaiheessa, ja sen oletetaan olevan TCP/IP -pakettien raaka lähetys.

Videon ydinprojekti testattiin onnistuneesti sekä lähetyksen että vastaanoton osalta. Toisaalta kahden zybo -levyn välinen langaton yhteys muodostettiin ja testikehystiedot lähetettiin onnistuneesti. On kuitenkin edelleen tarpeen yhdistää verkkokoodi kuhunkin videon ydinprojektiin ja testata todellisten videokehysten lähetys.

Suositeltava: