Linux設備驅動之IIO子系統——IIO框架數據讀取

来源:https://www.cnblogs.com/yongleili717/archive/2019/04/26/10776156.html
-Advertisement-
Play Games

IIO DATA ACCESS IIO數據獲取 只有兩種方法可以使用IIO框架訪問數據; 通過sysf通道進行一次性捕獲,或通過IIO字元設備進行連續模式(觸發緩衝)。 One-shot capture:單次獲取 一次性數據捕獲通過sysfs介面完成。 通過讀取與通道對應的sysfs條目,您將僅捕獲 ...


IIO DATA ACCESS IIO數據獲取

  只有兩種方法可以使用IIO框架訪問數據; 通過sysf通道進行一次性捕獲,或通過IIO字元設備進行連續模式(觸發緩衝)。

One-shot capture:單次獲取

  一次性數據捕獲通過sysfs介面完成。 通過讀取與通道對應的sysfs條目,您將僅捕獲特定於該通道的數據。 給定一個帶有兩個通道的溫度感測器:一個用於環境溫度,另一個用於熱電偶溫度:

# cd /sys/bus/iio/devices/iio:device0
# cat in_voltage3_raw
6646
# cat in_voltage_scale
0.305175781

  通過將比例乘以原始值來獲得處理值。

  Voltage value: 6646 * 0.305175781 = 2028.19824053

  器件數據表說過程值以mV給出。 在我們的例子中,它對應於2.02819V。

Buffer data access:緩衝區數據獲取

  要使觸發的採集工作,必須在驅動程式中實現觸發器支持。 然後,要從用戶空間內獲取數據,必須:創建觸發器,分配它,啟用ADC通道,設置緩衝區的維度,並啟用它。這裡主要介紹兩種:sysfs觸發器和hrtimer觸發器。

使用sysfs觸發器獲取:

  使用sysfs觸發器捕獲數據包括發送一組命令少量sysfs文件。 讓我們列舉一下我們應該做些什麼來實現這一目標:

1. 創建觸發器:在將觸發器分配給任何設備之前,應該創建它:

# echo 0 > /sys/devices/iio_sysfs_trigger/add_trigger

這裡,0對應於我們需要分配給觸發器的索引。 在此命令之後,觸發器目錄將在/ sys / bus / iio / devices /下作為trigger0。

 

2. 將觸發器分配給設備:觸發器由其名稱唯一標識,我們可以使用該觸發器將設備綁定到觸發器。 由於我們使用0作為索引,因此觸發器將命名為sysfstrig0:

# echo sysfstrig0 > /sys/bus/iio/devices/iio:device0/trigger/current_t

  我們也可以使用下麵這個命令:cat /sys/bus/iio/devices/trigger0/name> /sys/bus/iio/devices/iio:device0/trigger/current_trigger. 也就是說,如果我們編寫的值與現有的觸發器名稱不對應,則不會發生任何事情。 為了確保我們真正定義了一個觸發器,我們可以使用cat/sys/bus/iio/devices/iio:device0/trigger/current_trigger.

3. 啟用掃描元素:此步驟包括選擇將其數據值推入緩衝區的通道。 應該註意驅動程式中的available_scan_masks:

# echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage4_en
 # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage5_en
 # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage6_en
 # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage7_en

4. 設置緩衝區大小:這裡應該設置緩衝區可以保存的樣本集數量:

# echo 100 > /sys/bus/iio/devices/iio:device0/buffer/length

5. 啟用緩衝區:此步驟包括將緩衝區標記為準備接收推送數據:

# echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable

要停止捕獲,我們必須在同一個文件中寫入0。

6.使能觸發器:啟動採集:

# echo 1 > /sys/bus/iio/devices/trigger0/trigger_now

現在數據獲取已經完成,下一步我們可以

7. 禁用緩衝區:

# echo 0 > /sys/bus/iio/devices/iio:device0/buffer/enable

8.分離觸發器Detach the trigger:

  # echo "" > /sys/bus/iio/devices/iio:device0/trigger/current_trigger

9.轉儲IIO字元設備的內容

  # cat /dev/iio\:device0 | xxd –

 

 

