Tartalomjegyzék:

WIDI - vezeték nélküli HDMI a Zybo segítségével (Zynq Development Board): 9 lépés (képekkel)
WIDI - vezeték nélküli HDMI a Zybo segítségével (Zynq Development Board): 9 lépés (képekkel)

Videó: WIDI - vezeték nélküli HDMI a Zybo segítségével (Zynq Development Board): 9 lépés (képekkel)

Videó: WIDI - vezeték nélküli HDMI a Zybo segítségével (Zynq Development Board): 9 lépés (képekkel)
Videó: Xperia™ arc csatlakoztatása HDMI kábel segítségével 2024, Július
Anonim
WIDI - vezeték nélküli HDMI a Zybo segítségével (Zynq Development Board)
WIDI - vezeték nélküli HDMI a Zybo segítségével (Zynq Development Board)
WIDI - vezeték nélküli HDMI a Zybo segítségével (Zynq Development Board)
WIDI - vezeték nélküli HDMI a Zybo segítségével (Zynq Development Board)

Azt kívánta valaha, hogy a TV -t külső monitorként PC -hez vagy laptophoz tudja csatlakoztatni, de nem akarta, hogy ezek a bosszantó vezetékek ne legyenek útban? Ha igen, akkor ez az oktatóanyag csak neked szól! Bár vannak olyan termékek, amelyek elérik ezt a célt, a DIY projekt sokkal kielégítőbb és potenciálisan olcsóbb.

Ez a koncepció különbözik az olyan termékektől, mint a chromecast, mivel azt szánják, hogy helyettesítsék a HDMI -kábelt, amely a monitorhoz csatlakozik, ahelyett, hogy streaming eszköz lenne.

Projektünk a Kaliforniai Állami Politechnikai Egyetem, San Luis Obispo Valós idejű operációs rendszerek tanfolyamának utolsó projektjeként jött létre.

A projekt célja, hogy két Digilent Zybo táblát használjon vezeték nélküli kommunikációs interfészként egy HDMI adóegység (PC, Blu-ray, stb.) És egy HDMI-fogadó eszköz (asztali monitor, kivetítő, TV stb.) Között.

Az egyik Digilent Zybo HDMI -n keresztül csatlakozik az adóeszközhöz, a másik pedig HDMI -n keresztül a fogadó eszközhöz.

A vezeték nélküli kommunikáció az adó és a vevő számára dedikált vezeték nélküli helyi hálózat használatával történik, anélkül, hogy otthoni útválasztón vagy más hasonló eszközön keresztül irányítanák. A projekthez használt vezeték nélküli modul a tplink wr802n nanorouter, amelyből az egyik hozzáférési pontként működik a hálózat létrehozásához, a másik pedig a hálózathoz való csatlakozáshoz ügyfélként. Minden nanorouter ethernet kábellel csatlakozik a Zybo kártyához. Amikor ezekhez az útválasztókhoz kapcsolódnak, az eszközök úgy kommunikálnak a TCP -n keresztül, mintha egyetlen Ethernet -kábellel csatlakoztak volna (vagyis a kapcsolat létrehozásához csak az ügyfél IP -címe szükséges).

Míg a projekt célja az 1080x720 video @ 60Hz -es adatfolyam megkönnyítése volt, ez nem volt elérhető a vezeték nélküli hálózat sávszélesség -korlátozásai és a valós idejű videó tömörítés hiánya miatt, hogy csökkentsék a küldéshez szükséges adatokat. Ehelyett ez a projekt szolgál keretként a jövőbeli fejlesztéshez e cél elérése érdekében, mivel szigorúan korlátozza a képkockasebesség korlátozásait a HDMI -adatok megfelelő áramlásához.

A projekt követelményei:

2x Digilent Zybo fejlesztőlap (legalább egy HDMI -porttal kell rendelkeznie)

2x HDMI kábel

2x microusb kábel (a Zybo számítógéphez való csatlakoztatásához fejlesztéshez)

2x tplink wr802n nanorouter (beleértve az adtl. 2x microusb és fali aljzat hálózati adaptereit)

2x ethernet kábel

*** Megjegyzés: Ez az oktatóanyag feltételezi, hogy ismeri a Vivado tervezőcsomagot, és tapasztalatot szerez egy új projekt és blokktervezés létrehozásában. ***

1. lépés: Konfigurálja a Zynq programozható logikáját az adó számára

