summaryrefslogtreecommitdiff
path: root/Documentation/iio/adf41513.rst
blob: 244453cce6f68bb925412024a390545ec69ff147 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
.. 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).