Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions adi/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
from adi.ad7746 import ad7746
from adi.ad7768 import ad7768, ad7768_4
from adi.ad7799 import ad7799
from adi.ad7944 import ad7944, ad7985, ad7986
from adi.ad9081 import ad9081
from adi.ad9081_mc import QuadMxFE, ad9081_mc
from adi.ad9083 import ad9083
Expand Down
99 changes: 99 additions & 0 deletions adi/ad7944.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Copyright (C) 2020-2025 Analog Devices, Inc.
#
# SPDX short identifier: ADIBSD

import numpy as np

from adi.context_manager import context_manager
from adi.rx_tx import rx


class ad7944(rx, context_manager):
"""AD7944, 14-bit, successive approximation analog-to-digital
converter (SAR ADC) with sample rates up to 2.5 MSPS"""

_compatible_parts = ["ad7944"]
_device_name = ""

def __init__(self, uri="ip:analog.local", device_name="ad7944"):
"""Initialize."""
context_manager.__init__(self, uri, self._device_name)

self._ctrl = None

if not device_name:
device_name = self._compatible_parts[0]
else:
if device_name not in self._compatible_parts:
raise Exception(f"Not a compatible device: {device_name}")

self._rxadc = self._ctrl = self._ctx.find_device(device_name)

if not self._rxadc:
raise Exception(f"Error in selecting matching device {device_name}")

if not self._ctrl:
raise Exception(f"Error in selecting matching device {device_name}")

self._rx_channel_names = []
for ch in self._rxadc.channels:
name = ch._id
self._rx_channel_names.append(name)

# The data type depends on whether or not SPI offload support is
# available. We can check this by testing for the
# sampling_frequency_available attribute, as this only exists in that
# case.
try:
self._get_iio_attr(
self.rx_channel_names[0], "sampling_frequency_available", False
)
self._rx_data_type = np.uint32
except KeyError:
self._rx_data_type = np.uint16

rx.__init__(self)

@property
def sampling_frequency(self):
"""Get sampling frequency."""
return self._get_iio_attr(self.rx_channel_names[0], "sampling_frequency", False)

@property
def sampling_frequency_available(self):
"""Get available sampling frequency values. This property only exists if
SPI offload is enabled for the driver."""
if isinstance(self._rx_data_type, np.uint32):
return self._get_iio_attr(
self.rx_channel_names[0], "sampling_frequency_available", False
)
else:
pass

@sampling_frequency.setter
def sampling_frequency(self, rate):
"""Set sampling frequency."""
self._set_iio_attr(
self.rx_channel_names[0], "sampling_frequency", value=rate, output=False
)


class ad7985(ad7944):
"""AD7985, 16-bit, successive approximation analog-to-digital
converter (SAR ADC) with sample rates up to 2.5 MSPS"""

_compatible_parts = ["ad7985"]

def __init__(self, uri="ip:analog.local", device_name="ad7985"):
super().__init__(uri, device_name)


class ad7986(ad7944):
"""AD7986, 18-bit, successive approximation analog-to-digital
converter (SAR ADC) with sample rates up to 2 MSPS"""

_compatible_parts = ["ad7986"]

def __init__(self, uri="ip:analog.local", device_name="ad7986"):
super().__init__(uri, device_name)
self._rx_data_type = np.int32
7 changes: 7 additions & 0 deletions doc/source/devices/adi.ad7944.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
ad7944
=================

