Satura rādītājs:

WIDI - bezvadu HDMI, izmantojot Zybo (Zynq Development Board): 9 soļi (ar attēliem)
WIDI - bezvadu HDMI, izmantojot Zybo (Zynq Development Board): 9 soļi (ar attēliem)

Video: WIDI - bezvadu HDMI, izmantojot Zybo (Zynq Development Board): 9 soļi (ar attēliem)

Video: WIDI - bezvadu HDMI, izmantojot Zybo (Zynq Development Board): 9 soļi (ar attēliem)
Video: ТОП-5 популярных игровых приставок для телевизора с Алиэкспресс 2024, Jūlijs
Anonim
WIDI - bezvadu HDMI, izmantojot Zybo (Zynq Development Board)
WIDI - bezvadu HDMI, izmantojot Zybo (Zynq Development Board)
WIDI - bezvadu HDMI, izmantojot Zybo (Zynq Development Board)
WIDI - bezvadu HDMI, izmantojot Zybo (Zynq Development Board)

Vai esat kādreiz vēlējies, lai televizoru varētu savienot ar datoru vai klēpjdatoru kā ārēju monitoru, bet nevēlējāties, lai visas šīs nepatīkamās auklas tiktu traucētas? Ja tā, šī apmācība ir paredzēta tieši jums! Lai gan ir daži produkti, kas sasniedz šo mērķi, DIY projekts ir daudz apmierinošāks un, iespējams, lētāks.

Šī koncepcija atšķiras no tādiem produktiem kā chromecast, jo tā mērķis ir aizstāt HDMI vadu, kas savienojas ar monitoru, nevis straumēšanas ierīci.

Mūsu projekts tika izveidots kā noslēguma projekts reāllaika operētājsistēmu kursam Kalifornijas štata politehniskajā universitātē Sanluisā Obispo.

Projekta mērķis ir izmantot divas Digilent Zybo plates, lai tās darbotos kā bezvadu sakaru saskarne starp HDMI raidītāja ierīci (datoru, blu-ray u.c.) un HDMI uztveršanas ierīci (darbvirsmas monitoru, projektoru, televizoru utt.).

Viens Digilent Zybo tiks pievienots raidītājam, izmantojot HDMI, bet otrs - caur HDMI.

Bezvadu sakari tiks veidoti, izmantojot bezvadu lokālo tīklu, kas paredzēts raidītājam un uztvērējam, un tie netiks novirzīti caur mājas maršrutētāju vai citu līdzīgu ierīci. Šajā projektā izmantotais bezvadu modulis ir tplink wr802n nanorouter, no kuriem viens darbojas kā piekļuves punkts tīkla izveidošanai, bet otrs - kā klients, lai izveidotu savienojumu ar tīklu. Katrs nano maršrutētājs tiks savienots ar Ethernet kabeli vai nu pie Zybo plates. Kad ir izveidots savienojums ar šiem maršrutētājiem, ierīces sazināsies, izmantojot TCP, it kā tās būtu savienotas ar vienu Ethernet kabeli (tas nozīmē, ka vienīgā konfigurācija, kas nepieciešama savienojuma izveidei, ir klienta IP adrese).

Lai gan projekta mērķis bija veicināt 1080x720 video @ 60Hz straumi, tas nebija sasniedzams joslas platuma ierobežojumu dēļ bezvadu tīklā un reāllaika video saspiešanas trūkuma dēļ, lai samazinātu nosūtīšanai nepieciešamos datus. Tā vietā šis projekts kalpo par pamatu turpmākai attīstībai, lai sasniegtu šo mērķi, jo tam ir stingri ierobežoti kadru ātruma ierobežojumi, lai pareizi straumētu HDMI datus, kā paredzēts.

Projekta prasības:

2x Digilent Zybo attīstības plates (jābūt vismaz vienam HDMI portam)

2x HDMI kabeļi

2x microusb kabeļi (lai savienotu Zybo ar datoru attīstībai)

2x tplink wr802n nanorouters (ieskaitot adtl. 2x microusb un sienas kontaktligzdas strāvas adapterus)

2x Ethernet kabeļi

*** Piezīme. Šī apmācība paredz Vivado dizaina komplekta pārzināšanu un pieredzi jauna projekta un bloka dizaina izveidē. ***

1. darbība: konfigurējiet raidītājam programmējamo Zynq loģiku

