| .. SPDX-License-Identifier: GPL-2.0 | |
| =============== | |
| ADF41513 driver | |
| =============== | |
| This driver supports Analog Devices' ADF41513 and similar SPI PLL frequency | |
| synthesizers. | |
| 1. Supported devices | |
| ==================== | |
| * `ADF41510 <https://www.analog.com/ADF41510>`_ | |
| * `ADF41513 <https://www.analog.com/ADF41513>`_ | |
| The ADF41513 is an ultralow noise frequency synthesizer that can be used to | |
| implement local oscillators (LOs) as high as 26.5 GHz in the upconversion and | |
| downconversion sections of wireless receivers and transmitters. The ADF41510 | |
| is a similar device that supports frequencies up to 10 GHz. | |
| Both devices support integer-N and fractional-N operation modes, providing | |
| excellent phase noise performance and flexible frequency generation | |
| capabilities. | |
| Key Features: | |
| - **ADF41510**: 1 GHz to 10 GHz frequency range | |
| - **ADF41513**: 1 GHz to 26.5 GHz frequency range | |
| - Integer-N and fractional-N operation modes | |
| - Ultra-low phase noise (-235 dBc/Hz integer-N, -231 dBc/Hz fractional-N) | |
| - High maximum PFD frequency (250 MHz integer-N, 125 MHz fractional-N) | |
| - 25-bit fixed modulus or 49-bit variable modulus fractional modes | |
| - Programmable charge pump currents with 16x range | |
| - Digital lock detect functionality | |
| - Phase resync capability for consistent output phase | |
| 2. Device attributes | |
| ==================== | |
| The ADF41513 driver provides the following IIO extended attributes for | |
| frequency control and monitoring: | |
| Each IIO device has a device folder under ``/sys/bus/iio/devices/iio:deviceX``, | |
| where X is the IIO index of the device. Under these folders reside a set of | |
| device files that provide access to the synthesizer's functionality. | |
| The following table shows the ADF41513 related device files: | |
| +--------------------------------------+-------------------------------------------------------+ | |
| | Device file | Description | | |
| +======================================+=======================================================+ | |
| | out_altvoltage0_frequency | RF output frequency control and readback (Hz) | | |
| +--------------------------------------+-------------------------------------------------------+ | |
| | out_altvoltage0_frequency_resolution | Target frequency resolution control (Hz) | | |
| +--------------------------------------+-------------------------------------------------------+ | |
| | out_altvoltage0_powerdown | Power management control (0=active, 1=power down) | | |
| +--------------------------------------+-------------------------------------------------------+ | |
| | out_altvoltage0_phase | RF output phase adjustment and readback (radians) | | |
| +--------------------------------------+-------------------------------------------------------+ | |
| 2.1 Frequency Control | |
| ---------------------- | |
| The ``out_altvoltage0_frequency`` attribute controls the RF output frequency | |
| with sub-Hz precision. The driver automatically selects between integer-N and | |
| fractional-N modes to achieve the requested frequency with the best possible | |
| phase noise performance. | |
| **Supported ranges:** | |
| - **ADF41510**: 1,000,000,000 Hz to 10,000,000,000 Hz (1 GHz to 10 GHz) | |
| - **ADF41513**: 1,000,000,000 Hz to 26,500,000,000 Hz (1 GHz to 26.5 GHz) | |
| The frequency is specified in Hz, for sub-Hz precision use decimal notation. | |
| For example, 12.102 GHz would be written as "12102000000.000000". | |
| 2.2 Frequency Resolution Control | |
| -------------------------------- | |
| The ``out_altvoltage0_frequency_resolution`` attribute controls the target | |
| frequency resolution that the driver attempts to achieve. This affects the | |
| choice between integer-N and fractional-N modes, including fixed modulus | |
| (25-bit) and variable modulus (49-bit) fractional-N modes: | |
| - **Integer-N**: Resolution = :math:`f_{PFD}` (same as PFD frequency) | |
| - **Fixed modulus**: Resolution = :math:`f_{PFD} / 2^{25}` (~3 Hz with 100 MHz PFD) | |
| - **Variable modulus**: Resolution = :math:`f_{PFD} / 2^{49}` (µHz resolution possible) | |
| Default resolution is 1 Hz (1,000,000 µHz). | |
| 2.3 Phase adjustment | |
| -------------------- | |
| The ``out_altvoltage0_phase`` attribute allows adjustment of the output phase | |
| in radians. Setting this attribute enables phase adjustment. It can be set | |
| from 0 to :math:`2\pi` radians. Reading this attribute returns the current | |
| phase offset of the output signal. To create a consistent phase relationship | |
| with the reference signal, the phase resync feature needs to be enabled by | |
| setting a non-zero value to the ``adi,phase-resync-period-ns`` device property, | |
| which triggers a phase resynchronization after locking is achieved. | |
| 3. Operating modes | |
| ================== | |
| 3.1 Integer-N Mode | |
| ------------------ | |
| When the requested frequency can be achieved as an integer multiple of the PFD | |
| frequency (within the specified resolution tolerance), the driver automatically | |
| selects integer-N mode for optimal phase noise performance. | |
| In integer-N mode: | |
| - Phase noise: -235 dBc/Hz normalized floor | |
| - Frequency resolution: :math:`f_{PFD}` (same as PFD frequency) | |
| - Maximum PFD frequency: 250 MHz | |
| - Bleed current: Disabled | |
| 3.2 Fractional-N Mode | |
| --------------------- | |
| When sub-integer frequency steps are required, the driver automatically selects | |
| fractional-N mode using either fixed or variable modulus. | |
| **Fixed Modulus (25-bit)**: | |
| - Used when variable modulus is not required | |
| - Resolution: :math:`f_{PFD} / 2^{25}` | |
| - Simpler implementation, faster settling | |
| **Variable Modulus (49-bit)**: | |
| - Used for maximum resolution requirements | |
| - Resolution: :math:`f_{PFD} / 2^{49}` (theoretical) | |
| - Exact frequency synthesis capability | |
| In fractional-N mode: | |
| - Phase noise: -231 dBc/Hz normalized floor | |
| - Maximum PFD frequency: 125 MHz | |
| - Bleed current: Automatically enabled and optimized | |
| - Dithering: Enabled to reduce fractional spurs | |
| 3.3 Automatic Mode Selection | |
| ---------------------------- | |
| The driver automatically selects the optimal operating mode based on: | |
| 1. **Frequency accuracy requirements**: Determined by ``frequency_resolution`` setting | |
| 2. **Phase noise optimization**: Integer-N preferred when possible | |
| 3. **PFD frequency constraints**: Different limits for integer vs fractional modes | |
| 4. **Prescaler selection**: Automatic 4/5 vs 8/9 prescaler selection based on frequency | |
| 4. Usage examples | |
| ================= | |
| 4.1 Basic Frequency Setting | |
| ---------------------------- | |
| Set output frequency to 12.102 GHz: | |
| .. code-block:: bash | |
| root:/sys/bus/iio/devices/iio:device0> echo 12102000000 > out_altvoltage0_frequency | |
| Read current frequency: | |
| .. code-block:: bash | |
| root:/sys/bus/iio/devices/iio:device0> cat out_altvoltage0_frequency | |
| 12101999999.582767 | |
| 4.2 High Resolution Frequency Control | |
| ------------------------------------- | |
| Configure for sub-Hz resolution and set a precise frequency: | |
| .. code-block:: bash | |
| # Set resolution to 0.1 Hz (100,000 µHz) | |
| root:/sys/bus/iio/devices/iio:device0> echo 0.1 > out_altvoltage0_frequency_resolution | |
| # Set frequency to 12.102 GHz (1 µHz precision) | |
| root:/sys/bus/iio/devices/iio:device0> echo 12102000000 > out_altvoltage0_frequency | |
| root:/sys/bus/iio/devices/iio:device0> cat out_altvoltage0_frequency | |
| 12101999999.980131 | |
| 4.3 Monitor Lock Status | |
| ----------------------- | |
| When lock detect GPIO is configured, check if PLL is locked: | |
| .. code-block:: bash | |
| # Read frequency - will return error if not locked | |
| root:/sys/bus/iio/devices/iio:device0> cat out_altvoltage0_frequency | |
| If the PLL is not locked, the frequency read will return ``-EBUSY`` (Device or | |
| resource busy). |