1. 程式人生 > >linux IIC子系統分析(二)—— linux i2c 架構概述

linux IIC子系統分析(二)—— linux i2c 架構概述

I2C匯流排因為它及簡單的硬體連線和通訊方式,在現在的很多裝置上它是一種不可或缺的通訊匯流排。如果用當微控制器直接操作I2C,其實很簡單,只要正確把握IIC的操作時序就可以了。但是在linux系統中,I2C子系統結構是比較複雜的,因為它涉及到很多linux核心相關的知識,理解起來十分費勁。

(一)I2C架構概述

Linux 的I2C體系架構分為3個組成部分:

(1)I2C核心:I2C核心提供了I2C匯流排驅動和匯流排設備註冊,登出,通訊方法。還提供了與介面卡無關的程式碼以及探測程式碼等。

(2)I2C匯流排驅動:I2C匯流排驅動是對I2C硬體體系結構中介面卡驅動的實現。(IIC使用的是平臺裝置驅動模型)

(3)I2C裝置驅動:I2C裝置驅動是對裝置端的實現(客戶驅動),比如EEPROM裝置。

(二)linux中I2C驅動架構圖


Hardware 是我們的硬體裝置,除錯裝置的時候我們經常在這用示波器來跟蹤I2C通訊波形。

根據I2C架構概述的介紹,可以知道:

I2C核心:I2C核心層

I2C匯流排驅動(platform bus):硬體實現控制層,訪問抽象層

I2C裝置驅動(device driver):driver層

注意:在我們linux I2C子系統中,有使用到平臺裝置驅動機制。使用平臺裝置驅動的主要目是:將硬體/平臺相關的東西分離出來,以提高程式的可移植性。

接下來按照linux i2c子系統的註冊順序進一步分析I2C子系統架構,總共分為下面幾篇文章

(三)(四)(五)(六)介紹I2C匯流排驅動

(七)(八)(九)例項介紹三種不同的方式驅動i2C 裝置

說明:

1.分析的核心版本是linux2.6.32.2

2.開發板為友善之臂的mini2440, 用的是ARM9(S3C2440A)處理器

3.連結的IIC裝置是EEPROM(AT24C02)

4.按照核心I2C子系統的註冊順序分析。