Konfigurējiet raidītājam programmējamu Zynq loģiku
Konfigurējiet raidītājam programmējamu Zynq loģiku
Konfigurējiet raidītājam programmējamu Zynq loģiku
Konfigurējiet raidītājam programmējamu Zynq loģiku
Konfigurējiet raidītājam programmējamu Zynq loģiku
Konfigurējiet raidītājam programmējamu Zynq loģiku

Mūsu pieeja raidītāja programmējamās loģikas izstrādei bija veikt hdmi-hdmi pāreju no datora uz monitoru, izmantojot divus video tiešās atmiņas piekļuves (VDMA) blokus, vienu rakstīšanai un otru lasīšanai.

Abi ir atlasīti brīvai 3 kadru bufera režīmam (0-1-2). Tā kā video kodols ir optimizēts 60 kadriem sekundē, tas nozīmē, ka VDMA rakstīs vai lasīs jaunā kadrā ik pēc 16,67 ms šādā secībā: 0, 1, 2, 0, 1, 2, 0, 1, 2. Katra kadra DDR atmiņas vietas abām VDMA ir atšķirīgas, jo tās vairs nav sinhronizētas. Tā vietā tiek izmantots aparatūras taimeris (TTC1), kas konfigurēts 60 Hz frekvencei, lai sinhronizētu datu kustību starp abām atmiņas vietām.

Augšējā attēlā ir redzami 3 kadri, to izmēri un nepieciešamais atmiņas apjoms (rāmja labajā pusē). Ja šīm atmiņas vietām piešķiram rakstīšanas VDMA, tad lasāmās VDMA atmiņas vietas varam piešķirt ārpus šīs kopas, teiksim, sākot ar 0x0B000000. Katrs rāmis sastāv no 1280*720 pikseļiem, un katrs pikselis sastāv no 8 sarkaniem, zaļiem un ziliem bitiem, kopā 24 bitiem. Tas nozīmē, ka rāmi veido 1280*720*3 baiti (2,76 MB).

Taimera IRQ iekšpusē, kas aprakstīts VDMA draivera iestatījumos, tiks apstrādāta datu kopēšana starp divām VMDA atmiņas vietām. VDMA nodrošina rādītāju uz pašreizējo kadru, uz kuru tiek rakstīts vai no kura tiek lasīts. Rāmi attēlo noteikts pelēks kods, kas tiek pārveidots programmatūrā. Pelēkā koda definīcijas 3 kadru bufera konfigurācijai ir atrodamas AXI VDMA produktu rokasgrāmatas C pielikumā.

Tas ļauj mums kopēt rakstīto saturu atmiņā, neizlasot no rāmja, kurā pašlaik tiek rakstīts.

*** Ņemiet vērā, ka lasītā VDMA netiek izmantota, nosūtot datus pa bezvadu tīklu. Tā vienīgais mērķis ir pārbaudīt pareizu atmiņas kopēšanas darbību no rakstīšanas VMDA. Lasīšanas VMDA ir jāatspējo. ***