使用hrtimer觸發器獲取(4.5及以上內核版本)

  以下是允許使用hrtimer觸發器捕獲數據的命令集:

# echo /sys/kernel/config/iio/triggers/hrtimer/trigger0
 # echo 50 > /sys/bus/iio/devices/trigger0/sampling_frequency
 # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage4_en
 # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage5_en
 # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage6_en
 # echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage7_en
 # echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable
 # cat /dev/iio:device0 | xxd -

 0000000: 0188 1a30 0000 0000 8312 68a8 c24f 5a14 ...0......h..OZ.
  0000010: 0188 1a30 0000 0000 192d 98a9 c24f 5a14 ...0.....-...OZ.
  [...]

然後,我們查看類型以確定如何處理數據:

$ cat /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage_type

be:s14/16>>2

Voltage processing: 0x188 >> 2 = 98 * 250 = 24500 = 24.5 v

 

IIO tools

  您可以使用一些有用的工具來簡化和加快使用IIO設備開發應用程式的速度。 它們在內核樹中的tools / iio中可用:

  • lsiio.c:枚舉IIO觸發器,設備和通道
  • iio_event_monitor.c: 監視IIO設備的IIO事件的ioctl介面
  • generic_buffer.c: 檢索,處理和列印從IIO設備緩衝區接收的數據
  • libiio: 一個功能強大的庫,由模擬設備開發,用於介面IIO設備,可從https://github.com/analogdevicesinc/libiio獲得。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 通過使用Http定義的伺服器的交互方法,進行更新與刪除。 PUT通常用於向伺服器發送請求,如果URI不存在,則要求伺服器根據請求創建資源,如果存在,伺服器就接受請求內容,並修改URI資源的原始版本。如果新的資源被創建,這個原始伺服器就必須通過201(Created)響應通知用戶代理。如果已有... ...
  • 一.概述 在Ocelot中,為了保護下游api資源,用戶訪問時需要進行認證鑒權,這需要在Ocelot 網關中添加認證服務。添加認證後,ReRoutes路由會進行身份驗證,並使用Ocelot的基於聲明的功能。在Startup.cs中註冊認證服務,為每個註冊提供一個方案 (authenticationP ...
  • 當一個頁面中添加了許多同類型控制項,當需要控制這些控制項進行顯示或隱藏的時候,需要一個個的將Visible屬性設置為false,十分不方便, 後通過論壇受一位大神(至於叫什麼忘了)的啟發,通過建立控制項數組的方式可以實現同種控制項批量修改同一屬性。 ToolStripStatusLabel[] Tlable ...
  • 今天早上六點半左右微信群里就看到張隊發的關於.NET Spark大數據的鏈接https://devblogs.microsoft.com/dotnet/introducing net for apache spark/ ,正印證了“微軟在不斷通過.NET Core補齊各領域開發,真正實現一種語言的跨 ...
  • 原文: C#中DataTable中的Compute方法使用收集 Compute函數的參數就兩個:Expression,和Filter。 Expresstion是計算表達式,關於Expression的詳細內容請看這裡“http://msdn2.microsoft.com/zh-cn/library/s ...
  • 下麵我們通過以下的簡單的SQL語句即可實現數據的批量導入,代碼如下: Bulk insert id From 'G:\文檔\test.txt' With ( fieldterminator=',', rowterminator='\n')註意:1) bulk insert 為Sql server 中 ...
  • 一、流編輯器 sed 與命令 sed Linux 中,常使用流編輯器 sed 進行文本替換工作。與常使用的互動式編輯器(如vim)不同,sed 編輯器以批處理的方式來編輯文件,這比互動式編輯器快得多,可以快速完成對數據的編輯修改。 一般來說,sed 編輯器會執行以下操作: 1)一次從輸入中讀取一行數 ...
  • shell腳本編程 編譯器,解釋器 編程語言: 機器語言,彙編語言,高級語言 靜態語言:編譯型語言 強類型(變數) 事先轉換成可執行格式 C,C++,JAVA,C# 動態語言:解釋型語言,on the fly 弱類型 邊解釋邊執行 ASP,ASP.NET,PHP,SHELL,PYTHON,PERL ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...