spi device的註冊和建立 引入DTS之前)

2021-07-26 17:02:31 字數 1489 閱讀 6747

spi通用介面層用spi_device結構來表示乙個spi裝置,它的各個欄位的意義如下:

struct device           dev

代表該spi裝置的device結構

struct spi_master       *master

指向該spi裝置所使用的控制器

u32     max_speed_hz

該裝置的最大工作時鐘頻率

u8      chip_select

在控制器中的片選引腳編號索引

u16     mode

裝置的工作模式,包括時鐘格式,片選訊號的有效電平等等

u8      bits_per_word

裝置每個單位資料所需要的位元數

int     irq

裝置使用的irq編號

char    modalias[spi_name_size]

該裝置的名字,用於spi匯流排和驅動進行配對

int     cs_gpio

片選訊號的gpio編號,通常不用我們自己設定,介面層會根據上面的chip_select欄位在spi_master結構中進行查詢並賦值

要完成向系統增加並註冊乙個spi裝置,我們還需要另乙個資料結構:

/* include/linux/spi/spi.h */

struct spi board_info ;

spi_board_info

物件用於描述

spi裝置資訊,其大部分欄位和spi_device結構相對應,bus_num欄位則用來指定所屬的控制器編號,通過spi_board_info結構,我們可以有兩種方式向系統增加spi裝置。第一種方式是在spi控制器驅動已經被載入後,我們使用通用介面層提供的如下api來完成:

struct spi_device *spi_new_device(struct spi_master *master, struct spi_board_info *chip);

第二種方式是在板子的初始化**中,定義乙個spi_board_info陣列,然後通過以下api註冊spi_board_info:

int spi_register_board_info(struct spi_board_info const *info, unsigned n);

上面這個api會把每個spi_board_info掛在全域性鍊錶變數board_list上,並且遍歷已經在系統中註冊了的控制器,匹配上相應的控制器並取得它們的spi_master結構指標,最終也會通過spi_new_device函式新增spi裝置。因為spi_register_board_info可以在板子的初始化**中呼叫,可能這時控制器驅動尚未載入,此刻無法取得相應的spi_master指標,不過不要擔心,控制器驅動被載入時,一定會呼叫spi_register_master函式來註冊spi_master結構,而spi_register_master函式會反過來遍歷全域性鍊錶board_list上的spi_board_info,然後通過spi_new_device函式新增spi裝置。



OSGI動態註冊和建立服務

1 需要引入 org.osgi org.osgi 3.0.0 2 建立乙個工廠類實現介面managedservicefactory public class wservicefactory implements managedservicefactory public void setcontext...

Vue元件的建立與註冊

元件優勢 元件化和模組化的不同 vue.js的元件的使用有3個步驟 使用 vue.extend 配合 vue.component 方法 my com1 使用元件,直接呼叫元件名即可 div 使用 vue.extend 來建立元件構造器 var com1 vue.extend vue.componen...

C 軟體註冊和註冊

原理就是軟體與序號產生器使用同一種演算法,將資料進行匹配。註冊後將資料寫入至登錄檔中。一種簡單的序號產生器的方式。1 軟體的實現 using system using system.collections.generic using system.linq using system.manageme...