IIO子系統(tǒng)簡介
IIO 全稱是 Industrial I/O,翻譯過來就是工業(yè) I/O,大家不要看到“工業(yè)”兩個字就覺得 IIO 是只用于工業(yè)領域的。大家一般在搜索 IIO 子系統(tǒng)的時候,會發(fā)現大多數講的都是 ADC,這是因為 IIO 就是為 ADC 類傳感器準備的,當然了 DAC 也是可以的。大家常用的陀螺儀、加速度計、電壓/電流測量芯片、光照傳感器、壓力傳感器等內部都是有個 ADC,內部 ADC 將原始的模擬數據轉換為數字量,然后通過其他的通信接口,比如 IIC、SPI 等傳輸給 SOC。
因此,當你使用的傳感器本質是 ADC 或 DAC 器件的時候,可以優(yōu)先考慮使用 IIO 驅動框架。
1、iio_dev 結構體
IIO 子系統(tǒng)使用結構體 iio_dev 來描述一個具體 IIO 設備,此設備結構體定義在include/linux/iio/iio.h 文件中
2、iio_dev 申請與釋放
在使用之前要先申請 iio_dev,申請函數為 iio_device_alloc,函數原型如下:
struct iio_dev *iio_device_alloc(int sizeof_priv)
sizeof_priv:私有數據內存空間大小,一般我們會將自己定義的設備結構體變量作為 iio_dev 的私有數據,這樣可以直接通過 iio_device_alloc 函數同時完成 iio_dev 和設備結構體變量的內存申請。申請成功以后使用 iio_priv 函數來得到自定義的設備結構體變量首地址。
返回值:如果申請成功就返回 iio_dev 首地址,如果失敗就返回 NULL。
3、iio_dev 注冊與注銷
前面分配好 iio_dev 以后就要初始化各種成員變量,初始化完成以后就需要將 iio_dev 注冊 到內核中,需要用到 iio_device_register 函數
4、iio_info
iio_dev 有個成員變量:info,為 iio_info 結構體指針變量,這個是我們在編寫 IIO 驅動的時候需要著重去實現的,因為用戶空間對設備的具體操作最終都會反映到 iio_info 里面。iio_info結構體定義在 include/linux/iio/iio.h 中
5、iio_chan_spec
IIO 的核心就是通道,一個傳感器可能有多路數據,比如一個 ADC 芯片支持 8 路采集,那么這個 ADC 就有 8 個通道。Linux 內核使用 iio_chan_spec 結構體來描述通道,定義在 include/linux/iio/iio.h 文件中。
-
傳感器
+關注
關注
2550文章
51039瀏覽量
753087 -
子系統(tǒng)
+關注
關注
0文章
109瀏覽量
12392
發(fā)布評論請先 登錄
相關推薦
評論