Raidītāja dizaina bloka izveidei ir šādas darbības:

  1. Veidojot jaunu projektu, projektam ieteicams piešķirt mikroshēmu vai tāfelīti. Šajā saitē ir aprakstīts, kā Vivado direktorijā pievienot jaunus tāfeles failus un ar projektu saistīt pareizo tāfelīti. Tas noderēs, pievienojot apstrādes sistēmas bloku un pārejot no aparatūras uz programmatūru (SDK pusē).
  2. Pievienojiet šādus blokus:

    • dvi2rgb
    • Video ieeja Axi4 straumē
    • Laika kontrolieris
    • axi4-stream, lai vid out
    • rgb2dvi
    • AXI VDMA x2
    • AXI GPIO x2
    • Pulksteņa vednis
    • Pastāvīga
    • Zynq apstrādes sistēma
  3. Pievienojot apstrādes sistēmu, augšējā zaļajā joslā noklikšķiniet uz "Palaist bloku automatizāciju" un pārliecinieties, vai ir atlasīta opcija "Lietot paneļa iepriekš iestatīto". Atstājiet visu pārējo pēc noklusējuma.
  4. Katra bloka konfigurācijas loga attēlus var atrast iepriekš redzamajos attēlos. Ja neredzat konkrēta loga attēlu, vienkārši atstājiet to kā noklusējumu.
  5. Sāciet konfigurēt Zynq apstrādes sistēmu:

    • PS-PL konfigurācijā AXI Non Secure Enable GP Master AXI iespējojiet M AXI GP0 saskarni
    • PS-PL konfigurācijas HP Slave AXI saskarnē iespējojiet gan HP0, gan HP1
    • MIO konfigurācijā pārliecinieties, vai sadaļā I/O perifērijas ierīces ir iespējots ENET0, pēc tam lietojumprogrammu procesora vienība, iespējojiet taimeri0
    • Clock Configuration PL Fabric Clocks iespējojiet FCLK_CLK0 un iestatiet uz 100 MHz.
    • Noklikšķiniet uz Labi
  6. Pirms noklikšķināt uz "Palaist savienojuma automatizāciju", noteikti pievienojiet video blokus, kā redzams iepriekš redzamajā TX bloka dizaina attēlā. Jūs vēlaties pārdēvēt konstanti uz VDD un iestatīt vērtību uz 1. Atbilstoši pievienojiet video blokus.
  7. Izveidojiet HDMI TMDS pulksteni un datu tapas ārējos uz blokiem rgb2dvi un dvi2rgb
  8. Izveidojiet ieejas un izejas portu karstās kontaktdakšas noteikšanas signālam (HPD) un savienojiet tos kopā, tie ir definēti ierobežojumu failā
  9. Pikseļu pulkstenis tiek atgūts no TMDS_Clk_p, kas ir izveidots ierobežojumu failā. Tas būs 74,25 MHz saskaņā ar 720p izšķirtspēju. Ir svarīgi savienot pikseļu pulksteni (no bloka dvi2rgb) šādām tapām:

    • vid_io_in_clk (vid no aksi straumes bloka)
    • vid_io_out_clk (aksi straume uz video izejas bloku)
    • clk (laika kontrolieris)
    • PixelClk (rgb2dvi)
  10. *** Piezīme: Pašlaik, lai aktivizētu pikseļu pulksteņa atkopšanu, HDMI rx un tx savienotāji ir jāpievieno aktīvam avotam/izlietnei. Viens veids, kā to novērst, ir sadalīt video rx un tx blokus dažādos pulksteņa domēnos (citiem vārdiem sakot, ģenerēt jaunu 74,25 MHz pulksteni, lai to pārsūtītu uz tx bloku). ***
  11. Tālāk iestatiet pulksteņa vedni tā, lai jums būtu 100 MHz ieeja (globālais bufera avots) un 3 izejas pulksteņi @ 50 MHz (AXI-Lite pulkstenis), 150 MHz (AXI4-straumes pulkstenis), 200 MHz (dvi2rgb RefClk tapa).
  12. Pievienojiet FCLK_CLK0 apstrādes sistēmas tapu pulksteņa vedņa ieejai
  13. Šajā brīdī noklikšķiniet uz "Palaist savienojuma automatizāciju" no zaļās joslas dizaina loga augšpusē. Ieteicams to darīt vienam blokam vienlaikus un sekot iepriekš redzamajam TX bloka dizaina attēlam.
  14. Rīks mēģinās pievienot AXI starpsavienojumu, kas darbojas kā galvenais/palīgsavienojums blokiem, kas izmanto AXI-Lite kopni (VDMA un GPIO).
  15. Tas arī pievienos AXI SmartConnect, kas darbojas kā galvenais/palīgsavienojums AXI4-Stream un augstas veiktspējas procesora saskarnēm, kuras izmanto VDMA (Stream to Memory Map un otrādi).
  16. Rīks arī pievienos procesora sistēmas atiestatīšanu. Pārliecinieties, vai tas ir savienots tikai ar VDMA, GPIO un ar procesoru saistītiem blokiem. Nepievienojiet to nevienam video blokam (t.i., dvi2rgb, laika kontrolieris, video straumēšanai utt.)
  17. Kad savienojumu automatizācija ir pabeigta, pārbaudiet, vai savienojumi atbilst TX bloka dizaina attēlam. Jūs pamanīsit papildu sistēmas ILA bloku, kas nav minēts. Tas ir paredzēts tikai atkļūdošanai un pagaidām nav vajadzīgs. Tas izmanto 150M procesora atiestatīšanu, tāpēc arī tas nav vajadzīgs. Visur, kur autobusos redzat mazas zaļas "kļūdas", tas ir ILA dēļ, un to var ignorēt.
  18. Pēdējais solis ir ar peles labo pogu noklikšķināt uz bloka dizaina projekta avotu kokā un atlasīt “Izveidot HDL iesaiņojumu”. Ja plānojat iesaiņojumam pievienot loģiku, tas tiks pārrakstīts katru reizi, kad tas tiks atlasīts.
  19. Sīkāku informāciju SDK pusē skatiet sadaļā VDMA draivera iestatīšana.

Pulksteņi un atiestatīšana

