浓毛老太交欧美老妇热爱乱,蜜臀性色av免费,妺妺窝人体色www看美女,久久久久久久久久久大尺度免费视频,麻豆人妻无码性色av专区

位置:51電子網(wǎng) » 技術(shù)資料 » 其它綜合

嵌入式Linux系統(tǒng)中I2C總線設(shè)備的驅(qū)動(dòng)設(shè)計(jì)

發(fā)布時(shí)間:2007/8/29 0:00:00 訪問(wèn)次數(shù):423

來(lái)源:電子產(chǎn)品世界  作者:新太科技股份有限公司(廣州) 賈東耀


摘要: 本文分析了Linux系統(tǒng)中I2C驅(qū)動(dòng)程序的結(jié)構(gòu),并以AT91RM9200和X1227為例,介紹了如何在嵌入式Linux系統(tǒng)中實(shí)現(xiàn)I2C總線適配器及I2C設(shè)備驅(qū)動(dòng)。
關(guān)鍵詞: Linux;I2C總線;I2C設(shè)備;驅(qū)動(dòng)


引言


I2C總線是PHILIPS公司推出的兩線式串行總線,用于連接微控制器及其外圍設(shè)備,具有簡(jiǎn)單、高效等特點(diǎn)。由于其接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片引腳的數(shù)量,降低了互聯(lián)成本,特別適用于嵌入式產(chǎn)品。


而Linux系統(tǒng)具有開(kāi)源、免費(fèi)、網(wǎng)上資源豐富等優(yōu)點(diǎn),目前已成為嵌入式系統(tǒng)的主流選擇。因此如何在嵌入式Linux系統(tǒng)中實(shí)現(xiàn)I2C功能成為實(shí)際開(kāi)發(fā)中的問(wèn)題。


I2C總線


I2C 總線通過(guò)串行數(shù)據(jù)SDA 和串行時(shí)鐘SCL線在連接到總線的器件間傳遞信息,每個(gè)器件都有一個(gè)唯一的地址識(shí)別。根據(jù)數(shù)據(jù)傳輸時(shí)的功能不同,把器件分為主機(jī)和從機(jī)。主機(jī)是初始化總線的數(shù)據(jù)傳輸并產(chǎn)生允許傳輸?shù)臅r(shí)鐘信號(hào)的器件,通常是微控制器。此時(shí),任何被尋址的器件都被認(rèn)為是從機(jī),例如LCD驅(qū)動(dòng)器、E2PROM等。


I2C總線協(xié)議規(guī)定,各主機(jī)進(jìn)行通信時(shí)都要有起始、結(jié)束、發(fā)送數(shù)據(jù)和應(yīng)答信號(hào)。這些信號(hào)都是通信過(guò)程中的基本單元。起始信號(hào)就是在SCL線為高時(shí)SDA線從高變化到低;停止信號(hào)就是在SCL線為高時(shí)SDA線從低變化到高;應(yīng)答信號(hào)是在SCL為高時(shí)SDA為低;非應(yīng)答信號(hào)相反,是在SCL為高時(shí)SDA為高。


總線傳送的每1幀數(shù)據(jù)均是1個(gè)字節(jié)。協(xié)議規(guī)定,在啟動(dòng)總線后的第1個(gè)字節(jié)的高7位是對(duì)從機(jī)的尋址地址,第8位為方向位(“0”表示主機(jī)對(duì)從機(jī)的寫操作;“1”表示主機(jī)對(duì)從機(jī)的讀操作),其余的字節(jié)為操作數(shù)據(jù)。數(shù)據(jù)傳送過(guò)程是:在I2C總線發(fā)送起始信號(hào)后,發(fā)送從機(jī)的7位尋址地址和1位表示這次操作性質(zhì)的讀寫位,在有應(yīng)答信號(hào)后開(kāi)始傳送數(shù)據(jù),直到發(fā)送停止信號(hào)。主機(jī)每發(fā)送1個(gè)字節(jié)就要檢測(cè)SDA線上有沒(méi)有收到應(yīng)答信號(hào),有則繼續(xù)發(fā)送,否則將停止發(fā)送數(shù)據(jù)。


Linux中I2C總線驅(qū)動(dòng)結(jié)構(gòu)


Linux系統(tǒng)對(duì)I2C總線具有很好的支持。與硬件物理連接相對(duì)應(yīng)的,Linux的I2C框架中各個(gè)部分的關(guān)系如圖1所示。



