0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Linux驅(qū)動的I2C總線的深度分析

h1654155971.7688 ? 2017-12-18 16:31 ? 次閱讀

1、 I2C總線的硬件特性:兩線式串行總線.用于連接CPU和外設(shè)之間的通信接口需要2根信號線,時鐘控制線SCL和數(shù)據(jù)傳輸信號線SDA.串行:CPU和外設(shè)之間傳輸是一個周期傳輸一個BIT位, 如果需要寫入0X55,需要兩個時鐘周期才能完成.CPU又稱master,外設(shè)又稱slave。

“一個時鐘周期傳輸一個bit”:CPU和外設(shè)之間傳輸一個bit位,必須要通過時鐘控制信號來實現(xiàn)雙方的數(shù)據(jù)收和發(fā)!比如CPU在時鐘高電平像數(shù)據(jù)線寫入數(shù)據(jù),設(shè)備在同一個周期低電平從數(shù)據(jù)線上接收數(shù)據(jù)。

“總線”:兩根信號線上可以掛接很多外設(shè),也可以掛接很多CPU.一般來說總線上只有一個CPU,如果有多個CPU,I2C總線具有仲裁機(jī)制來實現(xiàn)同步訪問。

SCL和SDA分別會接上一個上拉電阻,這兩根信號線的默認(rèn)狀態(tài)為高電平狀態(tài)!一般如果CU或者外設(shè)配置GPIO為輸出口,就等于CPU或者外設(shè)控制了GPIO獲取控制權(quán);如果配置成輸入口,就等于釋放控制權(quán)。
基于Linux驅(qū)動的I2C總線的深度分析

2、問:CPU如何通過兩根線找到需要訪問的具體設(shè)備?CPU如果找到某個具有的外設(shè),那么CPU和外設(shè)是如何通過兩根信號新完成數(shù)據(jù)交互? SDA和SCL如何搭配的?

以上答案在I2C總線協(xié)議中(芯片手冊)

3、總線協(xié)議相關(guān)內(nèi)容:

(1) START信號,起始信號:CPU如果要訪問總線,必須CU首先向總線上發(fā)送一個START起始信號;此信號由CPU發(fā)起;SCL為高電平。SDL由高電平向低電平跳變,產(chǎn)生START信號‘

(2) 停止信號,結(jié)束信號:CPU結(jié)束訪問總線,需要向總線發(fā)送一個STOP信號;此信號由CPU發(fā)起;SCL為高電平,SDA由低電平向高電平跳變,產(chǎn)生STOP信號;

(3) 設(shè)備地址:用于標(biāo)識外設(shè)在I2C總線上的唯一性!同一個I2C總線上外設(shè),每一個外設(shè)都有唯一的設(shè)備地址;如果CPU要訪問某個外設(shè),CPU只需要在總線上發(fā)送某個外設(shè)的設(shè)備地址即可,發(fā)送完畢,如果外設(shè)存在于總線上,外設(shè)會給CPU一個反饋信號,就可以進(jìn)行后續(xù)的數(shù)據(jù)訪問;

外設(shè)的設(shè)備地址的確定:一般有芯片廠家和原理圖共同決定,以三個外設(shè)為例,電可檫除存儲器AT24C02、溫度傳感器LM77,背光燈控制芯片ADP8860。

AT24C02,EEPROM的設(shè)備地址:1010A2A1A0R/W:1010:高4bit,芯片廠家定義;A2A1A0:原理圖上都接GNDèA2A1A01=000 R=1,表示CPU讀取外設(shè),W=0,表示CPU寫外設(shè)。

WP:寫保護(hù)

通過以上信息,得到讀設(shè)備地址:10100001=>0Xa1 寫設(shè)備地址:10100000=>0Xa0 設(shè)備地址(7位,不算讀寫位,地址右移1位,高位補0)=》最終設(shè)備地址=01010000=》0X50

ADP8860背光燈控制芯片設(shè)備地址0101010X:讀設(shè)備地址:01010101=>0X55 寫設(shè)備地址:01010100=>0X54

設(shè)備地址:00101010=>0X2A