Es atklāju, ka jebkura programmējama loģikas projekta vissvarīgākie aspekti ir rūpīga pulksteņa domēnu un atiestatīšanas signālu apsvēršana. Ja tie ir pareizi konfigurēti, jums ir labs risinājums, lai jūsu dizains darbotos.

Pikseļu pulkstenis un laiks ir bloķēts

Lai pārbaudītu, vai daži signāli ir aktīvi, ieteicams šos signālus saistīt ar gaismas diodēm (pulksteņi, atiestatījumi, slēdzenes utt.). Divi signāli, kas man šķita noderīgi izsekot raidītāja panelī, bija pikseļu pulkstenis un "bloķētais" signāls AXI4-Stream to video out blokā, kas norāda, ka video laiks ir sinhronizēts ar laika kontrolieri un video avotu dati. Es esmu pievienojis zināmu loģiku dizaina bloku iesaiņojumam, kas izseko pikseļu pulksteni, izmantojot PixelClkLocked signālu uz dvi2rgb bloka kā atiestatīšanu. Es šeit pievienoju failu kā hdmi_wrapper.v. Šeit ir pievienots arī ierobežojumu fails.

2. darbība: konfigurējiet Zynq programmējamo loģiku uztvērējam

Konfigurējiet Zynq programmējamo loģiku uztvērējam
Konfigurējiet Zynq programmējamo loģiku uztvērējam
Konfigurējiet Zynq programmējamo loģiku uztvērējam
Konfigurējiet Zynq programmējamo loģiku uztvērējam
Konfigurējiet Zynq programmējamo loģiku uztvērējam
Konfigurējiet Zynq programmējamo loģiku uztvērējam

Programmējamā loģikas bloks uztvērējam ir vienkāršāks. Galvenā atšķirība, izņemot trūkstošos hdmi ievades blokus, ir atkopta pikseļu pulksteņa trūkums. Šī iemesla dēļ mums ir jārada savs no pulksteņa vedņa. Šis dizains jāveic atsevišķā projektā no raidītāja. Mūsu nolūkos uztvērēja projekts sekoja Zybo 7Z-20 plāksnei, bet raidītājs sekoja Z7-10 plāksnei. Plātņu FPGA ir atšķirīgas, tāpēc esiet uzmanīgi.

Tālāk ir norādītas darbības, lai izveidotu uztvērēja dizaina bloku

  1. Pievienojiet savam dizainam šādus ip blokus:

    • Laika kontrolieris
    • AXI4-straume video izejai
    • RGB uz DVI
    • AXI VDMA
    • AXI GPIO
    • Apstrādes sistēma
    • Pulksteņa vednis
    • Pastāvīga (VDD iestatīts uz 1)
  2. Šo bloku konfigurēšanai izmantojiet to pašu modeli kā raidītājam. Šeit ir iekļauti attēli par ievērojamām konfigurācijas atšķirībām. Pārējie paliek tādi paši kā raidītājs.
  3. Konfigurējiet VDMA šim dizainam kā tikai lasāmu kanālu. Atspējojiet rakstīšanas kanālu.
  4. Pulksteņa vednis jākonfigurē šādām izejām:

    • clk_out1: 75 MHz (pikseļu pulkstenis)
    • clk_out2: 150 MHz (straumes pulkstenis)
    • clk_out3: 50 MHz (aksi-lite pulkstenis)
  5. Pievienojiet video blokus, kā parādīts RX bloka dizaina attēlā.
  6. Pēc tam palaidiet savienojuma automatizāciju, kas pievienos blokus AXI Interconnect, AXI SmartConnect un System Reset un mēģinās izveidot atbilstošos savienojumus. Dodieties lēnām šeit, lai pārliecinātos, ka tas neveic nevēlamus savienojumus.
  7. Padariet HDMI TMDS pulksteni un datu tapas ārējas uz rgb2dvi bloka
  8. Šim dizainam nav nepieciešams karstās kontaktdakšas signāls.

3. darbība: iestatiet VDMA draiveri

Iestatiet VDMA draiveri
Iestatiet VDMA draiveri

Dažādu bloku, kas konfigurēti, izmantojot AXI-Lite interfeisu, iestatīšanu vislabāk var veikt, izmantojot BSP iekļautos demonstrācijas projektus kā atsauci. Pēc dizaina aparatūras eksportēšanas un SDK palaišanas no Vivado vēlaties pievienot jaunu paneļa atbalsta pakotni un BSP iestatījumu logā iekļaut bibliotēku lwip202. Atveriet System.mss faila failu no BSP, un jūs redzēsit perifērijas draiverus, kas atrodas jūsu bloka dizainā. Opcija "Importēt piemērus" ļauj importēt demonstrācijas projektus, kuros tiek izmantotas šīs perifērijas ierīces, un tādējādi parādīt, kā tos konfigurēt programmatūrā, izmantojot pieejamos Xilinx draiverus (skat. Pievienoto attēlu).