Konfigurálja a Zynq programozható logikáját az adó számára
Konfigurálja a Zynq programozható logikáját az adó számára
Konfigurálja a Zynq programozható logikáját az adó számára
Konfigurálja a Zynq programozható logikáját az adó számára
Konfigurálja a Zynq programozható logikáját az adó számára
Konfigurálja a Zynq programozható logikáját az adó számára

Az adóegység programozható logikájának kifejlesztésében az volt a megközelítésünk, hogy hdmi-hdmi átjárást hajtunk végre a számítógépről a monitorra két VDMA (Video Direct Memory Access) blokk használatával, az egyik írásra és egy olvasásra.

Mindkettő szabadon futó, 3 keretpuffer módra van kiválasztva (0-1-2). Mivel a videómagot másodpercenként 60 képkockára optimalizálták, ez azt jelenti, hogy a VDMA 16,67 ms -onként új keretbe ír vagy olvas, ebben a sorrendben: 0, 1, 2, 0, 1, 2, 0, 1, 2. Az egyes keretek DDR memóriahelyei eltérőek a két VDMA esetében, mivel már nincsenek szinkronban egymással. Ehelyett egy hardver időzítőt (TTC1) használnak, amely 60 Hz -re van konfigurálva, hogy szinkronizálja az adatmozgást a két memóriahely között.

A fenti képen 3 képkocka látható, azok mérete és a szükséges memóriamennyiség (a keret jobb oldalán). Ha ezekhez a memóriahelyekhez rendeljük az író VDMA -t, akkor az olvasott VDMA memóriahelyeket is hozzárendelhetjük ezen a halmazon túl, mondjuk 0x0B000000 kezdettel. Minden keret 1280*720 képpontból áll, és minden képpont 8 bit vörösből, zöldből és kékből áll, összesen 24 bitből. Ez azt jelenti, hogy a keret 1280*720*3 bájtból áll (2,76 MB).

A VDMA illesztőprogram beállításaiban leírt IRQ időzítő belsejében az adatok másolása a két VMDA memóriahely között történik. A VDMA mutatót mutat az aktuális képkockára, amelyre írnak vagy onnan olvasnak. A keretet egy adott szürke kód jelöli, amelyet a szoftver átalakít. A 3 képkocka-puffer konfiguráció szürke kód definíciói megtalálhatók az AXI VDMA termékismertető C mellékletében.

Ez lehetővé teszi számunkra, hogy az írott tartalmat lemásoljuk a memóriába anélkül, hogy olvasnánk a jelenleg írott keretből.

*** Ne feledje, hogy az olvasott VDMA nem használható, amikor adatokat küld a vezeték nélküli hálózaton. Csak az a célja, hogy ellenőrizze a memória írási VMDA -ból történő másolásának megfelelő működését. A VMDA olvasását le kell tiltani. ***

