女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]本文將介紹Linux中AT24C02驅(qū)動。AT24C02是一種EEPROM,使用I2C接口來訪問。在開發(fā)板中,使用I2C控制器0和AT24C02連接,這里就不給出原理圖了,如需要,可以搜索TQ2440開發(fā)板的原理圖。目標(biāo)平臺:TQ2440CPU:s3c2440內(nèi)

本文將介紹Linux中AT24C02驅(qū)動。AT24C02是一種EEPROM,使用I2C接口來訪問。

在開發(fā)板中,使用I2C控制器0和AT24C02連接,這里就不給出原理圖了,如需要,可以搜索TQ2440開發(fā)板的原理圖。

目標(biāo)平臺:TQ2440

CPU:s3c2440

內(nèi)核版本:2.6.32

本文所有的代碼均位于內(nèi)核源碼:linux/drivers/misc/eeprom/at24.c中。

1. 模塊注冊和注銷


staticint__initat24_init(void)

{

/*將io_limit向下圓整到最近的2的冪*/

io_limit=rounddown_pow_of_two(io_limit);

returni2c_add_driver(&at24_driver);/*i2c驅(qū)動注冊*/

}

module_init(at24_init);

staticvoid__exitat24_exit(void)

{

i2c_del_driver(&at24_driver);

}

module_exit(at24_exit);

MODULE_DESCRIPTION("DriverformostI2CEEPROMs");

MODULE_AUTHOR("DavidBrownellandWolframSang");

MODULE_LICENSE("GPL");


注冊函數(shù)很簡單。io_limit為寫入時允許一次寫入的最大字節(jié),該參數(shù)為驅(qū)動模塊參數(shù),可由用戶設(shè)置,默認(rèn)值為128字節(jié)。

首先對io_limit向下圓整到最近的2的冪,接著直接調(diào)用了i2c_add_driver來注冊一個i2c驅(qū)動。

注銷函數(shù)更簡單。注銷之前注冊的i2c驅(qū)動。


2. 設(shè)備驅(qū)動綁定

熟悉I2C驅(qū)動架構(gòu)的可能會知道I2C驅(qū)動的match函數(shù),該函數(shù)將使用id表(struct i2c_device_id)和i2c設(shè)備(struct i2c_client)進(jìn)行匹配,判斷是否有name字段相同,如果相同則匹配完成,即可完成設(shè)備和驅(qū)動的綁定,接著便會調(diào)用驅(qū)動提供的probe方法。我們來看下驅(qū)動提供的id表。


staticstructi2c_driverat24_driver={

.driver={

.name="at24",

.owner=THIS_MODULE,

},

.probe=at24_probe,

.remove=__devexit_p(at24_remove),

.id_table=at24_ids,

};

驅(qū)動提供的id為at24_ids,如下:


staticconststructi2c_device_idat24_ids[]={

/*needs8addressesasA0-A2areignored*/

{"24c00",AT24_DEVICE_MAGIC(128/8,AT24_FLAG_TAKE8ADDR)},

/*oldvariantscan'tbehandledwiththisgenericentry!*/

{"24c01",AT24_DEVICE_MAGIC(1024/8,0)},

{"24c02",AT24_DEVICE_MAGIC(2048/8,0)},

/*spdisa24c02inmemoryDIMMs*/

{"spd",AT24_DEVICE_MAGIC(2048/8,

AT24_FLAG_READONLY|AT24_FLAG_IRUGO)},

{"24c04",AT24_DEVICE_MAGIC(4096/8,0)},

/*24rf08quirkishandledati2c-core*/

{"24c08",AT24_DEVICE_MAGIC(8192/8,0)},

{"24c16",AT24_DEVICE_MAGIC(16384/8,0)},

{"24c32",AT24_DEVICE_MAGIC(32768/8,AT24_FLAG_ADDR16)},

{"24c64",AT24_DEVICE_MAGIC(65536/8,AT24_FLAG_ADDR16)},

{"24c128",AT24_DEVICE_MAGIC(131072/8,AT24_FLAG_ADDR16)},

{"24c256",AT24_DEVICE_MAGIC(262144/8,AT24_FLAG_ADDR16)},

{"24c512",AT24_DEVICE_MAGIC(524288/8,AT24_FLAG_ADDR16)},

{"24c1024",AT24_DEVICE_MAGIC(1048576/8,AT24_FLAG_ADDR16)},

{"at24",0},

{/*ENDOFLIST*/}

};


結(jié)構(gòu)體成員的第一個參數(shù)即為name,表示設(shè)備的名字。第二個參數(shù),在該驅(qū)動中,為一個幻術(shù)(magic),通過AT24_DEVICE_MAGIC宏計算。

宏第一個參數(shù)為eeprom的大小,第二參數(shù)為一些標(biāo)志位。我們看下這個宏:


#defineAT24_SIZE_BYTELEN5

#defineAT24_SIZE_FLAGS8

/*createnon-zeromagicvalueforgiveneepromparameters*/

#defineAT24_DEVICE_MAGIC(_len,_flags)