LM77設(shè)備地址100100A1AA1:如果A1A0都接地:A1A0=00 讀設(shè)備地址:10010001=>0X91 寫設(shè)備地址:10010000=>0X90 設(shè)備地址:01001000=>0X48。

(4)ACK信號:反饋應(yīng)答信號。如果CPU發(fā)送完設(shè)備地址,,并且外設(shè)進(jìn)行響應(yīng),此時給CPU發(fā)送一個ACK應(yīng)答信號,告訴CPU,外設(shè)存在于總線上;如果在數(shù)據(jù)讀寫過程中,也可以通過ACK信號指示數(shù)據(jù)的讀寫過程是否正常!有效的ACK信號為低電平(數(shù)據(jù)線),無效的ACK信號為高電平!

4.CPU與外設(shè)的數(shù)據(jù)交互:I2C的數(shù)據(jù)傳輸,從高位開始發(fā)送,一次傳輸一個字節(jié)!

1.LM77溫度傳感器的數(shù)據(jù)傳輸

(1)CPU發(fā)送START信號;(2)COU發(fā)送設(shè)備地址 3.CPU發(fā)送讀寫位4.設(shè)備如果正常存在總線上,設(shè)備給CPU發(fā)送一個ACK信號 5.根據(jù)芯片手冊進(jìn)行數(shù)據(jù)的讀寫操作,其中涉及到ACK信號,這個ACK與4步驟ACK信號意義不太一樣!6.CPU發(fā)送STOP信號,結(jié)束此次數(shù)據(jù)交互。

2.ADP8860背光燈芯片:芯片內(nèi)部有一組寄存器,但是這些寄存器CPU不能像訪問GPIO一樣直接去訪問寄存器地址,原因ADP8860并沒有直接連接到CPU的4G地址空間中,需要間接的利用I2C總線訪問芯片內(nèi)部的寄存器地址;例如把數(shù)據(jù)0XAA寫入芯片內(nèi)部寄存器0X34這個地址。

(1)CPU發(fā)送START信號 (2)CPU發(fā)送設(shè)備地址

3.CPU發(fā)送讀寫位,如果是寫,這個bit為0

4.ADP8860如果正常存在于總線上,設(shè)備返回一個ACK信號給CPU,低電平有效。

5.CPU發(fā)送訪問的寄存器以后,設(shè)備給CPU發(fā)送一個ACK信號,告訴CPU可以繼續(xù)訪問;

7.CPU發(fā)送要寫入的數(shù)據(jù)0XAA;

8.設(shè)備將數(shù)據(jù)0XAA寫入到內(nèi)部寄存器0X34,然后設(shè)備給CPU一個ACK信號,告訴CPU寫入成功;

9.CPU發(fā)送STOP信號,結(jié)束此次的寄存器寫入操作

3.電可檫除存儲器EEPROM(at24c02)訪問過程:

AT24C01的容量為256字節(jié),地址編址:0—255MSN:高位LSB:低位。

將數(shù)據(jù)0XAA 寫入到內(nèi)部儲存地址0X55,CPU要訪問的內(nèi)部地址的操作過程和ADP8860相似!

(1)CPU發(fā)送START信號 (2)CPU發(fā)送設(shè)備地址 (3)CPU發(fā)送寫:0 (4)設(shè)備存在總線上,那么設(shè)備給CPU發(fā)送一個ACK應(yīng)答信號,告訴CPU,我在總線上! (4)CPU發(fā)送要操作的地址:0X55 (5)設(shè)備接收到這個要操作的地址,設(shè)備給CPU發(fā)送一個ACK信號,告訴CPU,可以訪問這個地址?。?)CPU發(fā)送要寫入的數(shù)據(jù)0XAA (7)設(shè)備接收這個要寫入的數(shù)據(jù),并將數(shù)據(jù)寫入到對應(yīng)的地址0X55中,設(shè)備給CPU發(fā)送一個ACK信號,告訴CPU寫入數(shù)據(jù)成功! (8)CPU發(fā)送一個STOP信號,停止數(shù)據(jù)的此次訪問。