Íme a lépések a távadó tervezési blokk létrehozásához:

  1. Új projekt létrehozásakor célszerű chipet vagy táblát rendelni a projekthez. Ez a link leírja, hogyan adhat hozzá új táblafájlokat a Vivado könyvtárhoz, és hogyan társíthatja a megfelelő táblát a projektjéhez. Ez jól jöhet, ha hozzáadja a feldolgozórendszer blokkot, és hardverről szoftverre vált (SDK oldal).
  2. Adja hozzá a következő blokkokat:

    • dvi2rgb
    • Videó az Axi4-streambe
    • Időzítés vezérlő
    • axi4-stream, hogy vid ki
    • rgb2dvi
    • AXI VDMA x2
    • AXI GPIO x2
    • Óra varázsló
    • Állandó
    • Zynq feldolgozó rendszer
  3. A feldolgozó rendszer hozzáadásakor kattintson a felső zöld színű sávon a "Blokk -automatizálás futtatása" gombra, és győződjön meg arról, hogy az "Alaplap beállítása" opció ki van választva. Minden mást hagyjon alapértelmezettként.
  4. Az egyes blokkkonfigurációs ablakok képei megtalálhatók a fenti képeken. Ha nem lát egy adott ablak képét, hagyja alapértelmezettként.
  5. Kezdje el a Zynq feldolgozó rendszer konfigurálását:

    • A PS-PL konfigurációban AXI Non Secure Enable GP Master AXI, engedélyezze az M AXI GP0 interfészt
    • A PS-PL konfiguráció HP Slave AXI interfészében engedélyezze mind a HP0, mind a HP1 funkciót
    • A MIO konfigurációban Győződjön meg arról, hogy az ENET0 engedélyezve van az I/O perifériák alatt, majd az Alkalmazásfeldolgozó egység, engedélyezze a Timer0 -t
    • A Clock Configuration PL Fabric Clocks alkalmazásban engedélyezze az FCLK_CLK0 beállítást, és állítsa 100 MHz -re.
    • Kattintson az OK gombra
  6. Mielőtt a "Kapcsolati automatizálás futtatása" gombra kattint, győződjön meg arról, hogy a videoblokkokat a fenti TX blokk tervezési képen látható módon csatlakoztatja. Érdemes átnevezni az állandó értéket VDD -re, és az értéket 1 -re állítani. Ennek megfelelően csatlakoztassa a videoblokkokat.
  7. Tegye külsővé a HDMI TMDS órát és adattűket az rgb2dvi és dvi2rgb blokkokon
  8. Hozzon létre egy bemeneti és kimeneti portot a forró csatlakozó érzékelő jelhez (HPD), és csatlakoztassa őket egymáshoz, ezeket a kényszerfájl határozza meg
  9. A pixelóra a korlátozási fájlban létrehozott TMDS_Clk_p -ből áll vissza. Ez 74,25 MHz lesz 720p felbontásnak megfelelően. Fontos, hogy a pixel órát (a dvi2rgb blokkból) a következő tűkhöz csatlakoztassa:

    • vid_io_in_clk (vid in axi stream block)
    • vid_io_out_clk (axi stream a vid out blokkhoz)
    • clk (időzítő vezérlő)
    • PixelClk (rgb2dvi)
  10. *** Megjegyzés: Jelenleg a pixelóra -helyreállítás aktiválásához a HDMI rx és tx csatlakozókat aktív forráshoz/mosogatóhoz kell csatlakoztatni. Ennek egyik módja az, hogy a videó rx és tx blokkokat különböző óratartományokra osztja szét (más szóval, hozzon létre egy új 74,25 MHz -es órát, amelyet a tx blokkhoz kell táplálni). ***
  11. Ezután állítsa be az óravarázslót úgy, hogy 100 MHz-es bemenetet (globális pufferforrás) és 3 kimeneti órát @ 50 MHz (AXI-Lite óra), 150 MHz-et (AXI4-Stream óra), 200 MHz (dvi2rgb RefClk pin) használjon.
  12. Csatlakoztassa az FCLK_CLK0 feldolgozórendszer tűjét az óravarázsló bemenetéhez
  13. Ezen a ponton kattintson a "Kapcsolati automatizálás futtatása" gombra a tervezési ablak tetején lévő zöld sávon. Érdemes ezt egy -egy blokkra elvégezni, és követni a fenti TX blokk kialakítási képet.
  14. Az eszköz megpróbálja hozzáadni az AXI összekapcsolást, amely a fő/szolga összeköttetésként működik az AXI-Lite buszt használó blokkok (VDMA és GPIO) számára.
  15. Hozzáadja az AXI SmartConnect-et is, amely a VDMA által használt AXI4-Stream és High Performance processzor interfészek (Stream to Memory Map és fordítva) master/slave összekötőjeként működik.
  16. Az eszköz hozzáad egy processzor rendszer -visszaállítást is. Győződjön meg arról, hogy ez csak a VDMA -khoz, a GPIO -khoz és a processzorhoz kapcsolódó blokkokhoz van csatlakoztatva. Ne csatlakoztassa semmilyen videóblokkhoz (pl. Dvi2rgb, időzítő, videó közvetítéshez stb.)
  17. Miután befejezte a kapcsolat automatizálását, ellenőrizze, hogy a kapcsolatok megegyeznek -e a TX blokk tervezési képével. Észre fog venni egy további rendszer ILA blokkot, amelyet nem említettünk. Ez csak hibakeresésre szolgál, és jelenleg nincs rá szükség. A 150M processzor visszaállítást használja, így erre sincs szükség. Bárhol kis zöld "hibákat" lát a buszokon, ez az ILA miatt van, és figyelmen kívül hagyható.
  18. Az utolsó lépés az, hogy jobb egérgombbal kattintson a blokktervre a projekt forrásfájában, és válassza a "HDL csomagoló létrehozása" lehetőséget. Ha azt tervezi, hogy logikát kíván hozzáadni a burkolóhoz, akkor minden alkalommal felülírja, amikor ezt kiválasztja.
  19. Lásd a VDMA illesztőprogram beállítása részt az SDK oldalon.