圖1 Linux內(nèi)核I2C總線驅(qū)動(dòng)程序構(gòu)架


內(nèi)核中I2C相關(guān)代碼可以分為三個(gè)層次:
1. I2C core框架:提供了核心數(shù)據(jù)結(jié)構(gòu)的定義和相關(guān)接口函數(shù),用來(lái)實(shí)現(xiàn)I2C適配器驅(qū)動(dòng)和設(shè)備驅(qū)動(dòng)的注冊(cè)、注銷管理,以及I2C通信方法上層的、與具體適配器無(wú)關(guān)的代碼,為系統(tǒng)中每個(gè)I2C總線增加相應(yīng)的讀寫方法。


2. I2C總線適配器驅(qū)動(dòng):定義描述具體I2C總線適配器的i2c_adapter數(shù)據(jù)結(jié)構(gòu)、實(shí)現(xiàn)在具體I2C適配器上的I2C總線通信方法,并由i2c_algorithm數(shù)據(jù)結(jié)構(gòu)進(jìn)行描述。


3. I2C 設(shè)備驅(qū)動(dòng):定義描述具體設(shè)備的i2c_client和可能的私有數(shù)據(jù)結(jié)構(gòu)、借助I2C core提供的函數(shù)接口完成設(shè)備在內(nèi)核的注冊(cè),并實(shí)現(xiàn)具體的功能,包括read, write以及ioctl等對(duì)用戶層操作的接口。


總體而言,Linux中I2C總線的驅(qū)動(dòng)分為兩個(gè)部分:總線驅(qū)動(dòng)(BUS)和設(shè)備驅(qū)動(dòng)(DEVICE)。I2C core與I2C總線適配器驅(qū)動(dòng)完成了硬件上的主機(jī)總線驅(qū)動(dòng)(BUS),而I2C driver則實(shí)現(xiàn)了從機(jī)設(shè)備驅(qū)動(dòng)。在設(shè)計(jì)中,I2C core提供的接口是統(tǒng)一的,不需要修改,我們只需要實(shí)現(xiàn)特定I2C總線適配器驅(qū)動(dòng)和I2C設(shè)備驅(qū)動(dòng),這樣大大提高了系統(tǒng)的可移植性。
 
筆者在某個(gè)產(chǎn)品中曾用AT91RM9200和X1227構(gòu)成嵌入式系統(tǒng)的時(shí)鐘模塊。在該設(shè)計(jì)中,AT91RM9200作為I2C的主機(jī)部分,X1227作為從機(jī)。下面以此為例,具體介紹這兩部分驅(qū)動(dòng)的實(shí)現(xiàn)。


AT91RM9200 I2C總線驅(qū)動(dòng)實(shí)現(xiàn)


AT91RM9200是ARM920T處理器,它提供標(biāo)準(zhǔn)的兩線接口TWI,即I2C接口,主機(jī)工作模式。通過(guò)TWI 控制寄存器TWI_CR設(shè)置I2C工作模式和狀態(tài)。時(shí)鐘由寄存器TWI_CWGR中編程值產(chǎn)生。該寄存器定義了TWCK 信號(hào),使接口適應(yīng)寬范圍時(shí)鐘。


具體在linux中AT91RM9200 I2C總線適配器驅(qū)動(dòng)的實(shí)現(xiàn),首先初始化AT91RM9200 I2C的工作模式,然后裝載I2C總線驅(qū)動(dòng),這需要兩個(gè)結(jié)構(gòu)模塊來(lái)描述:struct i2c_adapter和struct i2c_algorithm。


初始化i2c_adapter結(jié)構(gòu)成員如下:
static struct i2c_adapter at91rm9200_adapter = {
name:   "AT91RM9200", 
id: I2C_ALGO_SMBUS, 
algo:   &at91_algorithm, 
algo_data:  NULL, 
inc_use:at91_inc, 
dec_use:at91_dec, 
... ...
};