Šī bija VDMA, taimera un pārtraukuma un GPIO konfigurēšanas metode. Šeit ir iekļauts gan raidīšanas, gan saņemšanas avota kods. Atšķirības ir gandrīz tikai galvenajā.c.

*** PIEZĪME. Tā kā sistēma šīs apmācības rakstīšanas laikā nav pilnībā funkcionāla, šajā sadaļā iekļautajā avota kodā nav iekļauts bezvadu tīkla kods. Ir jānovērš vairākas kļūdas, apvienojot video kodola pārraides/saņemšanas projektus ar tīkla pārraides/saņemšanas projektiem. Tāpēc šajā apmācībā pagaidām tiek aplūkoti tie atsevišķi. ***

TX pārtraukšanas apstrādātāja funkcija (IRQHandler)

Šī funkcija nolasa pelēkos kodus, ko nodrošina gan lasīšanas, gan rakstīšanas VDMA, izmantojot GPIO blokus. Pelēkie kodi tiek pārvērsti decimāldaļās un tiek izmantoti pašreizējā kadra rāmja bāzes atmiņas vietas izvēlei. Kopētais rāmis ir iepriekšējais kadrs, uz kuru rakstīja VDMA (piemēram, ja VDMA raksta uz 2. kadru, mēs kopējam 1. rāmi; ja rakstām uz 0. kadru, mēs iesaiņojam un lasām no 2. kadra).

Funkcija uzņem tikai katru sesto kadru, lai samazinātu kadru ātrumu līdz 10 Hz, nevis 60 Hz. Tīkla augšējā robeža ir 300 Mb / s. Pie 10 kadriem sekundē ir nepieciešams joslas platums 221,2 Mb / s.

Komentējot/atceļot divas rindas šajā funkcijā, lietotājs varēs pārslēgties uz HDMI passthru režīmu atkļūdošanas/pārbaudes nolūkos (kods tiek komentēts, lai norādītu atbilstošās rindiņas). Pašlaik tas kopē kadru uz atmiņas vietu, ko izmanto Ethernet kods.

RX pārtraukšanas apstrādātāja funkcija (IRQHandler)

Šī funkcija ir ļoti līdzīga TX funkcijai, taču tā kopē no 2 bufera FIFO, ko ethernet izmanto, lai rakstītu ienākošos datus. Ethernet kods norāda, uz kuru kadru tiek rakstīts FIFO, dati tiek kopēti no pretējā kadra. Lai izvairītos no plīsumiem, dati tiek kopēti rāmī tieši aiz tā, kuru nolasa VDMA.

4. darbība: iestatiet Nanorouter tīklu

Iestatiet Nanorouter tīklu
Iestatiet Nanorouter tīklu

Lai izveidotu tīklu, izmantojot TPlink nanorouterus, ieslēdziet tos atsevišķi un izveidojiet savienojumu ar ierīču noklusējuma wifi SSID. Plašāku informāciju par šīs konkrētās ierīces konfigurācijas iestatījumiem var atrast ierīces lietotāja rokasgrāmatā.

Iestatiet vienu no ierīcēm kā piekļuves punktu, tas darbosies kā galvenais tīkla savienojums. Noteikti nosauciet tīklu un pierakstiet tā nosaukumu, kā arī atspējojiet DHCP (mēs nevēlamies, lai maršrutētājs dinamiski konfigurētu IP adreses, mēs vēlamies, lai tansmitera un uztvērēja Zybo dēļi paši iestatītu savas IP adreses, lai tās būtu konsekventas). Pēc konfigurēšanas pārliecinieties, vai ierīce tiek restartēta un izveidots šis tīkls.

Iestatiet otru ierīci kā klientu un pārliecinieties, ka tā izveido savienojumu ar tīkla SSID, kuru iestatījāt, izmantojot pirmo nanorouteru. Vēlreiz pārliecinieties, vai klientam ir atspējota DHCP.

Kad klients ir pabeidzis un atsāknējis, tam vajadzētu izveidot savienojumu ar piekļuves punkta nanorouteru (ja tā nenotiek, iespējams, kāda no jūsu ierīces konfigurācijas problēmām). Jūs pamanīsit, ka klienta gaismas diode būs stabila, kad tas būs pievienots piekļuves punktam.