隨機(jī)讀:就是讀任何一個地址里的數(shù)據(jù)即可,例如讀取0X55地址空間中的數(shù)據(jù)信息。

SDA和SCL如何搭配使用? 如果CPU或者設(shè)備向數(shù)據(jù)線上寫入數(shù)據(jù),應(yīng)該在SCL為低電平寫入數(shù)據(jù);如果CPU或者設(shè)備從數(shù)據(jù)線上獲取數(shù)據(jù),應(yīng)該在同周期的高電平去讀數(shù)據(jù)!

I2C外設(shè)的具體如何操作,關(guān)鍵看芯片手冊即可!

4.AT24C02的硬件特性:EEPROM,電可檫除存儲器; 容量:2K ,256字節(jié) 傳輸速度:100khz’,400KHZ

寫周期:5ms 分頁:1頁為8字節(jié),如果按頁寫,最多一次只能寫8字節(jié),如果寫9字節(jié),第9字節(jié)數(shù)據(jù)會把第一字節(jié)的數(shù)據(jù)進(jìn)行覆蓋; 地址編碼:0—255 設(shè)備地址:0X50

5.案例:存儲軟件和硬件版本號到EEPROM中:軟件版本號:SYYMMDDXY->S14101700 硬件版本號:HYYMMDDXY->H14101700EEROM存儲器地址規(guī)劃:軟件版本號的地址范圍:0X0—0X9硬件版本哈的地址范圍:0X10—0X19

驅(qū)動設(shè)計:1.采用GPIO模擬I2C時序來實現(xiàn)I2C總線硬件操作!2.采用操作I2C控制器來實現(xiàn)I2C總線硬件操作! 3.采用linux內(nèi)核I2C驅(qū)動框架來實現(xiàn)I2C硬件操作

5.1 Linux內(nèi)核的I2C驅(qū)動框架:

App:open,read,write,ioctl

Eeprom.ADDR = 0;設(shè)備地址 Eeprom.data = ‘s’;//數(shù)據(jù)

Ioctl(fd,I2C_WRITE_CMD,&eeprom)

I2C設(shè)備驅(qū)動:eeprom_ioctl, eeprom_read,………;

1.只關(guān)注硬件外設(shè); 2.只關(guān)注硬件外設(shè)操作的數(shù)據(jù)信息; 設(shè)備地址、設(shè)備片內(nèi)地址 設(shè)備的數(shù)據(jù)

2.I2C設(shè)備驅(qū)動利用內(nèi)核提供的相關(guān)操作方法,將以上數(shù)據(jù)信息發(fā)送給I2C的總線驅(qū)動,由I2C總線驅(qū)動來實現(xiàn)硬件上面的數(shù)據(jù)傳輸!

內(nèi)核提供的操作接口:1.i2c_transfer();//老式接口 SMBUS接口;//新式接口,兼容老式接口

作用:上一層的I2C設(shè)備驅(qū)動利用這些接口函數(shù),將I2C設(shè)備驅(qū)動要訪問的數(shù)據(jù)信息(設(shè)備地址、片內(nèi)地址、數(shù)據(jù))丟給I2C總線驅(qū)動來實現(xiàn)硬件的總線傳輸!

I2C總線驅(qū)動:1.管理的設(shè)備對象僅僅I2C控制器 I2C硬件控制器集成在CPU的內(nèi)容,訪問I2C控制器就通過寄存器來進(jìn)行,類似串口控制器,nandflash控制器,由硬件幫你發(fā)時序!

3.I2C總線驅(qū)動啟動硬件的時序,然后根據(jù)I2C設(shè)備驅(qū)動發(fā)來的數(shù)據(jù)信息(設(shè)備地址、片內(nèi)地址、數(shù)據(jù))最終完成I2C的硬件傳輸。

利用I2C實現(xiàn)I2C外設(shè)的驅(qū)動重點涉及兩個驅(qū)動:I2C總線驅(qū)動和I2C設(shè)備驅(qū)動。

1.I2C總線驅(qū)動:管理的對象是I2C控制器,只負(fù)責(zé)硬件的傳輸數(shù)據(jù),這個驅(qū)動一般都是芯片公司在提供的linux內(nèi)核源碼中,只需配置內(nèi)核添加I2C總線驅(qū)動即可:

