ADI RFIC 设备驱动 IIO API 命令备忘
驱动程序 API 命令备忘说明
每个IIO设备(通常是硬件芯片)在/ sys / bus / iio / devices / iio:deviceX下都有一个设备文件夹。
其中X是设备的IIO索引。根据所讨论的硬件设备的特征和功能,在这些目录文件夹中的每个文件夹下均包含一组文件。
这些文件在IIO ABI文档中得到了一致的概括和记录。
为了确定哪个IIO deviceX对应于哪个硬件设备,使用命令用户可以读取名称文件
cat / sys / bus / iio / devices / iio:device* / name
通用属性命名约定:
in_voltage0_ […]:目标RX1
in_voltage1_ […]:目标RX2(仅适用于2RX2TX模式)
out_voltage0_ […]:目标TX1
out_voltage1_ […]:目标TX2(仅2RX2TX模式)
out_altvoltage0_ […]:目标RX LO
out_altvoltage1_ […]:目标TX LO
显示设备名称
root:/sys/bus/iio/devices/iio:device1> cat name adrv9009-phy
启用状态机控件
root:/sys/bus/iio/devices/iio:device1> cat ensm_mode_available sleep wait alert fdd pinctrl pinctrl_fdd_indep radio_on radio_off
FDD模式选项:
-
睡眠
-
警报
-
fdd
-
pinctrl
-
pinctrl_fdd_indep(FDD独立模式)
TDD模式选项:
- 睡眠
-
警报
-
接收
-
发射
-
pinctrl
本地振荡器控制(LO)
AD9361收发器包含两个相同的RFPLL合成器,以生成所需的LO信号。
一个被编程为RX通道,另一个被编程为TX通道。
该驱动程序支持的调谐范围涵盖70MHz至6GHz,调谐粒度为2Hz。
root@fs:/sys/bus/iio/devices/iio:device1# cat out_altvoltage0_TRX_LO_frequency
设置/查询RX采样率
root:/sys/bus/iio/devices/iio:device1> cat in_voltage0_sampling_frequency 30720000
列出所选的RX路径速率
该属性列出了各个数字块中的当前速率。
阶段 | 描述 | 比率 |
---|---|---|
锁相环 | 基带PLL频率 | |
模数转换器 | ADC采样率 | BBPLL / ADC = BBPLL分频器 |
R2 | HB3 / DEC3过滤器的速率 | ADC / R2 = HB3抽取系数 |
R1 | HB2过滤器的速率 | R2 / R1 = HB2抽取系数 |
射频 | HB1过滤器的速率 | R1 / RF = HB1抽取系数 |
RXSAMP | RX采样率或基带率 | RF / RXSAMP = FIR抽取因子 |
root:/sys/bus/iio/devices/iio:device1> cat rx_path_rates BBPLL:983040000 ADC:245760000 R2:122880000 R1:61440000 RF:30720000 RXSAMP:30720000
设置/查询TX采样率
root:/sys/bus/iio/devices/iio:device1> cat out_voltage_sampling_frequency 30720000
列出选择的发送路径速率
该属性列出了各个数字块中的当前速率。
阶段 | 描述 | 比率 |
---|---|---|
TXSAMP | TX采样率或基带率 | TF / TXSAMP = FIR插值因子 |
TF | HB1过滤器的速率 | T1 / TF = HB1内插因子 |
T1 | HB2过滤器的速率 | T2 / T1 = HB2内插因子 |
T2 | HB3 / INT3过滤器的速率 | DAC / T2 = HB3内插因子 |
数模转换器 | DAC采样率 | ADC / DAC = DAC时钟分频器 |
锁相环 | 基带PLL频率 | BBPLL / ADC = BBPLL分频器 |
root:/sys/bus/iio/devices/iio:device1> cat tx_path_rates BBPLL:983040000 DAC:122880000 T2:122880000 T1:61440000 TF:30720000 TXSAMP:30720000
数字FIR滤波器控件
RX / TX信号路径中的最后一个/第一个数字滤波器是可编程的多相FIR滤波器。
RX / TX FIR滤波器可以以1、2或4的系数进行抽取/内插,或者如果不需要,可以将其旁路。
过滤器抽头可配置为16组,介于最少16个抽头和最多128个抽头之间。
RX FIR还具有-12dB,-6dB,0dB或+ 6dB的可编程增益。
该滤波器提供固定的+ 6dB增益以最大化动态范围,因此可编程增益通常设置为-6dB以产生0dB的净增益。
TX FIR还具有0dB或-6dB的可编程增益设置。
root:/sys/bus/iio/devices/iio:device1> cat filter_fir_config FIR Rx 0,0 Tx 0,0
返回值:
Rx <Num Taps>,<抽取因子> Tx <Num Taps>,<内插因子>
每个文件都需要一个简短的标题:
-
前缀为“#”的行将被忽略
-
系数是带符号的16位数字
-
可以加载多个滤波器文件,直到每个RX和每个TX都有自己的系数集
-
语法和示例如下所示
RX [1,2,3(both)] GAIN [-12, -6, 0, 6] DEC [1,2,4] TX [1,2,3(both)] GAIN [-6, 0] INT [1,2,4] [RRX <BBPLL ADC R2 R1 RF RXSAMP>] [RTX <BBPLL DAC T2 T1 TF TXSAMP>] [BWRX <RX RF Bandwidth>] [BWTX <RX TF Bandwidth>] <tx-coef0, rx-coef0> <tx-coef1, rx-coef1> <…, …> <tx-coefN-1, rx-coefN-1>
#RX [1,2,3(both)] GAIN [-12, -6, 0, 6] DEC [1,2,4] #TX [1,2,3(both)] GAIN [-6, 0] INT [1,2,4] #tx,rx RX 3 GAIN -6 DEC 2 TX 3 GAIN 0 INT 2 RTX 983040000 245760000 245760000 122880000 61440000 30720000 RRX 983040000 491520000 245760000 122880000 61440000 30720000 BWTX 19365438 BWRX 19365514 -5,49 0,217 --snip--
射频带宽模拟滤波器控制
RX射频带宽控制
RFIC具有多个Rx模拟滤波器模块(RX TIA LPF,RX BB LPF),在ADC之前通过去除混频器产品并在下变频之前提供通用的低通滤波来降低杂散信号电平,从而进行模拟滤波。
RX TIA LPF是具有可编程3dB转折频率的单极低通滤波器。
RX BB LPF是具有可编程3dB转折频率的三阶Butterworth低通滤波器。
可以通过写入单个设备属性(in_voltage_rf_bandwidth)来设置这些过滤器
root:/sys/bus/iio/devices/iio:device1> cat in_voltage0_rf_bandwidth 200000000
TX RF带宽控制
具有多个Tx模拟滤波器模块(TX BB LPF,TX次级LPF),在DAC通过消除采样伪像并在上变频之前提供常规的低通滤波来降低杂散输出后,进行模拟滤波。
TX BB LPF是具有可编程3dB转折频率的三阶巴特沃斯低通滤波器。TX次级LPF是具有可编程3dB转折频率的单极低通滤波器。
可以通过写入单个设备属性(out_voltage_rf_bandwidth)来设置这些过滤器
root:/sys/bus/iio/devices/iio:device1> cat out_voltage0_rf_bandwidth 18000000
接收增益控制
通用性和高度可配置性的收发器具有几种增益控制模式,使其能够用于多种应用。
可以使用全自动增益控制(AGC)模式来解决时分双工(TDD)和频分双工(FDD)方案。
此外,还具有手动增益控制(MGC)选项,允许基带处理器(BBP)控制增益。
默认的ADI在全表模式下提供的优化增益表提供77个条目,而在分立增益表模式下提供41个条目。
每个索引通常产生1 dB单调增益步长。共有3个不同的表格可用于不同的RX LO频率范围。
驱动程序根据RX LO设置自动交换表。
自定义增益表可以在驱动程序探测期间自动加载,也可以稍后通过gain_table_config sysfs属性自动加载。
表必须存储在/ lib / firmware文件夹中,或者使用CONFIG_FIRMWARE_IN_KERNEL,CONFIG_EXTRA_FIRMWARE配置选项编译到内核中。
可以使用以下设备树属性指定在驱动程序探测期间加载的表:
adi,gaintable-name =“ *_std_gaintable”;
如果未指定或加载任何表,驱动程序将继续使用提供的标准增益表。
增益表以下面指定的格式存储在人类可读的文件中。一个文件中最多可以提供15个增益表(用于不同的频率范围或增益表模式)
-
增益表必须是单调的
-
gain_in_ dB:是绝对增益,以dB为单位(有符号字符格式:-128…127)
-
reg_0x131:外部LNA,内部LNA和混频器增益字
-
reg_0x132:TIA和LPF字
-
reg_0x133:DC Cal位和Dig增益字
-
结束必须大于开始频率(以Hz为单位)
-
必须提供足够的表以支持整个使用的调整范围
-
dest指定目标RX。(1 = RX1,2 = RX2,3 = RX1和RX2)(默认情况下始终使用RX1和RX2时不使用)
增益控制模式
root:/sys/bus/iio/devices/iio:device1> cat in_voltage0_gain_control_mode_available manual fast_attack slow_attack hybrid
模式 | 描述 |
---|---|
手动的 | 在MGC模式下,BBP控制增益索引指针。BBP以其最简单的形式评估I / O端口上的数字信号电平,然后适当地调整增益。BBP可以通过以下两种方式之一来控制手动增益。默认方法使用SPI写入(写入in_voltage [0,1] _hardgagain),以dB为单位的总增益。这将导致不同的增益指标,具体取决于加载的增益表。或者,BBP可以向控制输入引脚发送脉冲以移动增益指标。 |
slow_attack | 慢速攻击模式用于缓慢变化的信号,例如在某些FDD应用程序(例如WCDMA和FDD LTE)中发现的信号。慢速攻击AGC使用具有滞后特性的二阶控制环路,该环路会改变增益,以便将平均信号功率保持在可编程范围内 |
hybrid
|
AGC混合模式与慢速AGC模式相同,不同之处在于不使用增益更新计数器。取而代之的是,当BBP将CTRL_IN2信号拉高时,会发生增益更新。之所以会出现“混合”一词,是因为BBP从AD9361手中夺走了对该算法的某些控制权,因此增益控制不再是完全自动的。 |
fast_attack | 快速起义模式适用于“突发”开和关的波形,例如在TDD应用程序或GSM / EDGE FDD应用程序中发现的波形。AGC在突发开始时对过载非常快速地做出响应,因此AGC可以在信号的数据部分到达时稳定到最佳增益指标。 |
读取当前增益
支持所有可用的增益控制模式
root:/sys/bus/iio/devices/iio:device1> cat in_voltage0_hardwaregain 30.000000 dB
MGC设置当前增益
仅在手动增益控制模式(MGC)中可用
root:/sys/bus/iio/devices/iio:device1> echo 42 > in_voltage0_hardwaregain
发射衰减控制
可以分别控制TX1和TX2的TX衰减/增益。范围从0到-89.75 dB,以0.25dB为步长。
此处使用的术语是增益而不是衰减,因此所有值均表示为负。
root:/sys/bus/iio/devices/iio:device1> cat out_voltage0_hardwaregain -10.000000 dB
接收强度信号指示器(RSSI)
可以将接收强度信号指示器(RSSI)设置为几种配置之一,从而允许用户优化RSSI,从而以最小的BBP交互作用产生极为准确的结果。
通过以dB为单位测量功率电平并补偿接收路径增益来测量RSSI 。
可用的各种选项都支持TDD和FDD应用程序。请注意,RSSI值不是绝对单位。
使RSSI回读值等于绝对功率电平(例如,以dBm为单位))需要系统工厂或工作台校准。
要将RSSI字校准为绝对参考,请将信号注入完整系统的天线端口并读取RSSI字。
通过该测试,生成一个校正因子,该校正因子使RSI字等于天线端口处的注入信号电平。
root:/sys/bus/iio/devices/iio:device1> cat in_voltage0_rssi 104.50 dB
TX接收强度信号指示器(TX RSSI)
认识到在TDD系统中,接收器和发送器不能同时工作,可以通过将功率检测器复用到接收路径中来重用接收器电路。
接收器RSSI电路随后在发射脉冲串期间打开,并导致精确的Tx RSSI测量。
root:/sys/bus/iio/devices/iio:device1> cat out_voltage0_rssi 30.50 dB
校准模式控制
root:/sys/bus/iio/devices/iio:device1> cat calib_mode_available auto manual manual_tx_quad tx_quad rf_dc_offs rssi_gain_step
选项 | 描述 |
---|---|
自动 | 当移至与先前载波频率相距100 MHz以上的新载波频率时,请运行TX正交校准 |
手动的 | 禁用自动模式 |
manual_tx_quad | 禁用自动模式,并防止任何TX Quad校准,除非使用tx_quad手动调用 |
rf_dc_offs | 发出RF DC失调校准 |
tx_quad | 发行TX正交校准(可能具有第二个可选参数(校准相位值0..31) |
rssi_gain_step | 运行RSSI增益阶跃校准。在运行此校准之前,请在通道带宽内提供一个单音并监视接收到的数据。调整音调幅度,直到接收到的数据在满量程的几dB之内,但不会过载。一旦完成此校准,calib_mode将自动设置为其先前的值。 |
温度读数
为了获得准确的结果,此回读需要进行一点出厂校准。
确定此回读(以摄氏度为单位)与已知设备温度之间的偏移量。
然后以摄氏度为单位调整设备树属性“ adi,temp-sense-offset-signed”。
在OSC高级插件中,请参见温度传感器偏移下的AUX ADC / DAC / IO选项卡。
同样,绝对偏移量(带符号的char)也直接写入寄存器0x0B。
例子:
-
温度传感器偏移量(Reg 0x0B)= 0xCE = -50
-
in_temp0_input回读= 28123 m°C→温度为28°C
-
实际设备温度24°C
-
偏移增量= 24-28 = -4
-
温度传感器偏移(已校正)= -50-4 = -54 = 0xCA
root:/sys/bus/iio/devices/iio:device1> cat in_temp0_input 86825
设备驱动程序路径查询
为了确定是否有问题的IIO设备(*-phy),您首先需要标识IIO设备编号。因此,请阅读每个IIO设备的名称属性。
root:grep "" /sys/bus/iio/devices/iio\:device*/name
root:/sys/bus/iio/devices/iio:device1/name:adrv9009-phy
root:cd /sys/bus/iio/devices/iio:device1
debug模式
cd /sys/kernel/debug/iio/iio\:device1
内置自测(BIST)
BIST单音
用户可选的音(具有频率和电平选择),可以注入到RX或TX路径中。可以提供一个MASK来禁用某些通道。屏蔽的通道(复选框选中)不驱动任何数据。
句法:
bist_tone <注入点> <音频频率> <音频电平> <通道>
价值 | 功能 |
---|---|
0 | 禁用 |
1 | TX |
2 | RX |
频率 | |
---|---|
值 | 功能 |
0 | FSample / 32 |
1 | FSample / 16 |
2 | FSample * 3/32 |
3 | FS/ 8 |
> 3 | 所需的音频频率(以Hz为单位)(驾驶员将在内部选择最接近的匹配项 |
级别(dbFS) | |
---|---|
值 | 功能 |
0 | 满量程(FS) |
6 | FS / 2 |
12 | FS / 4 |
18 | FS / 8 |
通道mask | |
---|---|
值 | 功能 |
0 | 屏蔽通道1 I数据 |
1 | 屏蔽通道1 Q数据 |
2 | 屏蔽通道2 I数据 |
3 | 屏蔽通道2 Q数据 |
echo 2 1000 6 0 > bist_tone