Piekļuves punkta nanoroutera gaismas diode, iespējams, turpinās mirgot šajā brīdī, tas ir labi! Mirgojošā gaisma nozīmē, ka tā nav savienota ar citu ierīci no Ethernet porta, un, kad tā ir savienota ar konfigurētu Zybo, gaismas diode paliks nemainīga, norādot uz veiksmīgu tīkla savienojumu.

Tagad, kad mums ir uzstādīti nanorouteri, mums ir bezvadu tīkls, kas ļaus mums sazināties. Svarīga piezīme ir tā, ka mūsu konfigurācijas metode nanorouteriem (kā piekļuves punkts un klients) ļauj mums sazināties no nosūtītāja Zybo plates uz saņemošo Zybo plati tā, it kā abi būtu savienoti ar vienu Ethernet vadu. Tas padara mūsu tīkla iestatīšanu mazāk sarežģītu, jo alternatīva, visticamāk, ietver Zybo dēļu konfigurēšanu, lai kopā ar paredzēto savienojumu skaidri izveidotu savienojumu ar serveri.

Kad abas ierīces ir iestatītas, nanorouteri ir konfigurēti un gatavi ieviešanai jūsu WIDI tīklā. Starp nanorouteriem un Zybo dēļiem nav īpaša savienojuma pārī, jo vai nu piekļuves punkts, vai klients darbosies gan raidīšanas, gan saņemšanas ierīcē.

5. darbība: iestatiet Zynq apstrādes sistēmu datu pārraidei, izmantojot Ethernet

Iestatiet Zynq apstrādes sistēmu datu pārraidei, izmantojot Ethernet
Iestatiet Zynq apstrādes sistēmu datu pārraidei, izmantojot Ethernet
Iestatiet Zynq apstrādes sistēmu datu pārraidei, izmantojot Ethernet
Iestatiet Zynq apstrādes sistēmu datu pārraidei, izmantojot Ethernet

Lai pārsūtītu HDMI datus no vienas Zybo plates uz otru, mūsu VDMA draiverī ir jāiekļauj Ethernet protokols. Mūsu mērķis šeit ir straumēt atsevišķus video kadrus caur Ethernet perifēriju apstrādes sistēmā ar noteiktu ātrumu, kas atbilst mūsu tīkla joslas platumam. Mūsu projektam mēs izmantojām TCP, ko nodrošina tukša metāla LwIP API. Tā kā abi projekta dalībnieki ir salīdzinoši nepieredzējuši tīkla komunālo pakalpojumu jomā, šī izvēle tika izdarīta, pilnībā neapzinoties TCP sekas un ierobežojumus. Šīs ieviešanas galvenā problēma bija ierobežotais joslas platums un tas, ka tā patiešām nav paredzēta liela datu apjoma tvaicēšanai. Alternatīvi risinājumi TCP aizstāšanai un tbe uzlabošanai šajā projektā tiks apspriesti vēlāk.

Īss TCP apraksts ar LwIP: dati tīklā tiek nosūtīti paketēs ar izmēru tcp_mss (maksimālais TCP segmenta lielums), kas parasti ir 1460 baiti. Izsaucot tcp_write, būs nepieciešami daži rādītāja norādīti dati un jākonfigurē pbufs (pakešu buferi), lai turētu datus un nodrošinātu TCP darbību struktūru. Maksimālais datu apjoms, ko var rindot vienā reizē, ir iestatīts kā tcp_snd_buf (TCP sūtītāja bufera telpa). Tā kā šis parametrs ir 16 bitu skaitlis, mēs ierobežojam sūtīšanas bufera izmēru 59695 baiti (nosūtīšanas buferī ir daži nepieciešamie polsterējumi). Kad dati ir ievietoti rindā, tiek izsaukta tcp_output, lai sāktu datu pārraidi. Pirms nākamā datu segmenta nosūtīšanas obligāti ir jāpārraida visas iepriekšējās paketes. Šis process tiek veikts, izmantojot funkciju recv_callback, jo šī ir funkcija, kas tiek izsaukta, kad saņēmējs redz apstiprinājumu.

Piemēru projektu izmantošana Vivado SDK ir ļoti noderīga, lai uzzinātu, kā darbojas LwIP TCP, un ir labs sākumpunkts jauna projekta uzsākšanai.