DEVICE DRIVERàI2C SupportàI2C hardware bus support-><*>s3c2410 i2c drivers

I2C總線驅(qū)動:drivers/i2c/buses/i2c-s3c.c

2.i2C設(shè)備驅(qū)動:實際開發(fā)只需關(guān)注I2C外設(shè)的驅(qū)動,就是I2C設(shè)備驅(qū)動,只需關(guān)注外設(shè)的操作的數(shù)據(jù)信息(設(shè)備地址、片內(nèi)地址、數(shù)據(jù))

5.2利用I2C驅(qū)動框架實現(xiàn)I2C設(shè)備驅(qū)動。

I2C設(shè)備驅(qū)動實現(xiàn)利用了內(nèi)核分離的思想,采用虛擬總線的形式來管理I2C設(shè)備驅(qū)動,具體如下:

(1)首先linux內(nèi)核已經(jīng)幫你定義好了一個I2C的虛擬總線(i2c_bus_type),在這個總線上維護(hù)者兩個鏈表:dev鏈表和drv鏈表

(2)dev鏈表存放硬件信息,每一個節(jié)點的對應(yīng)的數(shù)據(jù)類型是struct i2c_client,用這個結(jié)構(gòu)體來裝載硬件信息。每當(dāng)向內(nèi)核添加一個硬件節(jié)點時,內(nèi)核幫你遍歷drv鏈表,取出drv鏈表每一個軟件節(jié)點,根據(jù)硬件節(jié)點的name和軟件節(jié)點的id_table中的name進(jìn)行匹配,如果匹配成功,說明硬件找到了軟件,然后調(diào)用軟件節(jié)點的probe函數(shù),然后將匹配成功的硬件節(jié)點的首地址傳遞給probe函數(shù),供probe函數(shù)獲取硬件信息;

(3)drv鏈表存放軟件信息,每一個節(jié)點的對應(yīng)的數(shù)據(jù)類型是struct_i2c_driver,用這個結(jié)構(gòu)體來裝載軟件信息(fops)。每當(dāng)向內(nèi)核添加一個軟件節(jié)點時,內(nèi)核會幫你遍歷dev鏈表,取出dev鏈表每一個硬件節(jié)點,根據(jù)硬件節(jié)點的name和軟件節(jié)點的id_table中的name進(jìn)行匹配,如果匹配成功,說明軟件找到了硬件,然后調(diào)用軟件節(jié)點的probe函數(shù),然后將匹配成功的硬件節(jié)點首地址傳遞給probe函數(shù),供probe函數(shù)獲取硬件信息;

(4)i2c硬件的信息:關(guān)鍵是i2c設(shè)備地址,因為I2C設(shè)備地址有可能由原理圖決定。

總結(jié);實現(xiàn)一個I2C設(shè)備驅(qū)動關(guān)鍵圍繞著i2c_client和i2c_driver。

[c]view plaincopy

