|
| 1 | +.. SPDX-License-Identifier: GPL-2.0 |
| 2 | +
|
| 3 | +=============== |
| 4 | +ADF41513 driver |
| 5 | +=============== |
| 6 | + |
| 7 | +This driver supports Analog Devices' ADF41513 and ADF41510 PLL frequency |
| 8 | +synthesizers on SPI bus. |
| 9 | + |
| 10 | +1. Supported devices |
| 11 | +==================== |
| 12 | + |
| 13 | +* `ADF41510 <https://www.analog.com/ADF41510>`_ |
| 14 | +* `ADF41513 <https://www.analog.com/ADF41513>`_ |
| 15 | + |
| 16 | +The ADF41513 is an ultralow noise frequency synthesizer that can be used to |
| 17 | +implement local oscillators (LOs) as high as 26.5 GHz in the upconversion and |
| 18 | +downconversion sections of wireless receivers and transmitters. The ADF41510 |
| 19 | +is a similar device that supports frequencies up to 10 GHz. |
| 20 | + |
| 21 | +Both devices support integer-N and fractional-N operation modes, providing |
| 22 | +excellent phase noise performance and flexible frequency generation |
| 23 | +capabilities. |
| 24 | + |
| 25 | +Key Features: |
| 26 | + |
| 27 | +- **ADF41513**: 1 GHz to 26.5 GHz frequency range |
| 28 | +- **ADF41510**: 1 GHz to 10 GHz frequency range |
| 29 | +- Integer-N and fractional-N operation modes |
| 30 | +- Ultra-low phase noise (-235 dBc/Hz integer-N, -231 dBc/Hz fractional-N) |
| 31 | +- High maximum PFD frequency (250 MHz integer-N, 125 MHz fractional-N) |
| 32 | +- 25-bit fixed modulus or 49-bit variable modulus fractional modes |
| 33 | +- Programmable charge pump currents with 16x range |
| 34 | +- Digital lock detect functionality |
| 35 | +- Phase resync capability for consistent output phase |
| 36 | +- Clock framework integration for system clock generation |
| 37 | + |
| 38 | +2. Device attributes |
| 39 | +==================== |
| 40 | + |
| 41 | +The ADF41513 driver provides the following IIO extended attributes for |
| 42 | +frequency control and monitoring: |
| 43 | + |
| 44 | +Each IIO device has a device folder under ``/sys/bus/iio/devices/iio:deviceX``, |
| 45 | +where X is the IIO index of the device. Under these folders reside a set of |
| 46 | +device files that provide access to the synthesizer's functionality. |
| 47 | + |
| 48 | +The following table shows the ADF41513 related device files: |
| 49 | + |
| 50 | ++----------------------+-------------------------------------------------------+ |
| 51 | +| Device file | Description | |
| 52 | ++======================+=======================================================+ |
| 53 | +| frequency | RF output frequency control and readback (Hz) | |
| 54 | ++----------------------+-------------------------------------------------------+ |
| 55 | +| frequency_resolution | Target frequency resolution control (Hz) | |
| 56 | ++----------------------+-------------------------------------------------------+ |
| 57 | +| refin_frequency | Reference input frequency control and readback (Hz) | |
| 58 | ++----------------------+-------------------------------------------------------+ |
| 59 | +| powerdown | Power management control (0=active, 1=power down) | |
| 60 | ++----------------------+-------------------------------------------------------+ |
| 61 | + |
| 62 | +2.1 Frequency Control |
| 63 | +---------------------- |
| 64 | + |
| 65 | +The ``frequency`` attribute controls the RF output frequency with sub-Hz precision. |
| 66 | +The driver automatically selects between integer-N and fractional-N modes to |
| 67 | +achieve the requested frequency with the best possible phase noise performance. |
| 68 | + |
| 69 | +**Supported ranges:** |
| 70 | + |
| 71 | +- **ADF41513**: 1,000,000,000 Hz to 26,500,000,000 Hz (1 GHz to 26.5 GHz) |
| 72 | +- **ADF41510**: 1,000,000,000 Hz to 10,000,000,000 Hz (1 GHz to 10 GHz) |
| 73 | + |
| 74 | +The frequency is specified in Hz, for sub-Hz precision use decimal notation. |
| 75 | +For example, 12.102000000 GHz would be written as "12102000000.000000". |
| 76 | + |
| 77 | +2.2 Frequency Resolution Control |
| 78 | +-------------------------------- |
| 79 | + |
| 80 | +The ``frequency_resolution`` attribute controls the target frequency resolution |
| 81 | +that the driver attempts to achieve. This affects the choice between fixed |
| 82 | +modulus (25-bit) and variable modulus (49-bit) fractional-N modes: |
| 83 | + |
| 84 | +- **Fixed modulus**: Resolution = f_PFD / 2^25 (typically ~3 Hz with 100 MHz PFD) |
| 85 | +- **Variable modulus**: Resolution = f_PFD / 2^49 (µHz resolution possible) |
| 86 | + |
| 87 | +Default resolution is 1 Hz (1,000,000 µHz). |
| 88 | + |
| 89 | +2.3 Reference Input Control |
| 90 | +--------------------------- |
| 91 | + |
| 92 | +The ``refin_frequency`` attribute allows control of the reference input frequency |
| 93 | +when using a programmable reference clock. The supported range is 10 MHz to |
| 94 | +800 MHz. |
| 95 | + |
| 96 | +2.4 Power Management |
| 97 | +-------------------- |
| 98 | + |
| 99 | +The ``powerdown`` attribute provides software power control: |
| 100 | + |
| 101 | +- **0**: Device active and operational |
| 102 | +- **1**: Device in power-down mode (low power consumption) |
| 103 | + |
| 104 | +3. Operating modes |
| 105 | +================== |
| 106 | + |
| 107 | +3.1 Integer-N Mode |
| 108 | +------------------ |
| 109 | + |
| 110 | +When the requested frequency can be achieved as an integer multiple of the PFD |
| 111 | +frequency (within the specified resolution tolerance), the driver automatically |
| 112 | +selects integer-N mode for optimal phase noise performance. |
| 113 | + |
| 114 | +In integer-N mode: |
| 115 | + |
| 116 | +- Phase noise: -235 dBc/Hz normalized floor |
| 117 | +- Frequency resolution: f_PFD (same as PFD frequency) |
| 118 | +- Maximum PFD frequency: 250 MHz |
| 119 | +- Bleed current: Disabled for best performance |
| 120 | + |
| 121 | +3.2 Fractional-N Mode |
| 122 | +--------------------- |
| 123 | + |
| 124 | +When sub-integer frequency steps are required, the driver automatically selects |
| 125 | +fractional-N mode using either fixed or variable modulus. |
| 126 | + |
| 127 | +**Fixed Modulus (25-bit)**: |
| 128 | + |
| 129 | +- Used when variable modulus is not required |
| 130 | +- Resolution: f_PFD / 2^25 |
| 131 | +- Simpler implementation, faster settling |
| 132 | + |
| 133 | +**Variable Modulus (49-bit)**: |
| 134 | + |
| 135 | +- Used for maximum resolution requirements |
| 136 | +- Resolution: f_PFD / 2^49 (theoretical) |
| 137 | +- Exact frequency synthesis capability |
| 138 | + |
| 139 | +In fractional-N mode: |
| 140 | + |
| 141 | +- Phase noise: -231 dBc/Hz normalized floor |
| 142 | +- Maximum PFD frequency: 125 MHz |
| 143 | +- Bleed current: Automatically enabled and optimized |
| 144 | +- Dithering: Enabled to reduce fractional spurs |
| 145 | + |
| 146 | +3.3 Automatic Mode Selection |
| 147 | +---------------------------- |
| 148 | + |
| 149 | +The driver automatically selects the optimal operating mode based on: |
| 150 | + |
| 151 | +1. **Frequency accuracy requirements**: Determined by frequency_resolution setting |
| 152 | +2. **Phase noise optimization**: Integer-N preferred when possible |
| 153 | +3. **PFD frequency constraints**: Different limits for integer vs fractional modes |
| 154 | +4. **Prescaler selection**: Automatic 4/5 vs 8/9 prescaler selection based on frequency |
| 155 | + |
| 156 | +4. Clock framework integration |
| 157 | +============================== |
| 158 | + |
| 159 | +The ADF41513 driver integrates with the Linux Common Clock Framework (CCF) when |
| 160 | +the device tree includes clock provider properties (``#clock-cells = <0>``). |
| 161 | + |
| 162 | +When enabled, the driver registers as a clock provider, allowing other kernel |
| 163 | +drivers to use the synthesizer output as a system clock source. |
| 164 | + |
| 165 | +**Device tree configuration for clock provider**: |
| 166 | + |
| 167 | +.. code-block:: dts |
| 168 | +
|
| 169 | + adf41513@0 { |
| 170 | + compatible = "adi,adf41513"; |
| 171 | + reg = <0>; |
| 172 | + /* ... other properties ... */ |
| 173 | + #clock-cells = <0>; |
| 174 | + clock-output-names = "adf41513_clk"; |
| 175 | + }; |
| 176 | +
|
| 177 | +**Clock consumer example**: |
| 178 | + |
| 179 | +.. code-block:: dts |
| 180 | +
|
| 181 | + some_device { |
| 182 | + clocks = <&adf41513>; |
| 183 | + clock-names = "ref_clk"; |
| 184 | + }; |
| 185 | +
|
| 186 | +5. Device tree configuration |
| 187 | +============================ |
| 188 | + |
| 189 | +See ``Documentation/devicetree/bindings/iio/frequency/adi,adf41513.yaml`` for |
| 190 | +complete device tree binding documentation. |
| 191 | + |
| 192 | +**Basic configuration example**: |
| 193 | + |
| 194 | +.. code-block:: dts |
| 195 | +
|
| 196 | + adf41513@0 { |
| 197 | + compatible = "adi,adf41513"; |
| 198 | + reg = <0>; |
| 199 | + spi-max-frequency = <10000000>; |
| 200 | + clocks = <&ref_clk>; |
| 201 | + clock-names = "clkin"; |
| 202 | + vcc-supply = <&vcc_3v3>; |
| 203 | +
|
| 204 | + adi,power-up-frequency = /bits/ 64 <12000000000>; |
| 205 | + adi,charge-pump-current = <2400>; |
| 206 | + adi,phase-detector-polarity-positive; |
| 207 | + }; |
| 208 | +
|
| 209 | +6. Performance characteristics |
| 210 | +============================== |
| 211 | + |
| 212 | +6.1 Phase Noise Performance |
| 213 | +---------------------------- |
| 214 | + |
| 215 | +The ADF41513 provides excellent phase noise performance: |
| 216 | + |
| 217 | +**Integer-N mode**: |
| 218 | + |
| 219 | +- Normalized phase noise floor: -235 dBc/Hz |
| 220 | +- 1/f noise corner: Typically around 10 kHz offset |
| 221 | +- Best performance mode for integer frequency multiples |
| 222 | + |
| 223 | +**Fractional-N mode**: |
| 224 | + |
| 225 | +- Normalized phase noise floor: -231 dBc/Hz |
| 226 | +- Additional fractional spurs may be present |
| 227 | +- Optimized with automatic bleed current and dithering |
| 228 | + |
| 229 | +6.2 Frequency Ranges and Prescalers |
| 230 | +------------------------------------ |
| 231 | + |
| 232 | +The driver automatically selects the appropriate prescaler based on frequency: |
| 233 | + |
| 234 | +**4/5 Prescaler**: |
| 235 | + |
| 236 | +- RF frequency range: 1 GHz to 16 GHz |
| 237 | +- Integer-N: N = 20 to 511 |
| 238 | +- Fractional-N: N = 23 to 511 |
| 239 | + |
| 240 | +**8/9 Prescaler** (ADF41513 only): |
| 241 | + |
| 242 | +- RF frequency range: 1 GHz to 26.5 GHz |
| 243 | +- Integer-N: N = 64 to 1023 |
| 244 | +- Fractional-N: N = 75 to 1023 |
| 245 | + |
| 246 | +6.3 Reference Input Requirements |
| 247 | +--------------------------------- |
| 248 | + |
| 249 | +- Frequency range: 10 MHz to 800 MHz |
| 250 | +- Input sensitivity: -10 dBm to +8 dBm |
| 251 | +- Slew rate requirement: >320 V/µs (>500 V/µs recommended) |
| 252 | +- With doubler enabled: Maximum 225 MHz reference frequency |
| 253 | + |
| 254 | +7. Usage examples |
| 255 | +================= |
| 256 | + |
| 257 | +7.1 Basic Frequency Setting |
| 258 | +---------------------------- |
| 259 | + |
| 260 | +Set output frequency to 12.102 GHz: |
| 261 | + |
| 262 | +.. code-block:: bash |
| 263 | +
|
| 264 | + root:/sys/bus/iio/devices/iio:device0> echo 12102000000 > out_altvoltage0_frequency |
| 265 | +
|
| 266 | +Read current frequency: |
| 267 | + |
| 268 | +.. code-block:: bash |
| 269 | +
|
| 270 | + root:/sys/bus/iio/devices/iio:device0> cat out_altvoltage0_frequency |
| 271 | + 12101999999.582767 |
| 272 | +
|
| 273 | +7.2 High Resolution Frequency Control |
| 274 | +------------------------------------- |
| 275 | + |
| 276 | +Configure for sub-Hz resolution and set a precise frequency: |
| 277 | + |
| 278 | +.. code-block:: bash |
| 279 | +
|
| 280 | + # Set resolution to 0.1 Hz (100,000 µHz) |
| 281 | + root:/sys/bus/iio/devices/iio:device0> echo 0.1 > out_altvoltage0_frequency_resolution |
| 282 | +
|
| 283 | + # Set frequency to 12.102 GHz (1 µHz precision) |
| 284 | + root:/sys/bus/iio/devices/iio:device0> echo 12102000000 > out_altvoltage0_frequency |
| 285 | + root:/sys/bus/iio/devices/iio:device0> cat out_altvoltage0_frequency |
| 286 | + 12101999999.980131 |
| 287 | +
|
| 288 | +7.3 Reference Frequency Control |
| 289 | +------------------------------- |
| 290 | + |
| 291 | +Change reference input frequency (if using programmable reference): |
| 292 | + |
| 293 | +.. code-block:: bash |
| 294 | +
|
| 295 | + # Set reference to 122.88 MHz |
| 296 | + root:/sys/bus/iio/devices/iio:device0> echo 122880000 > out_altvoltage0_refin_frequency |
| 297 | +
|
| 298 | + # Verify the change |
| 299 | + root:/sys/bus/iio/devices/iio:device0> cat out_altvoltage0_refin_frequency |
| 300 | + 122880000 |
| 301 | +
|
| 302 | +7.4 Power Management |
| 303 | +-------------------- |
| 304 | + |
| 305 | +Power down the device: |
| 306 | + |
| 307 | +.. code-block:: bash |
| 308 | +
|
| 309 | + root:/sys/bus/iio/devices/iio:device0> echo 1 > out_altvoltage0_powerdown |
| 310 | +
|
| 311 | + # Power back up |
| 312 | + root:/sys/bus/iio/devices/iio:device0> echo 0 > out_altvoltage0_powerdown |
| 313 | +
|
| 314 | +7.5 Monitor Lock Status |
| 315 | +----------------------- |
| 316 | + |
| 317 | +When lock detect GPIO is configured, check if PLL is locked: |
| 318 | + |
| 319 | +.. code-block:: bash |
| 320 | +
|
| 321 | + # Read frequency - will return error if not locked |
| 322 | + root:/sys/bus/iio/devices/iio:device0> cat out_altvoltage0_frequency |
| 323 | +
|
| 324 | +If the PLL is not locked, the frequency read will return ``-EBUSY`` (Device or resource busy). |
| 325 | + |
| 326 | +8. Advanced features |
| 327 | +==================== |
| 328 | + |
| 329 | +8.1 Phase Resync |
| 330 | +----------------- |
| 331 | + |
| 332 | +When enabled in device tree (``adi,phase-resync-enable``), the phase resync |
| 333 | +feature provides a consistent output phase relationship to the reference input. |
| 334 | +This is particularly useful for beamforming applications where phase coherence |
| 335 | +across multiple synthesizers is required. |
| 336 | + |
| 337 | +8.2 Charge Pump Optimization |
| 338 | +----------------------------- |
| 339 | + |
| 340 | +The driver automatically optimizes charge pump settings: |
| 341 | + |
| 342 | +- **Current**: Programmable from 0.45 mA to 7.2 mA |
| 343 | +- **Bleed current**: Automatically calculated and enabled in fractional-N mode |
| 344 | +- **Loop filter integration**: Works with external passive loop filters |
| 345 | + |
| 346 | +8.3 Spurious Performance |
| 347 | +------------------------ |
| 348 | + |
| 349 | +The driver includes automatic spur reduction techniques: |
| 350 | + |
| 351 | +- **Integer boundary spur avoidance**: Automatic PFD frequency optimization |
| 352 | +- **Fractional spur reduction**: Automatic dithering and bleed current |
| 353 | +- **Reference spur suppression**: High PFD frequency operation when possible |
| 354 | + |
| 355 | +9. Troubleshooting |
| 356 | +================== |
| 357 | + |
| 358 | +9.1 Common Issues |
| 359 | +----------------- |
| 360 | + |
| 361 | +**"PLL un-locked" errors**: |
| 362 | + |
| 363 | +- Check reference input signal quality and level |
| 364 | +- Verify loop filter design matches charge pump current |
| 365 | +- Ensure VCO tuning range covers target frequency |
| 366 | +- Check power supply voltage and stability |
| 367 | + |
| 368 | +**Frequency accuracy issues**: |
| 369 | + |
| 370 | +- Verify reference frequency accuracy |
| 371 | +- Check frequency_resolution setting |
| 372 | +- Ensure target frequency is within device range |
| 373 | + |
| 374 | +**High spurious content**: |
| 375 | + |
| 376 | +- Verify PCB layout follows ADI recommendations |
| 377 | +- Check loop filter component values and quality |
| 378 | +- Ensure adequate power supply decoupling |
| 379 | +- Verify reference input signal purity |
0 commit comments