這個(gè)模塊并未提供讀寫函數(shù),具體的讀寫方法由第二個(gè)模塊struct i2c_algorithm提供。
static struct i2c_algorithm at91_algorithm = {
 name:  "at91 i2c",
 id:  I2C_ALGO_SMBUS,

來(lái)源:電子產(chǎn)品世界  作者:新太科技股份有限公司(廣州) 賈東耀


摘要: 本文分析了Linux系統(tǒng)中I2C驅(qū)動(dòng)程序的結(jié)構(gòu),并以AT91RM9200和X1227為例,介紹了如何在嵌入式Linux系統(tǒng)中實(shí)現(xiàn)I2C總線適配器及I2C設(shè)備驅(qū)動(dòng)。
關(guān)鍵詞: Linux;I2C總線;I2C設(shè)備;驅(qū)動(dòng)


引言


I2C總線是PHILIPS公司推出的兩線式串行總線,用于連接微控制器及其外圍設(shè)備,具有簡(jiǎn)單、高效等特點(diǎn)。由于其接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片引腳的數(shù)量,降低了互聯(lián)成本,特別適用于嵌入式產(chǎn)品。


而Linux系統(tǒng)具有開(kāi)源、免費(fèi)、網(wǎng)上資源豐富等優(yōu)點(diǎn),目前已成為嵌入式系統(tǒng)的主流選擇。因此如何在嵌入式Linux系統(tǒng)中實(shí)現(xiàn)I2C功能成為實(shí)際開(kāi)發(fā)中的問(wèn)題。


I2C總線


I2C 總線通過(guò)串行數(shù)據(jù)SDA 和串行時(shí)鐘SCL線在連接到總線的器件間傳遞信息,每個(gè)器件都有一個(gè)唯一的地址識(shí)別。根據(jù)數(shù)據(jù)傳輸時(shí)的功能不同,把器件分為主機(jī)和從機(jī)。主機(jī)是初始化總線的數(shù)據(jù)傳輸并產(chǎn)生允許傳輸?shù)臅r(shí)鐘信號(hào)的器件,通常是微控制器。此時(shí),任何被尋址的器件都被認(rèn)為是從機(jī),例如LCD驅(qū)動(dòng)器、E2PROM等。


I2C總線協(xié)議規(guī)定,各主機(jī)進(jìn)行通信時(shí)都要有起始、結(jié)束、發(fā)送數(shù)據(jù)和應(yīng)答信號(hào)。這些信號(hào)都是通信過(guò)程中的基本單元。起始信號(hào)就是在SCL線為高時(shí)SDA線從高變化到低;停止信號(hào)就是在SCL線為高時(shí)SDA線從低變化到高;應(yīng)答信號(hào)是在SCL為高時(shí)SDA為低;非應(yīng)答信號(hào)相反,是在SCL為高時(shí)SDA為高。


總線傳送的每1幀數(shù)據(jù)均是1個(gè)字節(jié)。協(xié)議規(guī)定,在啟動(dòng)總線后的第1個(gè)字節(jié)的高7位是對(duì)從機(jī)的尋址地址,第8位為方向位(“0”表示主機(jī)對(duì)從機(jī)的寫操作;“1”表示主機(jī)對(duì)從機(jī)的讀操作),其余的字節(jié)為操作數(shù)據(jù)。數(shù)據(jù)傳送過(guò)程是:在I2C總線發(fā)送起始信號(hào)后,發(fā)送從機(jī)的7位尋址地址和1位表示這次操作性質(zhì)的讀寫位,在有應(yīng)答信號(hào)后開(kāi)始傳送數(shù)據(jù),直到發(fā)送停止信號(hào)。主機(jī)每發(fā)送1個(gè)字節(jié)就要檢測(cè)SDA線上有沒(méi)有收到應(yīng)答信號(hào),有則繼續(xù)發(fā)送,否則將停止發(fā)送數(shù)據(jù)。


Linux中I2C總線驅(qū)動(dòng)結(jié)構(gòu)


Linux系統(tǒng)對(duì)I2C總線具有很好的支持。與硬件物理連接相對(duì)應(yīng)的,Linux的I2C框架中各個(gè)部分的關(guān)系如圖1所示。



圖1 Linux內(nèi)核I2C總線驅(qū)動(dòng)程序構(gòu)架


內(nèi)核中I2C相關(guān)代碼可以分為三個(gè)層次:
1. I2C core框架:提供了核心數(shù)據(jù)結(jié)構(gòu)的定義和相關(guān)接口函數(shù),用來(lái)實(shí)現(xiàn)I2C適配器驅(qū)動(dòng)和設(shè)備驅(qū)動(dòng)的注冊(cè)、注銷管理,以及I2C通信方法上層的、與具體適配器無(wú)關(guān)的代碼,為系統(tǒng)中每個(gè)I2C總線增加相應(yīng)的讀寫方法。