structi2c_client{

unsignedshortflags;/*div.,seebelow讀寫標(biāo)志*/

unsignedshortaddr;/*chipaddress-NOTE:7bit設(shè)備地址7bit*//*addressesare

charname[I2C_NAME_SIZE];//用于匹配

structi2c_adapter*adapter;/*theadapterwesiton適配器,4個總線*/

structi2c_driver*driver;/*andouraccessroutines軟件節(jié)點*/

structdevicedev;/*thedevicestructureplatform_data來存自己定義的硬件信息*/

intirq;/*irqissuedbydevice中斷號*/

structlist_headdetected;//鏈表

這個結(jié)構(gòu)體不會像platform_device顯示的需要自己去分配,初始化和注冊,這個工作linux內(nèi)核已經(jīng)幫你實現(xiàn),甚至注冊的時候進(jìn)行匹配,都是linux內(nèi)核來幫你實現(xiàn)!

問:如果linux內(nèi)核幫你實現(xiàn)分配初始化i2c_client,內(nèi)核如何知道我要的操作的設(shè)備地址,自己的私有硬件信息? Linux內(nèi)核提供了另外一個結(jié)構(gòu)體struct i2c_board_info,程序員根據(jù)這個結(jié)構(gòu)體來進(jìn)行對I2C外設(shè)的硬件分配初始化和注冊,內(nèi)核會根據(jù)i2c_board_info的信息來實現(xiàn)對i2c_client的一系列操作。

問:驅(qū)動如何使用i2c_board_info呢?

Struct i2c_board_info{

Char type[I2C_NAME_SIZE];//用于匹配,最終會賦值給i2c_client的name

Unsigned short flags; //讀寫標(biāo)志

Unsigned short addrd; //設(shè)備地址。最終賦值給i2c_client的addr

Void *platform_data; //裝載自己定義的硬件信息,最終賦值給i2c_client的dev.platform_data

Int irq; //中斷號,最終賦值給i2c_client的irq

}

明確:struct i2c_board_info的分配,初始化和注冊三個步驟必須在平臺代碼中完成,不能以模塊加載的形式來實現(xiàn)! 對struct i2c_board_info的操作本質(zhì)就是間接的在操作i2c_client。

實現(xiàn)在平臺代碼中初始化分配i2c_board_info

  1. Vimarch/arm/mach-s5pv210/mach-cw21.c 在頭文件的后面添加分配i2c_board_info的分配初始化。

Static structi2c_board_info eeprom[] = {I2C_BOARD_INFO(“at24c02”,0x50)};

說明:I2C_BOARD_INFO:用于初始化i2c_board_info的type和addrat24c02:用于匹配,跟i2c_driver的id_table的name匹配,最終會賦值給i2c_client的name。

0x50:設(shè)備地址,最終會賦值給i2c_client.addr。

2.同樣在平臺代碼的初始化函數(shù)中(.init_machine =smdkc110_machine_init),所在函數(shù)smdkc110_machine_init中調(diào)用I2c_register_board_info注冊i2c_board_info信息到內(nèi)核中!i2c_regster_board_info(int busnum, struct i2c_board_info const*info, unsigned n)

函數(shù)功能:注冊分配初始化好的i2c_board_info對象到內(nèi)核中,內(nèi)核根據(jù)這個信息初始化注冊i2c_client;

參數(shù):busnum:i2c外設(shè)所在的I2C總線編號,cw210開發(fā)板的at’24c02通過原理圖可知連接到CPU的第一個I2C總線上,所以這個參數(shù)指定為0,info:執(zhí)行分配初始化的i2_board_info對象數(shù)組(=eeprom)

N:對象數(shù)組的個數(shù)RRAY_SIZE(eeprom)

注意:一旦向內(nèi)核注冊I2c_board_info設(shè)備信息,內(nèi)核在初始化時會根據(jù)此信息幫你分配初始化和注冊一個i2c_client.

2177i2c_register_board_info(0, i2c-devs0, ARRAY_SIZE(i2c_devs0));

2178i2c_register_board_info(1, i2c-devs1, ARRAY_SIZE(i2c_devs1));

2179i2c_register_board_info(2, i2c-devs2, ARRAY_SIZE(i2c_devs2));

2180i2c_register_board_info(5, i2c-devs3, ARRAY_SIZE(i2c_devs5));

2181 //注冊atc24c02的硬件對象i2c_board_info

2182i2c_register_board_info(0, eeprom, ARRAY_SIZE(eeprom));

Struct i2c_driver怎樣使用?

1.分配初始化struct i2c_driver

Struct i2c_driver eeprom_drv = {

.driver = {

.name= “tarena”//不重要

},

.probe = at24c02_probe, //匹配成功調(diào)用

.remove = at24c02, //卸載軟件節(jié)點調(diào)用

.id_table = 其中的name用于匹配

}

2.調(diào)用i2c_add_driver注冊 3.調(diào)用i2c_del_driver卸載。

案例:SMBUS接口作用:I2C設(shè)備驅(qū)動利用SMBUS相關(guān)的函數(shù),能夠?qū)2C設(shè)備驅(qū)動涉及的數(shù)據(jù)信息丟給I2C總線驅(qū)動,然后I2C硬件傳輸!本質(zhì)上就是I2C設(shè)備驅(qū)動和I2C總線驅(qū)動的一個數(shù)據(jù)交互的橋梁!

