日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

本文將介紹Linux中AT24C02驅(qū)動(dòng)。AT24C02是一種EEPROM,使用I2C接口來(lái)訪問(wèn)。

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

目標(biāo)平臺(tái):TQ2440

CPU:s3c2440

內(nèi)核版本:2.6.32

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

1. 模塊注冊(cè)和注銷


staticint__initat24_init(void)

{

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

io_limit=rounddown_pow_of_two(io_limit);

returni2c_add_driver(&at24_driver);/*i2c驅(qū)動(dòng)注冊(cè)*/

}

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");


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

首先對(duì)io_limit向下圓整到最近的2的冪,接著直接調(diào)用了i2c_add_driver來(lái)注冊(cè)一個(gè)i2c驅(qū)動(dòng)。

注銷函數(shù)更簡(jiǎn)單。注銷之前注冊(cè)的i2c驅(qū)動(dòng)。


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

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


staticstructi2c_driverat24_driver={

.driver={

.name="at24",

.owner=THIS_MODULE,

},

.probe=at24_probe,

.remove=__devexit_p(at24_remove),

.id_table=at24_ids,

};

驅(qū)動(dòng)提供的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)體成員的第一個(gè)參數(shù)即為name,表示設(shè)備的名字。第二個(gè)參數(shù),在該驅(qū)動(dòng)中,為一個(gè)幻術(shù)(magic),通過(guò)AT24_DEVICE_MAGIC宏計(jì)算。

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


#defineAT24_SIZE_BYTELEN5

#defineAT24_SIZE_FLAGS8

/*createnon-zeromagicvalueforgiveneepromparameters*/

#defineAT24_DEVICE_MAGIC(_len,_flags)

((1<

<

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



3.probe函數(shù)

當(dāng)i2c總線完成設(shè)備驅(qū)動(dòng)綁定后,就會(huì)調(diào)用probe方法了。具體看下這個(gè)函數(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;

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

if(client->dev.platform_data){

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

}else{

/*沒(méi)有板級(jí)設(shè)備信息,也沒(méi)有driver_data,直接出錯(cuò)*/

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ā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

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

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

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

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

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

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

         之前在提起自動(dòng)化或是智能化時(shí),人們會(huì)不自覺(jué)的想到工業(yè)生產(chǎn),這是因?yàn)樽詣?dòng)化這個(gè)字眼進(jìn)入中國(guó),確實(shí)是以工業(yè)

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

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

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

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

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

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

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

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

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

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

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

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

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