i2c體系結構分為三個部分:i2c核心、匯流排驅動、裝置驅動
i2c核心:
i2c核心提供了一組不依賴硬體的介面函式,i2c匯流排驅動和裝置驅動之間依賴於i2c核心作為紐帶
(1)增加/刪除i2c_adapter
int i2c_add_adapter(struct i2c_adapter *adap);
int i2c_del_adapter(struct i2c_adapter *adap);
(2)增加/刪除i2c_driver
int i2c_register_driver(struct module *owner, struct i2c_driver *drever);
int i2c_del_driver(struct i2c_driver *drever);
inline int i2c_add_driver(struct i2c_driver *drever);
(3)i2c_client依附/脫離
int i2c_attach_client(struct i2c_client *client);
int i2c_detach_client(struct i2c_client *client);
(4)i2c傳輸、傳送和接收
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num);/*用於i2c介面卡和i2c裝置之間通訊*/
int i2c_master_send(struct i2c_client *client, const char *buf, int count);//呼叫i2c_transfer()函式
int i2c_master_recv(struct i2c_client *client, char *buf, int count);
i2c匯流排驅動:
i2c匯流排驅動是對i2c硬體體系中介面卡的實現。主要包含介面卡資料結構i2c_adapter和介面卡的algorithm結構體i2c_algorithm
i2c_adapter
1struct
i2c_adapter
2;
i2c_algorithm
1struct
i2c_algorithm
2;
i2c_algorithm結構體主要實現了master_xfer()函式和functionalityh()函式,其中master_xfer()函式定義了介面卡和裝置之間的通訊方式,functionalityh()函式用於返回algorithm支援的通訊協議。
i2c_adapter對應物理上的乙個介面卡,i2c_algorithm對應一套通訊方法。
i2c裝置驅動:
i2c裝置驅動包含i2c_driver和i2c_client兩個資料結構。
i2c_driver
1struct
i2c_driver
2;
i2c_client
1struct
i2c_client
2;
i2c_driver 對應一套驅動方法,i2c_client對應真實的物理裝置,每個i2c裝置都需要乙個i2c_client來描述。
linux i2c匯流排驅動
技術就是這樣,看一百遍不如做十遍。在對i2c做了乙個簡單的記錄之後發現比單看要理解更深刻,當然在記錄完i2c驅動之後,最希望自己能夠堅持自己實現at24c02的讀寫驅動與測試應用程式。由於是做記錄,少不了借用網路各種優秀資源,下圖是某部落格中找到的i2c框架。1 hardware層,cpu的i2c ...
linux i2c 驅動分析
static struct platform driver s3c2410 i2c driver static struct platform driver s3c2440 i2c driver static int init i2c adap s3c init void return ret st...
linux i2c驅動總結
最近幾天一直在看i2c的驅動架構,看到目前的感覺是說明白吧又不是很透徹,說不明白吧又知道點,總之有點不明白。明白的 1 adapter驅動,i2c控制器驅動,如果要開發i2c控制器的,這部分是要實現的。這部分要填充struct i2c adapter 結構圖和struct alogrithm結構體....