Órák és visszaállítások

Azt tapasztaltam, hogy minden programozható logikai projekt legfontosabb szempontja az óratartományok és a visszaállítási jelek gondos mérlegelése. Ha ezek megfelelően vannak konfigurálva, akkor jó esélye van a tervezés működésére.

Pixel óra és időzítés zárolva

Annak ellenőrzésére, hogy bizonyos jelek aktívak -e, érdemes ezeket a jeleket LED -ekhez kötni (órák, visszaállítások, zárak stb.). Két jel, amelyeket hasznosnak találtam nyomon követni a távadón, a pixelóra és az "AXI4-Stream to video out" blokk "zárolt" jele, amely azt jelzi, hogy a videó időzítése szinkronban van az időzítővel és a videóforrással adat. Hozzáadtam némi logikát a tervezőblokk -burkolóhoz, amely a pixel órát követi vissza a dvi2rgb blokkon lévő PixelClkLocked jel használatával. Itt csatoltam a fájlt hdmi_wrapper.v néven. A megszorítások fájlja is itt található.

2. lépés: Konfigurálja a Zynq programozható logikáját a vevő számára

Konfigurálja a Zynq programozható logikáját a vevő számára
Konfigurálja a Zynq programozható logikáját a vevő számára
Konfigurálja a Zynq programozható logikáját a vevő számára
Konfigurálja a Zynq programozható logikáját a vevő számára
Konfigurálja a Zynq programozható logikáját a vevő számára
Konfigurálja a Zynq programozható logikáját a vevő számára

A vevő programozható logikai blokkja egyszerűbb. A legfontosabb különbség a hiányzó hdmi bemeneti blokkokon kívül a visszanyert pixelóra hiánya. Ezért saját magunkat kell előállítanunk az óravarázslóból. Ezt a tervezést az adótól külön projektben kell elvégezni. Céljaink szerint a vevő projekt a Zybo 7Z-20 kártyát követte, míg az adó a Z7-10 táblát. A táblákon lévő FPGA -k különbözőek, ezért… legyen óvatos.

A vevőkészítő blokk létrehozásának lépései a következők:

  1. Adja hozzá a következő ip blokkokat a tervezéshez:

    • Időzítés vezérlő
    • AXI4-Stream videó kimenetre
    • RGB - DVI
    • AXI VDMA
    • AXI GPIO
    • Feldolgozó rendszer
    • Óra varázsló
    • Állandó (VDD 1 -re állítva)
  2. A blokkok konfigurálásához ugyanazt a mintát kövesse, mint az adó. A figyelemre méltó konfigurációs különbségeket bemutató képeket ide illesztettük. A többi ugyanaz marad, mint az adó.
  3. Konfigurálja a VDMA -t ehhez a kialakításhoz csak olvasható csatornaként. Tiltsa le az írási csatornát.
  4. Az óravarázslót a következő kimenetekre kell konfigurálni:

    • clk_out1: 75 MHz (pixel óra)
    • clk_out2: 150 MHz (adatfolyam)
    • clk_out3: 50 MHz (axi-lite óra)
  5. Csatlakoztassa a videoblokkokat az RX blokk tervezési képének megfelelően.
  6. Ezután futtassa a kapcsolat automatizálást, amely hozzáadja az AXI Interconnect, AXI SmartConnect és a System Reset blokkokat, és megpróbálja létrehozni a megfelelő kapcsolatokat. Lassan menjen ide, és győződjön meg arról, hogy nem hajt végre nem kívánt kapcsolatokat.
  7. Tegye külsővé a HDMI TMDS órát és adattűket az rgb2dvi blokkon
  8. Ebben a kialakításban nincs szükség forró csatlakozó jelre.

3. lépés: A VDMA illesztőprogram beállítása

VDMA illesztőprogram beállítása
VDMA illesztőprogram beállítása