.. automodule:: adi.ad7944
:members:
:undoc-members:
:show-inheritance:
1 change: 1 addition & 0 deletions doc/source/devices/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ Supported Devices
adi.ad7768
adi.ad777x
adi.ad7799
adi.ad7944
adi.ad9081
adi.ad9081_mc
adi.ad9083
Expand Down
3 changes: 3 additions & 0 deletions supported_parts.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,9 @@
- AD7771
- AD7779
- AD7799
- AD7944
- AD7985
- AD7986
- AD9081
- AD9083
- AD9084
Expand Down
1 change: 1 addition & 0 deletions test/emu/devices/ad7944.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE context [<!ELEMENT context (device | context-attribute)*><!ELEMENT context-attribute EMPTY><!ELEMENT device (channel | attribute | debug-attribute | buffer-attribute)*><!ELEMENT channel (scan-element?, attribute*)><!ELEMENT attribute EMPTY><!ELEMENT scan-element EMPTY><!ELEMENT debug-attribute EMPTY><!ELEMENT buffer-attribute EMPTY><!ATTLIST context name CDATA #REQUIRED description CDATA #IMPLIED><!ATTLIST context-attribute name CDATA #REQUIRED value CDATA #REQUIRED><!ATTLIST device id CDATA #REQUIRED name CDATA #IMPLIED><!ATTLIST channel id CDATA #REQUIRED type (input|output) #REQUIRED name CDATA #IMPLIED><!ATTLIST scan-element index CDATA #REQUIRED format CDATA #REQUIRED scale CDATA #IMPLIED><!ATTLIST attribute name CDATA #REQUIRED filename CDATA #IMPLIED value CDATA #IMPLIED><!ATTLIST debug-attribute name CDATA #REQUIRED value CDATA #IMPLIED><!ATTLIST buffer-attribute name CDATA #REQUIRED value CDATA #IMPLIED>]><context name="network" description="10.2.5.203 Linux zed-2 6.13.0-rc6-next-20250110-ad7986-07882-g636b57f41deb #3 SMP PREEMPT Tue Feb 11 10:00:44 EST 2025 armv7l" ><context-attribute name="hw_carrier" value="Xilinx Zynq ZED" /><context-attribute name="hw_model" value="EVAL-AD7985FMCZ on Xilinx Zynq ZED" /><context-attribute name="hw_mezzanine" value="EVAL-AD7985FMCZ" /><context-attribute name="hw_name" value="Empty Field" /><context-attribute name="hw_vendor" value="Analog Devices" /><context-attribute name="hw_serial" value="Empty Field" /><context-attribute name="local,kernel" value="6.13.0-rc6-next-20250110-ad7986-07882-g636b57f41deb" /><context-attribute name="uri" value="ip:10.2.5.203" /><context-attribute name="ip,ip-addr" value="10.2.5.203" /><device id="hwmon0" name="e000b000ethernetffffffff00" ><channel id="temp1" type="input" ><attribute name="crit" filename="temp1_crit" value="100000" /><attribute name="input" filename="temp1_input" value="41000" /><attribute name="max_alarm" filename="temp1_max_alarm" value="0" /></channel></device><device id="iio:device0" name="xadc" ><channel id="voltage5" name="vccoddr" type="input" ><attribute name="label" filename="in_voltage5_vccoddr_label" value="vccoddr" /><attribute name="raw" filename="in_voltage5_vccoddr_raw" value="2057" /><attribute name="scale" filename="in_voltage5_vccoddr_scale" value="0.732421875" /></channel><channel id="voltage0" name="vccint" type="input" ><attribute name="label" filename="in_voltage0_vccint_label" value="vccint" /><attribute name="raw" filename="in_voltage0_vccint_raw" value="1396" /><attribute name="scale" filename="in_voltage0_vccint_scale" value="0.732421875" /></channel><channel id="voltage4" name="vccpaux" type="input" ><attribute name="label" filename="in_voltage4_vccpaux_label" value="vccpaux" /><attribute name="raw" filename="in_voltage4_vccpaux_raw" value="2461" /><attribute name="scale" filename="in_voltage4_vccpaux_scale" value="0.732421875" /></channel><channel id="temp0" type="input" ><attribute name="offset" filename="in_temp0_offset" value="-2219" /><attribute name="raw" filename="in_temp0_raw" value="2617" /><attribute name="scale" filename="in_temp0_scale" value="123.040771484" /></channel><channel id="voltage7" name="vrefn" type="input" ><attribute name="label" filename="in_voltage7_vrefn_label" value="vrefn" /><attribute name="raw" filename="in_voltage7_vrefn_raw" value="14" /><attribute name="scale" filename="in_voltage7_vrefn_scale" value="0.732421875" /></channel><channel id="voltage1" name="vccaux" type="input" ><attribute name="label" filename="in_voltage1_vccaux_label" value="vccaux" /><attribute name="raw" filename="in_voltage1_vccaux_raw" value="2458" /><attribute name="scale" filename="in_voltage1_vccaux_scale" value="0.732421875" /></channel><channel id="voltage2" name="vccbram" type="input" ><attribute name="label" filename="in_voltage2_vccbram_label" value="vccbram" /><attribute name="raw" filename="in_voltage2_vccbram_raw" value="1392" /><attribute name="scale" filename="in_voltage2_vccbram_scale" value="0.732421875" /></channel><channel id="voltage3" name="vccpint" type="input" ><attribute name="label" filename="in_voltage3_vccpint_label" value="vccpint" /><attribute name="raw" filename="in_voltage3_vccpint_raw" value="1389" /><attribute name="scale" filename="in_voltage3_vccpint_scale" value="0.732421875" /></channel><channel id="voltage6" name="vrefp" type="input" ><attribute name="label" filename="in_voltage6_vrefp_label" value="vrefp" /><attribute name="raw" filename="in_voltage6_vrefp_raw" value="1717" /><attribute name="scale" filename="in_voltage6_vrefp_scale" value="0.732421875" /></channel><attribute name="sampling_frequency" value="961538" /><attribute name="waiting_for_supplier" value="0" /></device><device id="iio:device1" name="ad7944" ><channel id="voltage0" type="input" ><scan-element index="0" format="le:u14/32&gt;&gt;0" scale="0.305176" /><attribute name="raw" filename="in_voltage0_raw" value="6007" /><attribute name="sampling_frequency" filename="in_voltage0_sampling_frequency" value="2463055" /><attribute name="sampling_frequency_available" filename="in_voltage0_sampling_frequency_available" value="[1 1 2500000]" /><attribute name="scale" filename="in_voltage0_scale" value="0.305175781" /></channel><attribute name="waiting_for_supplier" value="0" /><buffer-attribute name="data_available" value="131072" /><buffer-attribute name="direction" value="in" /><buffer-attribute name="length_align_bytes" value="8" /></device><device id="iio_sysfs_trigger" ><attribute name="add_trigger" value="ERROR" /><attribute name="remove_trigger" value="ERROR" /></device></context>
1 change: 1 addition & 0 deletions test/emu/devices/ad7985.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE context [<!ELEMENT context (device | context-attribute)*><!ELEMENT context-attribute EMPTY><!ELEMENT device (channel | attribute | debug-attribute | buffer-attribute)*><!ELEMENT channel (scan-element?, attribute*)><!ELEMENT attribute EMPTY><!ELEMENT scan-element EMPTY><!ELEMENT debug-attribute EMPTY><!ELEMENT buffer-attribute EMPTY><!ATTLIST context name CDATA #REQUIRED description CDATA #IMPLIED><!ATTLIST context-attribute name CDATA #REQUIRED value CDATA #REQUIRED><!ATTLIST device id CDATA #REQUIRED name CDATA #IMPLIED><!ATTLIST channel id CDATA #REQUIRED type (input|output) #REQUIRED name CDATA #IMPLIED><!ATTLIST scan-element index CDATA #REQUIRED format CDATA #REQUIRED scale CDATA #IMPLIED><!ATTLIST attribute name CDATA #REQUIRED filename CDATA #IMPLIED value CDATA #IMPLIED><!ATTLIST debug-attribute name CDATA #REQUIRED value CDATA #IMPLIED><!ATTLIST buffer-attribute name CDATA #REQUIRED value CDATA #IMPLIED>]><context name="network" description="10.2.5.203 Linux zed-2 6.13.0-rc2-next-20241210-ad7944-mainline #508 SMP PREEMPT Tue Dec 10 16:55:10 CST 2024 armv7l" ><context-attribute name="hw_carrier" value="Xilinx Zynq ZED" /><context-attribute name="hw_model" value="EVAL-AD7985FMCZ on Xilinx Zynq ZED" /><context-attribute name="hw_mezzanine" value="EVAL-AD7985FMCZ" /><context-attribute name="hw_name" value="Empty Field" /><context-attribute name="hw_vendor" value="Analog Devices" /><context-attribute name="hw_serial" value="Empty Field" /><context-attribute name="local,kernel" value="6.13.0-rc2-next-20241210-ad7944-mainline" /><context-attribute name="uri" value="ip:10.2.5.203" /><context-attribute name="ip,ip-addr" value="10.2.5.203" /><device id="hwmon0" name="e000b000ethernetffffffff00" ><channel id="temp1" type="input" ><attribute name="crit" filename="temp1_crit" value="100000" /><attribute name="input" filename="temp1_input" value="41000" /><attribute name="max_alarm" filename="temp1_max_alarm" value="0" /></channel></device><device id="iio:device0" name="xadc" ><channel id="voltage5" name="vccoddr" type="input" ><attribute name="label" filename="in_voltage5_vccoddr_label" value="vccoddr" /><attribute name="raw" filename="in_voltage5_vccoddr_raw" value="2054" /><attribute name="scale" filename="in_voltage5_vccoddr_scale" value="0.732421875" /></channel><channel id="voltage0" name="vccint" type="input" ><attribute name="label" filename="in_voltage0_vccint_label" value="vccint" /><attribute name="raw" filename="in_voltage0_vccint_raw" value="1393" /><attribute name="scale" filename="in_voltage0_vccint_scale" value="0.732421875" /></channel><channel id="voltage4" name="vccpaux" type="input" ><attribute name="label" filename="in_voltage4_vccpaux_label" value="vccpaux" /><attribute name="raw" filename="in_voltage4_vccpaux_raw" value="2462" /><attribute name="scale" filename="in_voltage4_vccpaux_scale" value="0.732421875" /></channel><channel id="temp0" type="input" ><attribute name="offset" filename="in_temp0_offset" value="-2219" /><attribute name="raw" filename="in_temp0_raw" value="2601" /><attribute name="scale" filename="in_temp0_scale" value="123.040771484" /></channel><channel id="voltage7" name="vrefn" type="input" ><attribute name="label" filename="in_voltage7_vrefn_label" value="vrefn" /><attribute name="raw" filename="in_voltage7_vrefn_raw" value="12" /><attribute name="scale" filename="in_voltage7_vrefn_scale" value="0.732421875" /></channel><channel id="voltage1" name="vccaux" type="input" ><attribute name="label" filename="in_voltage1_vccaux_label" value="vccaux" /><attribute name="raw" filename="in_voltage1_vccaux_raw" value="2461" /><attribute name="scale" filename="in_voltage1_vccaux_scale" value="0.732421875" /></channel><channel id="voltage2" name="vccbram" type="input" ><attribute name="label" filename="in_voltage2_vccbram_label" value="vccbram" /><attribute name="raw" filename="in_voltage2_vccbram_raw" value="1395" /><attribute name="scale" filename="in_voltage2_vccbram_scale" value="0.732421875" /></channel><channel id="voltage3" name="vccpint" type="input" ><attribute name="label" filename="in_voltage3_vccpint_label" value="vccpint" /><attribute name="raw" filename="in_voltage3_vccpint_raw" value="1390" /><attribute name="scale" filename="in_voltage3_vccpint_scale" value="0.732421875" /></channel><channel id="voltage6" name="vrefp" type="input" ><attribute name="label" filename="in_voltage6_vrefp_label" value="vrefp" /><attribute name="raw" filename="in_voltage6_vrefp_raw" value="1713" /><attribute name="scale" filename="in_voltage6_vrefp_scale" value="0.732421875" /></channel><attribute name="sampling_frequency" value="961538" /><attribute name="waiting_for_supplier" value="0" /></device><device id="iio:device1" name="ad7985" ><channel id="voltage0" type="input" ><scan-element index="0" format="le:u16/32&gt;&gt;0" scale="0.076294" /><attribute name="raw" filename="in_voltage0_raw" value="28616" /><attribute name="sampling_frequency" filename="in_voltage0_sampling_frequency" value="2463055" /><attribute name="sampling_frequency_available" filename="in_voltage0_sampling_frequency_available" value="[1 1 2500000]" /><attribute name="scale" filename="in_voltage0_scale" value="0.076293945" /></channel><attribute name="waiting_for_supplier" value="0" /><buffer-attribute name="data_available" value="524288" /><buffer-attribute name="direction" value="in" /><buffer-attribute name="length_align_bytes" value="8" /></device><device id="iio_sysfs_trigger" ><attribute name="add_trigger" value="ERROR" /><attribute name="remove_trigger" value="ERROR" /></device></context>
Loading
Loading