((1<

<

在這個表中,針對這里講解的24c02,其大小為256字節(jié),標(biāo)志位為空。



3.probe函數(shù)

當(dāng)i2c總線完成設(shè)備驅(qū)動綁定后,就會調(diào)用probe方法了。具體看下這個函數(shù)。


staticintat24_probe(structi2c_client*client,conststructi2c_device_id*id)

{

structat24_platform_datachip;

boolwritable;

booluse_smbus=false;

structat24_data*at24;

interr;

unsignedi,num_addresses;

kernel_ulong_tmagic;

/*獲取板級設(shè)備信息*/

if(client->dev.platform_data){

chip=*(structat24_platform_data*)client->dev.platform_data;

}else{

/*沒有板級設(shè)備信息,也沒有driver_data,直接出錯*/

if(!id->driver_data){

err=-ENODEV;

gotoerr_out;

}

magic=id->driver_data;

chip.byte_len=BIT(magic&AT24_BITMASK(AT24_SIZE_BYTELEN));

magic>>=AT24_SIZE_BYTELEN;

chip.flags=magic&AT24_BITMASK(AT24_SIZE_FLAGS);

/*

*Thisisslow,butwecan'tknowalleeproms,sowebetter

*playsafe.Specifyingcustomeeprom-typesviaplatform_data

*isrecommendedanyhow.

*/

chip.page_size=1;

chip.setup=NULL;

chip.context=NULL;

}

/*檢查參數(shù),

byte_len和page_size必須為2的冪,不是則打印警告*/

if(!is_power_of_2(chip.byte_len))

dev_warn(&client->dev,

"byte_lenlookssuspicious(nopowerof2)!n");

if(!is_power_of_2(chip.page_size))

dev_warn(&client->dev,

"page_sizelookssuspicious(nopowerof2)!n");

/* Use I2C operations unless we're stuck with SMBus e

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

P430顱內(nèi)出血檢測設(shè)備的研制策略 1 引言 在中國有許多因創(chuàng)傷性顱腦損傷的患者急需搶救,但相當(dāng)一部分顱內(nèi)出血患者因未能及時診斷,延誤了搶救和治療時機(jī).因而出現(xiàn)腦血腫或腦疝后壓

關(guān)鍵字: 單片機(jī) LCD 醫(yī)療設(shè)備 eeprom

1 前言   近年來,數(shù)字化電視技術(shù)迅猛發(fā)展,特別是遙控系統(tǒng)的面市,各廠商在電視機(jī)中加人微處理器(MCU),各種人工智能化彩電完全替代了老式電視手動(機(jī)械式)控制和記憶方式。隨著電視專用

關(guān)鍵字: eeprom 串行通信 i2c總線

  本文根據(jù)網(wǎng)絡(luò)視頻采集的需要,將網(wǎng)絡(luò)傳輸與視頻采集相結(jié)合,設(shè)計了以S3C2440為核心的USB攝像頭視頻采集和嵌入式Linux系統(tǒng)下的視頻服務(wù)器,從而實現(xiàn)了遠(yuǎn)程網(wǎng)絡(luò)視頻信息采集。   

關(guān)鍵字: s3c2440 視頻采集 usb攝像頭

         之前在提起自動化或是智能化時,人們會不自覺的想到工業(yè)生產(chǎn),這是因為自動化這個字眼進(jìn)入中國,確實是以工業(yè)

關(guān)鍵字: 嵌入式 Linux s3c2440 視頻采集

  引言   隨著科技的不斷發(fā)展,以數(shù)據(jù)業(yè)務(wù)為主的固定寬帶無線接入技術(shù)發(fā)展已經(jīng)很成熟,而移動寬帶無線通信技術(shù)還并沒有得到廣泛的應(yīng)用。由于移動寬帶無線接入系統(tǒng)需要解決帶寬、移動性和覆蓋范圍

關(guān)鍵字: IPv6 s3c2440 x86 架構(gòu)

  1 引言   人們生活水平的提高以及科技的進(jìn)步,特別是計算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)和通信技術(shù)的發(fā)展,智能家居將慢慢成為未來家居生活的發(fā)展方向。1984年在美國誕生了世界上第一座智能家居建筑,

關(guān)鍵字: boa nrf24l01 s3c2440 智能家居

物聯(lián)網(wǎng)(IoT)沒有表現(xiàn)出短期流行的跡象。每一新應(yīng)用都添加許多端點到互聯(lián)網(wǎng)。不同的無線技術(shù)激增,在大部分射頻(RF)頻譜運行,就是最好的證明。 工程師在對廣泛的IoT端點進(jìn)行調(diào)

關(guān)鍵字: eeprom RFID 物聯(lián)網(wǎng)

通過在單個器件中集成EEPROM存儲和RFID聯(lián)接,工程師可以設(shè)計IoT端點,使其可存儲工作數(shù)據(jù)并與服務(wù)工程師通信,即使電源故障或完全斷電。 這呈現(xiàn)了服務(wù)和維護(hù)的全新范例,并且完全適用于IoT。

關(guān)鍵字: eeprom RFID 電源資訊

隨著科學(xué)技術(shù)的發(fā)展,LED技術(shù)也在不斷發(fā)展,為我們的生活帶來各種便利,為我們提供各種各樣生活信息,造福著我們?nèi)祟?。傳感器作為信號采集和機(jī)電轉(zhuǎn)換的器件,其機(jī)電技術(shù)已相當(dāng)成熟,近幾年來,傳感器技術(shù)向小型化、智能化、多功能化、...

關(guān)鍵字: i2c接口 led驅(qū)動器 電源技術(shù)解析 led彩燈

24C02:256 個字節(jié)的 EEPROM。一般情況下,EEPROM 擁有 30 萬到 100 萬次的壽命?;?I2C 通信協(xié)議的器件。I2C 是一個通信協(xié)議,它擁有嚴(yán)密的通信時序邏輯要求,而EEPROM 是一個器件,...

關(guān)鍵字: 51單片機(jī) eeprom
關(guān)閉