Az AXI-Lite interfészen keresztül konfigurált különböző blokkok beállítását a legjobban a BSP-ben található demóprojektek használatával lehet elvégezni. A tervezési hardver exportálása és az SDK Vivadóból történő elindítása után új tábla támogatási csomagot kell hozzáadnia, és be kell vennie az lwip202 könyvtárat a BSP beállítások ablakába. Nyissa meg a system.mss fájlfájlt a BSP -ből, és látni fogja a blokktervezésből származó perifériás illesztőprogramokat. A "Példák importálása" opció lehetővé teszi az ezeket a perifériákat használó bemutató projektek importálását, és megmutatja, hogyan konfigurálhatja őket szoftverben a rendelkezésre álló Xilinx illesztőprogramok használatával (lásd a mellékelt képet).

Ezt a módszert használták a VDMA, az Timer & Interrupt és a GPIO konfigurálásához. Ide tartozik mind az adás, mind a fogadás forráskódja. A különbségek szinte kizárólag a main.c.

*** MEGJEGYZÉS: Mivel a rendszer nem teljesen működőképes az oktatóanyag megírásakor, az ebben a részben található forráskód nem tartalmazza a vezeték nélküli hálózati kódot. Számos hibát kell orvosolni, mivel a video mag adási/fogadási projektjeit a hálózati átviteli/fogadási projektekkel kombinálják. Ezért ez az oktatóanyag egyelőre külön kezeli őket. ***

TX megszakítás kezelő funkció (IRQHandler)

Ez a funkció beolvassa a szürke kódokat, amelyeket az olvasási és írási VDMA -k biztosítanak a GPIO blokkokon keresztül. A szürke kódokat tizedesre konvertálják, és az aktuális keret keretmemória -helyének kiválasztására használják. A másolt keret az előző keret ahhoz a kerethez, amelyre a VDMA ír (pl. Ha a VDMA a 2. keretbe ír, akkor az 1. keretet másoljuk; ha a 0. keretbe írjuk, akkor a 2. keretből tekerjük és olvassuk).

A funkció csak minden hatodik képkockát rögzít, hogy csökkentse a képsebességet 60 Hz helyett 10 Hz -re. A hálózat felső határa 300 Mbps. 10 képkocka másodpercenként 221,2 Mbps sávszélesség szükséges.

A funkció két sorának megjegyzéssel való megjegyzése/megszüntetése lehetővé teszi a felhasználó számára, hogy hibakeresési/tesztelési célokra HDMI passthru módra váltson (a kód megjegyzésekkel jelzi a megfelelő sorokat). Jelenleg a keretet az ethernet kód által használt memóriahelyre másolja.

RX megszakítás kezelő funkció (IRQHandler)

Ez a funkció nagyon hasonlít a TX funkcióhoz, de 2 puffer FIFO -ból másol, amelyet az ethernet használ a bejövő adatok írására. Az ethernet kód jelzi, hogy a FIFO melyik keretbe ír, az adatok a másik keretből másolódnak. Az adatok a szakadás elkerülése érdekében közvetlenül a VDMA által olvasott keret mögé kerülnek.

4. lépés: A Nanorouter hálózat beállítása

A Nanorouter hálózat beállítása
A Nanorouter hálózat beállítása

Ahhoz, hogy hálózatot hozzon létre a TPlink nanorouterek használatával, kapcsolja be őket egyenként, és csatlakozzon az eszközök alapértelmezett wifi SSID -jéhez. Az adott eszköz konfigurációs beállításaival kapcsolatos további információk az eszköz felhasználói kézikönyvében találhatók.

Állítsa be az egyik eszközt hozzáférési pontként, ez lesz a hálózat elsődleges kapcsolata. Ne felejtse el elnevezni a hálózatot, és jegyezze fel a nevet, és tiltsa le a DHCP -t (nem azt akarjuk, hogy az útválasztó dinamikusan konfigurálja az IP -címeket, hanem azt szeretnénk, ha a tansmitter és a fogadó Zybo táblák maguk állítanák be IP -címüket, hogy azok konzisztensek legyenek). A konfigurálás után győződjön meg arról, hogy az eszköz újraindul és létrehozza ezt a hálózatot.

Állítsa be a másik eszközt ügyfélként, és győződjön meg arról, hogy csatlakozik az első nanorouterrel beállított hálózati SSID -hez. Ismét győződjön meg arról, hogy a DHCP le van tiltva az ügyfél számára.

Miután az ügyfél befejezte és újraindította, csatlakoznia kell a hozzáférési pont nanorouteréhez (ha nem, akkor valószínűleg probléma van az egyik eszköz konfigurációjában). Észre fogja venni, hogy a kliens LED -je folyamatosan világít, miután csatlakozott a hozzáférési ponthoz.