WiDi pārraides ierīces procedūra ir šāda:

  1. Inicializējiet TCP tīklu, izmantojot tikai metāla LWIP draivera funkcijas izsaukumus.
  2. Norādiet visas atzvanīšanas funkcijas, kas nepieciešamas tīkla darbībām.
  3. Izveidojiet savienojumu ar WiDi uztvērēju, izveidojot savienojumu ar tā IP adresi un portu (mūsu konfigurācija: uztvērēja IP ir 192.168.0.9, izveidojiet savienojumu ar 7. portu).
  4. Kad beidzas VDMA draivera taimeris, ievadiet TX ISR.
  5. Nosakiet pašreizējo kadra buferi, kuram piekļūt, pamatojoties uz VDMA pelēko kodu
  6. Ievietojiet pirmo datu segmentu rindā TCP nosūtīšanas buferī
  7. Izvadiet datus un atjauniniet vietējos mainīgos, lai izsekotu, cik daudz datu ir nosūtīts no pašreizējā kadra.
  8. Sasniedzot saņemto atzvanīšanu (funkciju izsaukums pēc tam, kad raidītājs saņem apstiprinājumu par datu izgūšanu), ievietojiet rindā nākamo datu segmentu.
  9. Atkārtojiet 7. un 8. darbību, līdz viss kadrs ir nosūtīts.
  10. Atgriezieties dīkstāvē, lai gaidītu nākamo taimera pārtraukumu, lai norādītu, ka jauns kadrs ir gatavs (atpakaļ uz 4. darbību).

Noteikti iestatiet tāfeles atbalsta pakotnes LwIP iestatījumus, kā parādīts attēlā iepriekš. Visas vērtības ir noklusējuma, izņemot tcp_snd_buf, tcp_pueue_ooseq, mem_size, memp_n_tcp_seg. Ņemiet vērā arī to, ka detalizētu atkļūdošanu var panākt, mainot BSP parametrus grupai debug_options.

6. darbība: iestatiet Zynq apstrādes sistēmu datu uztveršanai, izmantojot Ethernet

Zybo izstrādes dēlis, kas darbosies kā bezvadu uztvērējs, darbosies līdzīgi kā raidītāja ierīce. Plāksnes atbalsta pakotnes iestatījumi LwIP būs identiski iepriekšējā darbībā norādītajiem.

Ierīce no nanoroutera uzņems paketes, kurās ir video rāmja segmenti, un tā kopēs video kadra datus trīskāršā kadra bufera telpā uztvērējai VDMA. Lai izvairītos no jebkādu datu pārrakstīšanas, apkopojot datus no nanoroutera, tiek izmantots dubults datu buferis (mēs to dēvēsim par tīkla buferi), lai tīkla trafiks varētu turpināt straumēšanu, kamēr iepriekšējais pilnais video kadrs tiek kopēts VDMA buferis.

WiDi uztveršanas ierīces procedūrai nepieciešami divi uzdevumi, no kuriem viens ir Ethernet datu saņemšana, bet otrs - video kadru kopēšana no tīkla bufera uz VDMA trīskāršā kadra buferi.

Ethernet uztveršanas uzdevums:

  1. Inicializējiet TCP tīklu, izmantojot neapbruņotu metāla LWIP draivera funkciju izsaukumus (iestatīšana ar IP adresi, ar kuru raidītājs izveidos savienojumu, 192.168.0.9 mūsējā)
  2. Norādiet visas atzvanīšanas funkcijas, kas nepieciešamas tīkla darbībām.
  3. Saņemot Ethernet paketi, kopējiet pakešdatus pašreizējā tīkla buferī, palieliniet pašreizējos uzkrāto datu apjomu.
  4. Ja pakete aizpilda tīkla rāmja buferi, turpiniet 5. un 6. darbību. Pretējā gadījumā no šī uzdevuma atgriezieties pie 3. darbības.
  5. signāls, ka VDMA trīskāršā kadra bufera uzdevumam vajadzētu nokopēt no tikko pabeigtā tīkla bufera.
  6. Pārslēdzieties uz citu tīkla buferi un turpiniet vākt datus, izmantojot Ethernet.
  7. Dīkstāvē, līdz tiek saņemta jauna Ethernet pakete (3. darbība).

Tīkla bufera kopēšana VDMA trīskāršā kadra buferī:

  1. Kad beidzas VDMA draivera taimeris, ievadiet RX ISR.
  2. Nosakiet pašreizējo kadra buferi, kuram piekļūt, pamatojoties uz VDMA pelēko kodu.
  3. Nosakiet, kurš tīkla buferis tiks kopēts VDMA buferī, un nokopējiet šos datus

7. darbība: pievienojiet Zybo paneļus HDMI avotam un HDMI izlietnei

