Hi, ich sitze an einem Projekt wo ich die PL im Zynq für die Sensordatenerfassung und Aktuatoren nutze und die PS mit Linux für die Verteilung im Netzwerk für ein Kontrollsystem benutze. Nun sitze ich / wir vor dem folgenden Problem, dass wir nicht genau wissen, wie die Werte ausgelesen bzw. gesetzt werden sollen. Nach bisheriger Recherche gibt es die folgenden Möglichkeiten: - UIO - /dev/mem (memorymapping) - DMA Doch habe ich dazu keine "userfreundlichen" Tutorials bzw. Dokumentationen gefunden bzw. das Verständnis fehlt mir wohlmöglich, da ich erst seit wenigen Wochen mit Linux arbeite. Meine Vorstellung wäre so, dass wir von allen Sensoren die Daten erfassen (z.b. Temperatursensoren, Motorpositionen etc...) und an die PL übergeben, sodass man im Linux ein Programm schreiben kann, mit dem z.b. aus /dev/Tempsensor/value zugegriffen werden kann und der wert ausgelesen wird. Ich wäre für eure Ratschläge dankbar. PS: Falls dies die falsche Rubrik sein sollte, lasst es mich wissen. PPS: Ich habe schon im Zynq und Zedboard Forum einen Thread eröffnet aber bisher noch keine Antworten bekommen. PPPS: Zur Zeit benutzen wir das Zedboard, Zybo und RedPitaya und arbeiten mit Vivado 2015.2 auf Linux 14.04 LTS
Welches Interface haben die sensoren? -SPI? -I2C? -JESD204? Wie sind die sensoren im device-Tree (/dev /proc) eingebunden? -> Mit diesen Infos nach dem passenden Treiber suchen. Tipp: Analog devices hat einiges hinsichtlich Linux auf Zynq mit treibern für Sensorik: https://wiki.analog.com/software/linux/docs/iio/iio
Unsere Geräte sind überwiegend Eigenentwicklungen, die wir direkt in der PL ansteuern wie z.B. über RS232. In der PL wird für jedes zu steuerndes Gerät ein IP-Core implementiert, welches die Steuerlogik und Kommunikation zum Gerät beinhaltet. Für unsere Anbindung an die PS haben wir quasi einen Eingangswert-Port sowie Ausgangswert-Port wo jeweils quasi Soll und Ist zustand Übertragen werden (sollten).
Ich hab mal ne kurze Notiz gemacht, wie es beim Red Pitaya geht, vielleicht hilfts Dir: Siehe auch: http://wiki.redpitaya.com/index.php?title=User_Manual#Accessing_FPGA_registers Siehe auch: https://github.com/RedPitaya/RedPitaya/blob/master/FPGA/release1/doc/RedPitaya_HDL_memory_map.odt ----------------------------------------------------------------- C-Seite ARM CPU Module vom AWG Arbitrary Waveform Generator fpga_awg.h definiert eine C-Datenstruktur zur Kommunikation mit dem FPGA im Modul fpga_awg.c int fpga_awg_init(void) blendet diese Datenstruktur so in den physikalischen Adressraum ein, dass ein C-Programm die Datenstruktur nutzen kann um über den "Systembus" aufs FPGA zuzugreifen Mit g_awg_reg->cha_count_wrap = xyz ; wird der Wert xyz vom C-Programm aus in die Variable cha_count_wrap // hat offset 8 in der Datenstruktur *g_awg_reg geschrieben ------------------------------------------------------------------------ -- FPGA Seite Datei red_pitaya_asg_ch.v Variable: reg [RSZ+15: 0] set_a_size ; Kommunikation mit system-bus ..... if (wen) begin // wenn write-enable if (addr[19:0]==20'h0) {set_a_zero, set_a_rst, set_a_once, set_a_wrap} <= wdata[ 7: 4] ; if (addr[19:0]==20'h0) {set_b_zero, set_b_rst, set_b_once, set_b_wrap} <= wdata[23:20] ; if (addr[19:0]==20'h4) set_a_amp <= wdata[ 0+13: 0] ; if (addr[19:0]==20'h4) set_a_dc <= wdata[ 16+13:16] ; if (addr[19:0]==20'h8) set_a_size <= wdata[RSZ+15: 0] ; // das ist cha_count_wrap auf FPGA ......
Moin! ich habe mir das mal vom Redpitaya angeschaut, das ist ja eher eine eigene Lösung wie sie es über ein Baremetal-Programm auslesen oder sehe ich das falsch? Gibt es denn überhaupt eine Standardisierte Lösung wie ich auf die PL zugreifen kann?
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.