A hozzáférési pont nanorouter LED valószínűleg továbbra is villogni fog ezen a ponton, ez rendben van! A villogó fény azt jelenti, hogy nem csatlakozik másik eszközhöz az ethernet portjáról, és miután csatlakoztatta a konfigurált Zybo -hoz, a LED folyamatosan világít, jelezve a sikeres hálózati kapcsolatot.

Most, hogy beállítottuk a nanoroutereinket, van egy vezeték nélküli hálózatunk, amely lehetővé teszi számunkra a kommunikációt. Fontos megjegyzés, hogy a nanooruterek konfigurációs módszere (hozzáférési pontként és ügyfélként) lehetővé teszi, hogy kommunikáljunk az átvivő Zybo kártyáról a fogadó Zybo kártyára úgy, mintha a kettő egyetlen ethernet vezetékkel lenne összekötve. Ez megnehezíti a hálózatunk beállítását, mivel az alternatíva valószínűleg magában foglalja a Zybo táblák konfigurálását úgy, hogy kifejezetten csatlakozzanak a szerverhez, a tervezett csatlakozással együtt.

Miután mindkét eszköz telepítve van, a nanorouterek konfigurálva vannak, és készen állnak a WIDI -hálózatba való bevezetésre. Nincs külön párosítás a nanorouterek és a Zybo táblák között, mivel akár a hozzáférési pont, akár a kliens működni fog akár az adás, akár a fogadás eszközén.

5. lépés: A Zynq feldolgozó rendszer beállítása az Etherneten keresztül történő adatátvitelhez

Állítsa be a Zynq feldolgozó rendszert az Etherneten keresztüli adatátvitelhez
Állítsa be a Zynq feldolgozó rendszert az Etherneten keresztüli adatátvitelhez
Állítsa be a Zynq feldolgozó rendszert az Etherneten keresztüli adatátvitelhez
Állítsa be a Zynq feldolgozó rendszert az Etherneten keresztüli adatátvitelhez

Annak érdekében, hogy a HDMI adatokat az egyik Zybo kártyáról a másikra továbbíthassuk, be kell építenünk egy VDMA illesztőprogramba egy Ethernet protokollt. Célunk az, hogy az egyes videó képkockákat a feldolgozórendszer Ethernet perifériáján keresztül sugározzuk, a hálózati sávszélességünkkel összhangban beállított sebességgel. Projektünk során a csupasz fém LwIP API által biztosított TCP-t használtuk fel. Mivel a projekt mindkét tagja viszonylag tapasztalatlan a hálózati segédprogramokban, ezt a döntést úgy hozták meg, hogy nem ismerték fel teljesen a TCP -vel kapcsolatos következményeket és korlátokat. Ennek a megvalósításnak a fő problémája a korlátozott sávszélesség volt, és az a tény, hogy valóban nem nagy mennyiségű adat gőzölésére tervezték. A TCP kiváltására és a tbe fejlesztésére vonatkozó alternatív megoldásokat ebben a projektben később tárgyaljuk.

Az LwIP -vel ellátott TCP rövid leírása: Az adatokat a hálózaton keresztül tcp_mss (TCP maximális szegmensméret) méretű csomagokban küldik, ami általában 1460 bájt. A tcp_write meghívásához néhány adatra lesz szükség, amire mutató hivatkozik, és konfigurálja a pbufs (csomagpuffereket) az adatok tárolására és a TCP műveletek szerkezetének biztosítására. Az egyszerre sorba állítható maximális adatmennyiség tcp_snd_buf (TCP feladó pufferterület). Mivel ez a paraméter egy 16 bites szám, 59995 bájtos küldési pufferre vagyunk korlátozva (a küldési pufferben van néhány szükséges kitöltés). Miután az adatok sorba kerültek, a tcp_output meghívja az adatok továbbítását. A következő adatszegmens elküldése előtt feltétlenül szükséges az összes korábbi csomag sikeres továbbítása. Ez a folyamat a recv_callback függvénnyel történik, mivel ezt a funkciót hívják meg, amikor a nyugtázás látható a vevőből.

A Vivado SDK példaprojektjeinek felhasználása nagyon hasznos az LwIP TCP működésének megismerésében, és jó kiindulópont egy új projekt elindításához.

