驱动配置
1085 字约 4 分钟
2026-11-14
RF-AD9361 的数字接口与 ADI FMCOMMS2/3 评估板一致(LVDS 模式),可以直接使用 ADI 的 HDL 参考设计、Linux IIO 驱动和 no-OS 驱动。本页给出与本模块硬件对应的配置项;ADI 工程本身的获取与编译见 ADI HDL、ADI Linux 与 no-OS 仓库。
与硬件对应的配置
| 配置项 | 取值 | 硬件依据 |
|---|---|---|
| 数据接口 | LVDS | 模块只引出 LVDS 差分对 |
| 参考时钟 | 40 MHz,晶振模式 | X1 接 XTALP / XTALN |
| 通道模式 | 2T2R(也可配置 1T1R) | 4 个 SMA 均已接入 |
| RX 端口 | A 端口平衡输入(RX1A、RX2A) | B / C 端口已接地 |
| TX 端口 | A 端口(TX1A、TX2A) | TXB 已接偏置,不引出 |
| SPI | 4 线,CPHA = 1 | SPI_DO 单独引出 |
| 复位 | RESETB 低有效,由 GPIO 控制 | J1.30 |
FPGA 接口
使用 ADI HDL 的 axi_ad9361 IP 并保持 LVDS 模式(CMOS_OR_LVDS_N = 0)。下表把模块信号对应到 ADI 参考设计 system_top 的端口名:
| 模块信号 | system_top 端口 | 说明 |
|---|---|---|
| DATA_CLK_P / N | rx_clk_in_p / rx_clk_in_n | 时钟专用输入引脚 |
| RX_FRAME_P / N | rx_frame_in_p / rx_frame_in_n | |
| RX_D[5:0]_P / N | rx_data_in_p[5:0] / rx_data_in_n[5:0] | |
| FB_CLK_P / N | tx_clk_out_p / tx_clk_out_n | |
| TX_FRAME_P / N | tx_frame_out_p / tx_frame_out_n | |
| TX_D[5:0]_P / N | tx_data_out_p[5:0] / tx_data_out_n[5:0] | |
| ENABLE / TXNRX | enable / txnrx | 由 axi_ad9361 驱动 |
| RESETB | gpio_resetb | |
| SYNC_IN / EN_AGC | gpio_sync / gpio_en_agc | |
| CTRL_IN0–3 / CTRL_OUT0–7 | gpio_ctl[3:0] / gpio_status[7:0] | |
| SPI_ENB / CLK / DI / DO | spi_csn / spi_clk / spi_mosi / spi_miso |
约束文件中只需按底板原理图补充 PACKAGE_PIN。以 Xilinx 7 系列 HR bank、VDD_GPO = 2.5 V 为例:
# RX:FPGA 侧启用片内差分端接
set_property -dict {IOSTANDARD LVDS_25 DIFF_TERM TRUE} [get_ports {rx_clk_in_p rx_clk_in_n rx_frame_in_p rx_frame_in_n}]
set_property -dict {IOSTANDARD LVDS_25 DIFF_TERM TRUE} [get_ports {rx_data_in_p[*] rx_data_in_n[*]}]
# TX:端接在 AD9361 片内
set_property IOSTANDARD LVDS_25 [get_ports {tx_clk_out_p tx_clk_out_n tx_frame_out_p tx_frame_out_n}]
set_property IOSTANDARD LVDS_25 [get_ports {tx_data_out_p[*] tx_data_out_n[*]}]
# 控制与 SPI 使用同一 bank 电压
set_property IOSTANDARD LVCMOS25 [get_ports {enable txnrx gpio_resetb gpio_sync gpio_en_agc gpio_ctl[*] gpio_status[*]}]
set_property IOSTANDARD LVCMOS25 [get_ports {spi_csn spi_clk spi_mosi spi_miso}]
# DATA_CLK 最高 245.76 MHz(2T2R、61.44 MSPS)
create_clock -name rx_clk -period 4.0 [get_ports rx_clk_in_p]使用 HP bank 时把 LVDS_25 / LVCMOS25 换成 LVDS / LVCMOS18,并把 VDD_GPO 设为 1.8 V。
Linux 设备树
在 ADI 的 adi-fmcomms2.dtsi 基础上,确认以下属性与本模块一致(节点名与 SPI 总线按平台调整):
ad9361_clkin: clock@0 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <40000000>; /* X1 40 MHz */
clock-output-names = "ad9361_ext_refclk";
};
&spi0 {
adc0_ad9361: ad9361-phy@0 {
compatible = "adi,ad9361";
reg = <0>;
spi-cpha;
spi-max-frequency = <10000000>;
clocks = <&ad9361_clkin>;
clock-names = "ad9361_ext_refclk";
clock-output-names = "rx_sampl_clk", "tx_sampl_clk";
#clock-cells = <1>;
adi,2rx-2tx-mode-enable;
adi,frequency-division-duplex-mode-enable;
adi,lvds-mode-enable;
adi,lvds-bias-mV = <150>;
adi,lvds-rx-onchip-termination-enable; /* FB_CLK、TX_FRAME、TX_D 端接 */
adi,rx-rf-port-input-select = <0>; /* RX1A / RX2A,平衡输入 */
adi,tx-rf-port-input-select = <0>; /* TX1A / TX2A */
/* 使用晶振:不要设置 adi,xo-disable-use-ext-refclk-enable */
reset-gpios = <&gpio0 RESETB_GPIO GPIO_ACTIVE_LOW>;
};
};RESETB_GPIO 替换为底板上连接 J1.30 的 GPIO 编号。如需由 FPGA 逻辑通过 ENABLE / TXNRX 引脚切换收发状态,再加入 adi,ensm-enable-pin-pulse-mode-enable 与 adi,ensm-enable-txnrx-control-enable;默认通过 SPI 控制状态机。
no-OS 初始化参数
使用 no-OS 时,在 AD9361_InitParam 中设置:
.reference_clk_rate = 40000000UL, /* X1 40 MHz */
.xo_disable_use_ext_refclk_enable = 0, /* 晶振模式 */
.two_rx_two_tx_mode_enable = 1,
.frequency_division_duplex_mode_enable = 1,
.lvds_mode_enable = 1,
.lvds_bias_mV = 150,
.lvds_rx_onchip_termination_enable = 1,
.rx_rf_port_input_select = 0, /* RX1A / RX2A */
.tx_rf_port_input_select = 0, /* TX1A / TX2A */复位、SPI 与 GPIO 描述符按所用平台的 no-OS 工程填写。
上电检查
- 电源:测量 VCC1_1V3、VCC2_1V3 为 1.3 V(C2 / C5 两端),VDD_GPO 与 FPGA bank VCCO 一致。
- SPI 读 ID:释放 RESETB 后读寄存器
0x037,读数与0xF8相与应为0x08(低 3 位为芯片版本,典型读数0x0A)。Linux 下可用:cd /sys/kernel/debug/iio/iio:device0 # ad9361-phy 对应的设备 echo 0x37 > direct_reg_access && cat direct_reg_access - 驱动初始化:
dmesg中出现AD936x Rev <n> successfully initialized,说明 BBPLL 锁定且数据接口校准通过。 - 射频回环:TX1A 经 30 dB 以上衰减器接 RX1A,设置相同本振后在 IIO Oscilloscope 或
iio_readdev中确认收到发射的单音。
初始化失败时
| 现象 | 检查 |
|---|---|
读 ID 为 0x00 或 0xFF | RESETB 是否已释放、SPI_ENB 极性、SPI 模式(CPHA = 1)、VDD_GPO 是否上电 |
| BBPLL 不锁定 | 参考时钟是否配置为 40 MHz 晶振模式(未设置外部参考) |
| 数据接口校准失败(digital tune failed) | rx_clk_in 是否接时钟专用引脚、FPGA 侧 DIFF_TERM、LVDS 对极性与组内等长 |
| 收不到信号 | 端口选择是否为 A 端口、天线或线缆是否接在对应的 SMA 上 |