SMBUS接口說明文檔:內(nèi)核源碼\Documentation\i2c\smbus-protocol找到對應(yīng)的SMBUS接口函數(shù)。

SMBUS接口函數(shù)的使用。

1.找到打開smbus-protol說明文檔 2.打開芯片的時序圖 3.根據(jù)時序圖在smbus-protol文檔中找到對應(yīng)的操作函數(shù) 4.想盡一切辦法看這個函數(shù)的說明或者參考別人的代碼。

//寫數(shù)據(jù)到EEPROM中

// addr,data

App:ioctl---àaddr,data

I2C設(shè)備驅(qū)動:at24c02_i2c_write---à設(shè)備地址,addr,data

內(nèi)核:SMBUS--à設(shè)備地址,addr,data

總線驅(qū)動--àSTART> 設(shè)備地址寫ACK addr ACK data ACK STOP

1.使用SMBUS接口將數(shù)據(jù)(地址、數(shù)據(jù)、設(shè)備地址(G_CLIENT->addr)),丟給I2C總線驅(qū)動,啟動I2C總線驅(qū)動的硬件傳輸。

1.1 打開SMUBS文檔:內(nèi)核源碼\Documentation\i2c\smbus-protocol找到對應(yīng)的SMBUS接口函數(shù)。

1.2打開芯片操作時序圖

1.3根據(jù)時序圖找到對應(yīng)的SMBUS操作函數(shù)

1.4將ADDR,data和匹配成功的i2c_client通過函數(shù)丟給I2C總線驅(qū)動然后啟動I2C總線的硬件傳輸

i2c_smbus_write_byte_data(g_client, addr, data);

從EEPROM讀取數(shù)據(jù)

// addr

// app:ioctlà data

I2C設(shè)備驅(qū)動:at24c02_i2c_readà data 設(shè)備地組織:addr

內(nèi)核:SMBUE—》data設(shè)備地址,addr

總線驅(qū)動-àSTART設(shè)備地址寫ACK addr ACK START 設(shè)備地址 讀ACK返回數(shù)據(jù)data

NOACK STOP -àdata


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11207

    瀏覽量

    208716
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1477

    瀏覽量

    123054

原文標(biāo)題:Linux驅(qū)動之I2C總線