A WiDi átviteli eszköz eljárása a következő:

  1. Inicializálja a TCP hálózatot a pusztafém LWIP illesztőprogram-hívások használatával.
  2. Adja meg a hálózati műveletekhez szükséges visszahívási funkciókat.
  3. Csatlakozzon a WiDi vevőhöz az IP -címéhez és a portjához való csatlakozás révén (konfigurációnk: A vevő IP -címe 192.168.0.9, csatlakozzon a 7. porthoz).
  4. Amikor a VDMA illesztőprogram időzítője lejár, adja meg a TX ISR -t.
  5. Határozza meg az aktuális keretpuffert a hozzáféréshez a VDMA szürke kód alapján
  6. Sorolja fel a TCP küldési puffer első adatszegmensét
  7. Adja ki az adatokat, és frissítse a helyi változókat, hogy nyomon kövesse, mennyi adatot küldtek az aktuális keretből.
  8. A fogadott visszahívás elérésekor (a funkcióhívás azután történt, hogy az adó nyugtázta az adatvisszanyerést), állítsa sorba a következő adatszegmenst.
  9. Ismételje a 7. és 8. lépést, amíg a teljes keretet el nem küldte.
  10. Térjen vissza tétlen állapotba, és várja meg, amíg a következő időzítő megszakítás jelzi, hogy az új keret készen áll (Vissza a 4. lépéshez).

Ügyeljen arra, hogy a fenti képen látható módon konfigurálja az alaplap támogatási csomagjának LwIP beállításait. Minden érték alapértelmezett, kivéve a tcp_snd_buf, tcp_pueue_ooseq, mem_size, memp_n_tcp_seg. Vegye figyelembe azt is, hogy a részletes hibakeresés a debug_options csoport BSP paramétereinek megváltoztatásával érhető el.

6. lépés: A Zynq feldolgozó rendszer beállítása Etherneten keresztül történő adatfogadáshoz

A Zybo fejlesztőkártya, amely vezeték nélküli vevőként fog működni, hasonlóan fog működni, mint az adó eszköz. Az LwIP alaplapi támogatási csomagjának beállításai megegyeznek az előző lépésben megadottakkal.

Az eszköz csomagokat vesz fel a nanorouterből a videókeret szegmenseket tartalmazó csomagokat, és másolja a videókeret adatait a fogadó VDMA hármas keret pufferterébe. Annak érdekében, hogy elkerüljük az adatok felülírását, dupla adatpuffert (hálózati puffernek nevezünk) használunk, amikor adatokat gyűjtünk a nano -útválasztóról, hogy a hálózati forgalom tovább folytatódhasson, miközben az előző teljes videókeretet a VDMA puffer.

A WiDi fogadóeszköz eljárása két feladatot igényel, az egyik az ethernet adatok fogadása, a másik pedig a videókeretek másolása a hálózati pufferből a VDMA hármas képkocka pufferébe.

Ethernet vételi feladat:

  1. Inicializálja a TCP-hálózatot a pusztafém LWIP illesztőprogram-hívások használatával (beállítás IP-címmel, amelyhez az adó csatlakozni fog, 192.168.0.9 a miénkben)
  2. Adja meg a hálózati műveletekhez szükséges visszahívási funkciókat.
  3. Az ethernet csomag fogadása után másolja a csomagadatokat az aktuális hálózati pufferbe, növelje az aktuális felhalmozott adatokat.
  4. Ha a csomag kitölti a hálózati keretpuffert, folytassa az 5. és 6. lépéssel. Ellenkező esetben folytassa a feladat 3. lépését.
  5. jelzi, hogy a VDMA tripla frame buffer feladatnak az újonnan befejezett hálózati pufferből kell másolnia.
  6. Váltson a másik hálózati pufferre, és folytassa az adatgyűjtést az Etherneten keresztül.
  7. Tétlen, amíg új ethernet csomagot nem kap (3. lépés).

Hálózati puffer másolása a VDMA triple frame pufferbe:

  1. Amikor a VDMA illesztőprogram időzítője lejár, írja be az RX ISR -t.
  2. Határozza meg az elérni kívánt keretpuffert a VDMA szürke kód alapján.
  3. Határozza meg, hogy melyik hálózati puffert másolja át a VDMA pufferbe, és másolja át az adatokat

7. lépés: Csatlakoztassa Zybo paneleit a HDMI forráshoz és a HDMI mosogatóhoz