Pievienojiet Zybo paneļus HDMI avotam un HDMI izlietnei
Pievienojiet Zybo paneļus HDMI avotam un HDMI izlietnei

Tagad pievienojiet uztvērēja un raidītāja hdmi kabeļus, ieprogrammējiet FPGA un palaidiet apstrādes sistēmu. Kadru ātrums, visticamāk, būs ļoti lēns, pateicoties milzīgajām pieskaitāmām izmaksām LwIP darbībā un ierobežotajam joslas platumam. Ja rodas kādas problēmas, izveidojiet savienojumu, izmantojot UART, un mēģiniet noteikt visus brīdinājumus vai kļūdas.

8. solis: alternatīvas idejas uzlabošanai

Alternatīvas idejas uzlabošanai
Alternatīvas idejas uzlabošanai

Liela problēma šim projektam bija datu apjoms, kas nepieciešams, lai nosūtītu, izmantojot Wi -Fi. Tas bija sagaidāms, tomēr mēs par zemu novērtējām to ietekmi, kā rezultātā ekrānā parādījās vairāk attēlu, nevis video plūsma. Ir vairāki veidi, kā uzlabot šo projektu:

  • Video saspiešana reālā laikā. Ienākošā video plūsmas saspiešana kadru pa kadram ievērojami samazinātu nepieciešamo datu daudzumu, kas jānosūta pa tīklu. Ideālā gadījumā tas būtu jādara aparatūrā (kas nav viegls uzdevums), vai arī to varētu izdarīt programmatūrā, izmantojot citu ARM kodolu, lai palaistu saspiešanas algoritmus (tam būtu nepieciešama papildu analīze, lai nodrošinātu laiku). Ir daži atvērtā pirmkoda reālā laika video saspiešanas komponenti, kurus mēs atradām tīmeklī, taču lielākā daļa ir IP.
  • Ethernet plūsmas ieviešana aparatūrā, nevis programmatūrā. Segmenta lieluma ierobežojuma dēļ bija daudz pieskaitāmo izdevumu, jo trūka vietas izvadīto datu rindai raidītājā. Daudz efektīvāks process ir datu ievadīšanai tajā izmantot AXI Ethernet IP ar FIFO buferi vai DMA. Tas samazinātu papildu bagāžu no LwIP TCP un nodrošinātu lielāku datu plūsmu.

9. darbība. Pieejamība

Šī WiDi projekta radītajam produktam vajadzētu būt pilnībā integrētam, kompaktam ierīču pārim, ko lietotājs varētu savienot ar jebkuru HDMI avotu un pēc tam bezvadu režīmā nogādāt video plūsmu uz displeju ar HDMI iespējām. Ierīcēm būtu Zynq-7000 SoC, kas atrodams Zybo atsauces panelī, un tajās būtu iekļauta tīkla aparatūra, kas atrodama TP-Link nano-maršrutētājos. Ideālā gadījumā lietotājs varētu kontrolēt pārraides moduli no atsevišķas vietas mērķa operētājsistēmā, un nav vajadzīgas lielas tehniskās iespējas.

Drošība un savienojamība

Ierīcēm jāiekļauj arī transporta slāņa drošība (TLS), un tām jābūt ierobežotām automātiskā savienojuma iespējām gan privātuma nolūkos. Dizaineru nolūks ir izveidot savienojumu ar displeju, izmantojot bezvadu saskarni, par apzinātu darbību lietotāja vārdā, lai izvairītos no kļūdaini sensitīvu materiālu pārraidīšanas.

Pašreizējais statuss

Līdz šim brīdim projekta stāvoklis joprojām ir ļoti liels. Lai pašreizējais galapunkta lietotājs varētu gūt labumu no šīs apmācības, viņam vai viņai ir jābūt labai tehniskai izpratnei par iegulto sistēmu dizainu, un viņam ir jāpārzina programmējama aparatūra un iegultā programmatūra, kas darbojas kopā.

Dati, kas tiek sūtīti tīklā, šobrīd nav šifrēti, un tiek pieņemts, ka tie ir neapstrādāta TCP/IP pakešu pārraide.

Video pamatprojekts tika veiksmīgi pārbaudīts gan pārraidīšanai, gan saņemšanai. No otras puses, tika izveidots bezvadu savienojums starp diviem zybo dēļiem un veiksmīgi nosūtīti testa kadru dati. Tomēr joprojām ir nepieciešams apvienot tīkla kodu ar katru video pamatprojektu un pārbaudīt faktisko video kadru pārraidi.

Ieteicams: