参考
zynq纯PL读取XADC.csdn
zynq在PS测用XADC读取外部引脚电压.csdn
PL
无
只用 Linux 读 XADC:设备树启通道即可,不用加 vauxp0/vauxn0 顶层端口约束。 用 PL/XADC Wizard 接 VAUX:才需要在 Vivado/XDC 里约束这些模拟端口。 PL 设计里把 XADC 外部模拟输入作为顶层端口使用 时才加这种约束 set_property PACKAGE_PIN C20[get_ports vauxp0]set_property IOSTANDARD LVCMOS33[get_ports vauxp0]set_property ANALOGtrue[get_ports vauxp0]set_property PACKAGE_PIN B20[get_ports vauxn0]set_property IOSTANDARD LVCMOS33[get_ports vauxn0]set_property ANALOGtrue[get_ports vauxn0]设备树
#include <dt-bindings/gpio/gpio.h>#include <dt-bindings/input/input.h>#include <dt-bindings/media/xilinx-vip.h>#include <dt-bindings/phy/phy.h>/{model="ant_boot Board 321";compatible="xlnx,zynq-zc702","xlnx,zynq-7000";chosen{bootargs="console=ttyPS0,115200 earlycon=cdns,mmio,0xe0000000,115200n8 keep_bootcon earlyprintk root=/dev/mmcblk0p2 rw rootwait";stdout-path="serial0:115200n8";};leds{compatible="gpio-leds";gpio-led1{label="led2";gpios=<&gpio00GPIO_ACTIVE_HIGH>;default-state="on";};gpio-led5{label="ps_led0";gpios=<&gpio07GPIO_ACTIVE_HIGH>;default-state="on";};gpio-led6{label="ps_led1";gpios=<&gpio08GPIO_ACTIVE_HIGH>;linux,default-trigger="timer";};};ming_axi_dma0: ming-axi-dma{compatible="ming,axi-dma";dmas=<&axi_dma_00>;dma-names="rx";dma-buffer-size=<0x00100000>;slot0-ctrl-base=<0x43c00000>;status="okay";};};&uart0{u-boot,dm-pre-reloc;port-number=<0>;status="okay";};&sdhci0{u-boot,dm-pre-reloc;status="okay";};&qspi{u-boot,dm-pre-reloc;flash@0{compatible="winbond,w25q32","jedec,spi-nor";reg=<0x0>;spi-max-frequency=<50000000>;#address-cells = <1>;#size-cells = <1>;partition@0{label="boot";reg=<0x00000000 0x00100000>;};partition@100000{label="bootenv";reg=<0x00100000 0x00010000>;};partition@110000{label="space";reg=<0x00110000 0x002F0000>;};};};&gem0{local-mac-address=[00 0a3500 8b87];phy-handle=<ðernet_phy>;ethernet_phy: ethernet-phy@7{reg=<0x7>;device_type="ethernet-phy";};};&axi_dma_0{status="okay";#dma-cells = <1>;};&adc{status="okay";xlnx,channels{#address-cells = <1>;#size-cells = <0>;channel@0{reg=<0>;/* VP/VN */};channel@1{reg=<1>;/* VAUX0 */};channel@2{reg=<2>;/* VAUX1 */};channel@3{reg=<3>;/* VAUX2 */};channel@4{reg=<4>;/* VAUX3 */};channel@5{reg=<5>;/* VAUX4 */};channel@6{reg=<6>;/* VAUX5 */};channel@7{reg=<7>;/* VAUX6 */};channel@8{reg=<8>;/* VAUX7 */};channel@9{reg=<9>;/* VAUX8 */};channel@10{reg=<10>;/* VAUX9 */};channel@11{reg=<11>;/* VAUX10 */};channel@12{reg=<12>;/* VAUX11 */};channel@13{reg=<13>;/* VAUX12 */};channel@14{reg=<14>;/* VAUX13 */};channel@15{reg=<15>;/* VAUX14 */};channel@16{reg=<16>;/* VAUX15 */};};};测试脚本
read_vaux.sh
XADC输入为 0V 到 1.0V
最大采样率 1 MSPS, 12位
#!/bin/shIIO=/sys/bus/iio/devices/iio:device0forrawfin"$IIO"/in_voltage*_vpvn_raw"$IIO"/in_voltage*_vaux*_raw;do[-e"$rawf"]||continuebase=${rawf%_raw}name=$(basename"$base")raw=$(cat"${base}_raw")scale=$(cat"${base}_scale")awk-vname="$name"-vraw="$raw"-vscale="$scale"' BEGIN { mv = raw * scale printf "%-24s raw=%-5d %10.3f mV %8.6f V\n", name, raw, mv, mv / 1000 }'done测试
root@ant:~# ./read_vaux.shin_voltage8_vpvnraw=7718.799mV0.018799V in_voltage10_vaux1raw=10525.635mV0.025635V in_voltage11_vaux2raw=14134.424mV0.034424V in_voltage12_vaux3raw=17442.480mV0.042480V in_voltage13_vaux4raw=20349.561mV0.049561V in_voltage14_vaux5raw=23557.373mV0.057373V in_voltage15_vaux6raw=27567.139mV0.067139V in_voltage16_vaux7raw=31777.393mV0.077393V in_voltage17_vaux8raw=31276.172mV0.076172V in_voltage18_vaux9raw=34383.740mV0.083740V in_voltage19_vaux10raw=34684.473mV0.084473V in_voltage20_vaux11raw=35085.449mV0.085449V in_voltage21_vaux12raw=35386.182mV0.086182V in_voltage22_vaux13raw=35185.693mV0.085693V in_voltage23_vaux14raw=32479.102mV0.079102V in_voltage24_vaux15raw=35486.426mV0.086426V in_voltage9_vaux0raw=215.127mV0.005127V