Csatlakoztassa Zybo paneleit a HDMI forráshoz és a HDMI mosogatóhoz
Csatlakoztassa Zybo paneleit a HDMI forráshoz és a HDMI mosogatóhoz

Most csatlakoztassa a hdmi kábeleket a vevőhöz és az adóhoz, programozza az FPGA -kat és futtassa a feldolgozó rendszert. A képkockasebesség valószínűleg nagyon lassú lesz, az LwIP művelet hatalmas költségei és a korlátozott sávszélesség miatt. Ha bármilyen probléma merül fel, csatlakozzon az UART -on keresztül, és próbálja meg azonosítani a figyelmeztetéseket vagy hibákat.

8. lépés: Alternatív ötletek a fejlesztéshez

Alternatív ötletek a fejlesztéshez
Alternatív ötletek a fejlesztéshez

A projekt nagy problémája volt a wifi -n keresztüli küldéshez szükséges adatmennyiség. Ez várható volt, azonban alulbecsültük ennek a hatását, és inkább képeket törtünk ki a képernyőn, mint egy videócsatornában. Ennek a projektnek a javítására többféle módszer létezik:

  • Valós idejű videó tömörítés. A bejövő videó feed feed képkockánként történő tömörítése nagymértékben csökkenti a hálózaton keresztül küldendő adatmennyiséget. Ideális esetben ezt hardveren végeznék (ami nem könnyű feladat), vagy szoftveresen is, ha a másik ARM magot használnák egy tömörítési algoritmus futtatásához (ez további elemzést igényel, hogy biztosítsa az időzítést). Vannak nyílt forráskódú valós idejű videó tömörítési összetevők, amelyeket a weben találtunk, de a legtöbb IP.
  • Az Ethernet adatfolyam hardveres megvalósítása, nem pedig szoftver. Rengeteg rezsiköltséget okozott a szegmens méretének korlátozása miatt a kimenő adatok sorba állításához szükséges adóhiány miatt az adó. Sokkal hatékonyabb folyamat, ha az AXI Ethernet IP -t FIFO pufferrel vagy DMA -val használja az adatok betöltéséhez. Ez csökkentené az LwIP TCP -ből származó extra poggyászokat, és nagyobb adatáramlást tesz lehetővé.

9. lépés: Kisegítő lehetőségek

A WiDi projekt eredményeként létrejött terméknek egy teljesen integrált, kompakt eszközpárnak kell lennie, amelyet a felhasználó bármilyen HDMI -forráshoz csatlakoztathat, majd vezeték nélkül csatlakoztathatja a videofolyamot egy HDMI -képes kijelzőhöz. Az eszközök a Zybo referenciatábláján található Zynq-7000 SoC-t tartalmazzák, és beépítik a TP-Link nano-útválasztók hálózati hardverét. Ideális esetben a felhasználó képes lenne vezérelni az átviteli modult a cél operációs rendszeren belül egy különálló helyről, kevés technikai képességre.

Biztonság és csatlakoztathatóság

Az eszközöknek tartalmazniuk kell a Transport Layer Security (TLS) technológiát is, és korlátozott automatikus kapcsolódási képességgel kell rendelkezniük, mind a magánélet védelme érdekében. A tervezők szándéka, hogy a kijelzővel való kapcsolatot a vezeték nélküli interfészen keresztül szándékos cselekvéssé tegyék a felhasználó nevében, hogy elkerüljék az érzékeny anyagok téves sugárzását.

Jelenlegi állapot

Eddig a pontig a projekt állapota még mindig nagyon folyamatban van. Ahhoz, hogy a jelenlegi végfelhasználó hasznot húzhasson ebből az oktatóanyagból, erős technikai ismeretekkel kell rendelkeznie a beágyazott rendszer tervezéséről, és ismernie kell a programozható hardvereket és beágyazott szoftvereket.

A hálózaton keresztül küldött adatok jelenleg nincsenek titkosítva, és feltételezzük, hogy a TCP/IP csomagok nyers továbbítása.

A videó alapprojektjét sikeresen tesztelték mind az adás, mind a vétel szempontjából. Másrészt létrejött a vezeték nélküli kapcsolat két zybo tábla között, és a tesztkeret adatait sikeresen elküldte. Még mindig szükség van arra, hogy a hálózati kódot egyesítsük az egyes videó magprojektekhez, és teszteljük a tényleges videókeretek átvitelét.

Ajánlott: