×

AD5677R NanDAC+IIO Linux驱动程序

消耗积分:3 | 格式:pdf | 大小:85.13KB | 2021-03-23

h1654155957.9921

分享资料个

This version (20 Nov 2020 10:33) was approved by Alexandru Ardelean.The Previously approved version (20 Nov 2020 10:30) is available.Diff

nanoDAC+ IIO DAC Linux Driver

Supported Devices

Reference Circuits

Evaluation Boards

Description

This is a Linux industrial I/O (IIO) subsystem driver, targeting multi-channel serial interface DACs. The industrial I/O subsystem provides a unified framework for drivers for many different types of converters and sensors using a number of different physical interfaces (i2c, spi, etc). See IIO for more information.

Source Code

Status

Source Mainlined?
git Yes

Files

Devicetree

Required devicetree properties for spi devices:

  • compatible: Needs to be the name of the device. E.g. “ad5676”
  • reg: The chipselect number used for the device
  • spi-max-frequency: Maximum SPI clock frequency.
  • spi-cpol: Needs to be set for the correct SPI mode
  • vcc-supply: Phandle to the fixed regulator
  • interrupts: the interrupt used for buffer sampling
  • pwms: pwm pin used as the interrupt source
        adc_vref: fixedregulator@0 {
	        compatible = "regulator-fixed";
		regulator-name = "fixed-supply";
		regulator-min-microvolt = <2500000>;
		regulator-max-microvolt = <2500000>;
		regulator-boot-on;
	};

	#address-cells = <1>;
	#size-cells = <0>;
	status = "okay";

	ad5676@0 {
		compatible = "ad5676";
		reg = <0>;
		spi-max-frequency = <1000000>;
		spi-cpha;
		vcc-supply = <&adc_vref>;

             interrupts = <25 IRQ_TYPE_EDGE_RISING>;          
             interrupt-parent = <&gpio>;                      
                                                                                   
             pwms = <&pwm 0 100>;                             
             pwm-names = "pwm-trigger";
	};

Required devicetree properties for i2c devices:

  • compatible: Needs to be the name of the device. E.g. “AD5696”
  • reg: The chipselect number used for the device
  • vcc-supply: Phandle to the fixed regulator
  • interrupts: the interrupt used for buffer sampling
  • pwms: pwm pin used as the interrupt source
        adc_vref: fixedregulator@0 {
	        compatible = "regulator-fixed";
		regulator-name = "fixed-supply";
		regulator-min-microvolt = <2500000>;
		regulator-max-microvolt = <2500000>;
		regulator-boot-on;
	};

	#address-cells = <1>;
	#size-cells = <0>;
	status = "okay";

	ad5696@e {
		    compatible = "ad5696";
		    reg = <0xe>;
		    vcc-supply = <&adc_vref>;

                 interrupts = <25 IRQ_TYPE_EDGE_RISING>;          
                 interrupt-parent = <&gpio>;                      
                                                                                   
                 pwms = <&pwm 0 100>;                             
                 pwm-names = "pwm-trigger";
	};

Driver testing

This specifies any shell prompt running on the target

root:/> cd /sys/bus/iio/devices/
root:/sys/bus/iio/devices> ls
iio:device0

root:/sys/bus/iio/devices> cd iio/:device0

root:/sys/bus/iio/devices/iio:device0> ls -l
drwxr-xr-x 2 root root    0 Jul 31 15:17 buffer
-r--r--r-- 1 root root 4096 Jul 31 15:17 dev
-r--r--r-- 1 root root 4096 Jul 31 15:17 name
lrwxrwxrwx 1 root root    0 Jul 31 15:17 of_node -> ../../../../../../../../firmware/devicetree/base/soc/spi@7e204000/ad5679r@0
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage0_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage0_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage0_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage10_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage10_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage10_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage11_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage11_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage11_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage12_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage12_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage12_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage13_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage13_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage13_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage14_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage14_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage14_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage15_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage15_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage15_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage1_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage1_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage1_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage2_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage2_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage2_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage3_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage3_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage3_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage4_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage4_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage4_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage5_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage5_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage5_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage6_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage6_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage6_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage7_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage7_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage7_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage8_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage8_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage8_raw
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage9_powerdown
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage9_powerdown_mode
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage9_raw
-r--r--r-- 1 root root 4096 Jul 31 15:17 out_voltage_powerdown_mode_available
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage_sampling_frequency
-rw-r--r-- 1 root root 4096 Jul 31 15:17 out_voltage_scale
drwxr-xr-x 2 root root    0 Jul 31 15:17 power
drwxr-xr-x 2 root root    0 Jul 31 15:17 scan_elements
lrwxrwxrwx 1 root root    0 Jul 31 15:17 subsystem -> ../../../../../../../../bus/iio
drwxr-xr-x 2 root root    0 Jul 31 15:17 trigger
-rw-r--r-- 1 root root 4096 Jul 31 15:17 uevent

Show device name

This specifies any shell prompt running on the target

root:/sys/bus/iio/devices/iio:device0> cat name
ad5696

Show scale

Description:
scale to be applied to in_voltage0_raw in order to obtain the measured voltage in millivolts.

This specifies any shell prompt running on the target

root:/sys/bus/iio/devices/iio:device0> cat out_voltage_scale 
0.038146972

Set channel Y output voltage

Description:
/sys/bus/iio/devices/deviceX/out_voltageY_raw

Raw (unscaled, no bias etc.) output voltage for channel Y.

This specifies any shell prompt running on the target

root:/sys/bus/iio/devices/iio:device0> echo 10000 > out_voltage0_raw

U = out_voltage0_raw * out_voltage_scale = 10000 * 0.038140 = 381.40 mV

List available power down modes

/sys/bus/iio/devices/deviceX/out_powerdown_mode_available

Description:
Lists all available output power down modes.

This specifies any shell prompt running on the target

root:/sys/bus/iio/devices/iio:device0> cat out_voltage_powerdown_mode_available
1kohm_to_gnd 100kohm_to_gnd three_state

Set channel Y power down mode

/sys/bus/iio/devices/deviceX/out_voltageY_powerdown_mode

Description:
Specifies the output power down mode. DAC output stage is disconnected from the amplifier and

1kohm_to_gnd connected to ground via an 1kOhm resistor
100kohm_to_gnd connected to ground via an 100kOhm resistor
three_state left floating

For a list of available output power down options read out_voltageX_powerdown_mode_available.

This specifies any shell prompt running on the target

root:/sys/bus/iio/devices/iio:device0> echo three_state > out_voltage0_powerdown_mode
root:/sys/bus/iio/devices/iio:device0> cat out_voltage0_powerdown_mode
three_state

Enable power down mode on output Y

/sys/bus/iio/devices/deviceX/out_voltageY_powerdown

Description:
Writing 1 causes output Y to enter the power down mode specified by the corresponding out_voltageY_powerdown_mode. Clearing returns to normal operation. Y may be suppressed if all outputs are controlled together.

This specifies any shell prompt running on the target

root:/sys/bus/iio/devices/iio:device0> echo 1 > out_voltage0_powerdown
root:/sys/bus/iio/devices/iio:device0>  cat out_voltage0_powerdown
1
root:/sys/bus/iio/devices/iio:device0> echo 0 > out_voltage0_powerdown
root:/sys/bus/iio/devices/iio:device0>  cat out_voltage0_powerdown
0

Buffer Support

Description:
The nanoDAC family of devices has buffer support for changing the output of the DAC channels. To achieve this a PWM signal is used as the device trigger to output data. Using a sampling frequency attribute the period of the PWM signal can be changed. The sampling frequency is in Hz.

In order to use this functionality the interrupt pin must be tied to the PWM generation pin

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device0 $ cat out_voltage_sampling_frequency 
1000
root@analog:/sys/bus/iio/devices/iio:device0# echo 2000 > out_voltage_sampling_frequency
root@analog:/sys/bus/iio/devices/iio:device0# cat out_voltage_sampling_frequency
2000
Enable buffered channels

Description:
The user has to enable on what channels to output the buffer samples. The samples are interleaved in the following in the order of the enabled channels.

Example:

sample_ch0|sample_ch1|sample_ch2

If only channel 1 is enabled the buffer samples will have the following configuration:

sample_ch1|sample_ch1|sample_ch1

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device0# cd scan_elements/
root@analog:/sys/bus/iio/devices/iio:device0/scan_elements# ls
out_voltage0_en      out_voltage10_type   out_voltage12_index  out_voltage14_en     out_voltage15_type	out_voltage2_index  out_voltage4_en	out_voltage5_type   out_voltage7_index	out_voltage9_en
out_voltage0_index   out_voltage11_en	  out_voltage12_type   out_voltage14_index  out_voltage1_en	out_voltage2_type   out_voltage4_index	out_voltage6_en     out_voltage7_type	out_voltage9_index
out_voltage0_type    out_voltage11_index  out_voltage13_en     out_voltage14_type   out_voltage1_index	out_voltage3_en     out_voltage4_type	out_voltage6_index  out_voltage8_en	out_voltage9_type
out_voltage10_en     out_voltage11_type   out_voltage13_index  out_voltage15_en     out_voltage1_type	out_voltage3_index  out_voltage5_en	out_voltage6_type   out_voltage8_index
out_voltage10_index  out_voltage12_en	  out_voltage13_type   out_voltage15_index  out_voltage2_en	out_voltage3_type   out_voltage5_index	out_voltage7_en     out_voltage8_type
root@analog:/sys/bus/iio/devices/iio:device0/scan_elements# echo 1 > out_voltage0_en

root@analog:/sys/bus/iio/devices/iio:device0/scan_elements# cd ../buffer/
root@analog:/sys/bus/iio/devices/iio:device0/buffer# ls
data_available	enable	length	watermark
root@analog:/sys/bus/iio/devices/iio:device0/buffer# echo 1 > enable

Sending a buffer sample example:

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device0/buffer# echo -n -e '/x22/x33' > /dev/iio/:device0

More Information

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'AD5677R NanDAC+IIO Linux驱动程序',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);