文章出處:【微信號:weixin21ic,微信公眾號:21ic電子網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    i2c總線ppt(I2C總線器件應(yīng)用)

    I2C總線器件應(yīng)用第一節(jié) I2C總線器件應(yīng)用概述I2C總線工作原理
    發(fā)表于 08-13 17:34 ?0次下載

    基于I2C總線的EEPROM驅(qū)動程序

     I2C總線是由Philips公司開發(fā)的用于器件之間連接的2線式雙向同步串行總線。Linux內(nèi)核中針對
    發(fā)表于 12-07 13:58 ?55次下載

    I2C總線Linux系統(tǒng)中的驅(qū)動設(shè)計

    介紹I2C總線的基本概念和工作原理,敘述I2C總線擴(kuò)展器件ZLG7290的功能特點。在以S3C2410為微控制器,ZLG7290為
    發(fā)表于 12-29 16:52 ?40次下載

    什么是i2c總線

    什么是i2c總線  下載請點擊: i2c總線協(xié)議中文版 
    發(fā)表于 11-05 09:26 ?2903次閱讀

    I2C總線驅(qū)動程序的實現(xiàn)

    I2C總線驅(qū)動程序的實現(xiàn) I2C 驅(qū)動程序的簡介本驅(qū)動程序為標(biāo)準(zhǔn)的51 系列CPU 編寫,讓C
    發(fā)表于 09-26 17:25 ?5698次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b><b class='flag-5'>驅(qū)動</b>程序的實現(xiàn)

    基于CPLD的I2C總線接口設(shè)計

    在電路設(shè)計中,I2C總線是比較常用的兩線式串行通信方式,大多數(shù)的CPU都擅長于并口操作,不具備直接操作I2C總線接口的能力。為了使不具備I2C
    發(fā)表于 02-12 16:11 ?95次下載
    基于CPLD的<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>接口設(shè)計

    I2C總線及EEPROM的Linux驅(qū)動程序的設(shè)計

    筆者在開發(fā)基于MPC8250的嵌入式Linux系統(tǒng)的過程中發(fā)現(xiàn)I2C總線在嵌入式系統(tǒng)中應(yīng)用廣泛,I2C總線控制器的類型比較多,對系統(tǒng)提供的操
    發(fā)表于 01-06 16:35 ?3537次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>及EEPROM的<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動</b>程序的設(shè)計

    I2C總線驅(qū)動程序

    I2C總線驅(qū)動程序。
    發(fā)表于 05-20 11:16 ?15次下載

    Linux設(shè)備驅(qū)動開發(fā)詳解》第15章、LinuxI2C核心、總線與設(shè)備驅(qū)動

    Linux設(shè)備驅(qū)動開發(fā)詳解》第15章、LinuxI2C核心、總線與設(shè)備驅(qū)動
    發(fā)表于 10-27 11:19 ?8次下載
    《<b class='flag-5'>Linux</b>設(shè)備<b class='flag-5'>驅(qū)動</b>開發(fā)詳解》第15章、<b class='flag-5'>Linux</b>的<b class='flag-5'>I2C</b>核心、<b class='flag-5'>總線</b>與設(shè)備<b class='flag-5'>驅(qū)動</b>

    I2C總線及EEPROM的Linux驅(qū)動程序的設(shè)計

    方式簡單、器件封裝形式小、通信速率較高等優(yōu)點。在主從通信中,可有多個I2C總線器件同時接到I2C總線上,通過地址來識別通信對象。筆者在開發(fā)基于MPC8250的嵌入式
    發(fā)表于 11-30 18:05 ?594次閱讀
     <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>及EEPROM的<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動</b>程序的設(shè)計

    基于嵌入式Linux下的I2C設(shè)備驅(qū)動的總體思路與框架設(shè)計

    由于I2C總線的通用性,Linux作為一款優(yōu)秀的嵌入式操作系統(tǒng),也必須要對其要有很好的支持。在Linux內(nèi)核源碼中對I2C
    發(fā)表于 08-20 09:04 ?3722次閱讀
    基于嵌入式<b class='flag-5'>Linux</b>下的<b class='flag-5'>I2C</b>設(shè)備<b class='flag-5'>驅(qū)動</b>的總體思路與框架設(shè)計

    LinuxI2C驅(qū)動架構(gòu)

    1.???? LinuxI2C驅(qū)動架構(gòu)LinuxI2C總線
    發(fā)表于 04-02 14:38 ?660次閱讀

    Linux驅(qū)動中的I2C驅(qū)動架構(gòu)詳細(xì)分析

    其實I2C接口非常的簡單,即使用51單片機(jī)的gpio來模擬I2C,編寫一個e2prom或者其他I2C接口的驅(qū)動程序,也不是什么難事,幾百行代
    發(fā)表于 08-01 17:35 ?3次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動</b>中的<b class='flag-5'>I2C</b><b class='flag-5'>驅(qū)動</b>架構(gòu)詳細(xì)<b class='flag-5'>分析</b>

    linux移植MPU6050的I2C驅(qū)動

    有MPU6050的例程,測試后很好用,如下圖(夢幻聯(lián)動一下:樹莓派PICO+freeRTOS)因為pico上有現(xiàn)成的能用的例程,所以改一改之后直接移植到linux上首先介紹一下linux下的I2C框架①、
    發(fā)表于 12-06 14:21 ?10次下載
    <b class='flag-5'>linux</b>移植MPU6050的<b class='flag-5'>I2C</b><b class='flag-5'>驅(qū)動</b>

    Linux I2C驅(qū)動入門知識科普

    I2C 總線驅(qū)動, I2C總線驅(qū)動就是SOC的 I2C
    的頭像 發(fā)表于 12-29 13:59 ?1626次閱讀