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