2. I2C總線適配器驅(qū)動(dòng):定義描述具體I2C總線適配器的i2c_adapter數(shù)據(jù)結(jié)構(gòu)、實(shí)現(xiàn)在具體I2C適配器上的I2C總線通信方法,并由i2c_algorithm數(shù)據(jù)結(jié)構(gòu)進(jìn)行描述。


3. I2C 設(shè)備驅(qū)動(dòng):定義描述具體設(shè)備的i2c_client和可能的私有數(shù)據(jù)結(jié)構(gòu)、借助I2C core提供的函數(shù)接口完成設(shè)備在內(nèi)核的注冊(cè),并實(shí)現(xiàn)具體的功能,包括read, write以及ioctl等對(duì)用戶層操作的接口。


總體而言,Linux中I2C總線的驅(qū)動(dòng)分為兩個(gè)部分:總線驅(qū)動(dòng)(BUS)和設(shè)備驅(qū)動(dòng)(DEVICE)。I2C core與I2C總線適配器驅(qū)動(dòng)完成了硬件上的主機(jī)總線驅(qū)動(dòng)(BUS),而I2C driver則實(shí)現(xiàn)了從機(jī)設(shè)備驅(qū)動(dòng)。在設(shè)計(jì)中,I2C core提供的接口是統(tǒng)一的,不需要修改,我們只需要實(shí)現(xiàn)特定I2C總線適配器驅(qū)動(dòng)和I2C設(shè)備驅(qū)動(dòng),這樣大大提高了系統(tǒng)的可移植性。
 
筆者在某個(gè)產(chǎn)品中曾用AT91RM9200和X1227構(gòu)成嵌入式系統(tǒng)的時(shí)鐘模塊。在該設(shè)計(jì)中,AT91RM9200作為I2C的主機(jī)部分,X1227作為從機(jī)。下面以此為例,具體介紹這兩部分驅(qū)動(dòng)的實(shí)現(xiàn)。


AT91RM9200 I2C總線驅(qū)動(dòng)實(shí)現(xiàn)


AT91RM9200是ARM920T處理器,它提供標(biāo)準(zhǔn)的兩線接口TWI,即I2C接口,主機(jī)工作模式。通過(guò)TWI 控制寄存器TWI_CR設(shè)置I2C工作模式和狀態(tài)。時(shí)鐘由寄存器TWI_CWGR中編程值產(chǎn)生。該寄存器定義了TWCK 信號(hào),使接口適應(yīng)寬范圍時(shí)鐘。


具體在linux中AT91RM9200 I2C總線適配器驅(qū)動(dòng)的實(shí)現(xiàn),首先初始化AT91RM9200 I2C的工作模式,然后裝載I2C總線驅(qū)動(dòng),這需要兩個(gè)結(jié)構(gòu)模塊來(lái)描述:struct i2c_adapter和struct i2c_algorithm。


初始化i2c_adapter結(jié)構(gòu)成員如下:
static struct i2c_adapter at91rm9200_adapter = {
name:   "AT91RM9200", 
id: I2C_ALGO_SMBUS, 
algo:   &at91_algorithm, 
algo_data:  NULL, 
inc_use:at91_inc, 
dec_use:at91_dec, 
... ...
};


這個(gè)模塊并未提供讀寫函數(shù),具體的讀寫方法由第二個(gè)模塊struct i2c_algorithm提供。
static struct i2c_algorithm at91_algorithm = {
 name:  "at91 i2c",
 id:  I2C_ALGO_SMBUS,

相關(guān)IC型號(hào)

熱門點(diǎn)擊

 

推薦技術(shù)資料

羅盤誤差及補(bǔ)償
    造成羅盤誤差的主要因素有傳感器誤差、其他磁材料干擾等。... [詳細(xì)]
版權(quán)所有:51dzw.COM
深圳服務(wù)熱線:13692101218  13751165337
粵ICP備09112631號(hào)-6(miitbeian.gov.cn)
公網(wǎng)安備44030402000607
深圳市碧威特網(wǎng)絡(luò)技術(shù)有限公司
付款方式


 復(fù)制成功!