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

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

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

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

目標平臺:TQ2440

CPU:s3c2440

內核版本:2.6.32

本文所有的代碼均位于內核源碼: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驅動注冊*/

}

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ù)為驅動模塊參數(shù),可由用戶設置,默認值為128字節(jié)。

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

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


2. 設備驅動綁定

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


staticstructi2c_driverat24_driver={

.driver={

.name="at24",

.owner=THIS_MODULE,

},

.probe=at24_probe,

.remove=__devexit_p(at24_remove),

.id_table=at24_ids,

};

驅動提供的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*/}

};


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

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


#defineAT24_SIZE_BYTELEN5

#defineAT24_SIZE_FLAGS8

/*createnon-zeromagicvalueforgiveneepromparameters*/

#defineAT24_DEVICE_MAGIC(_len,_flags)

((1<

<

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



3.probe函數(shù)

當i2c總線完成設備驅動綁定后,就會調用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;

/*獲取板級設備信息*/

if(client->dev.platform_data){

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

}else{

/*沒有板級設備信息,也沒有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

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

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

關鍵字: 單片機 LCD 醫(yī)療設備 eeprom

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

關鍵字: eeprom 串行通信 i2c總線

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

關鍵字: s3c2440 視頻采集 usb攝像頭

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

關鍵字: 嵌入式 Linux s3c2440 視頻采集

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

關鍵字: IPv6 s3c2440 x86 架構

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

關鍵字: boa nrf24l01 s3c2440 智能家居

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

關鍵字: eeprom RFID 物聯(lián)網

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

關鍵字: eeprom RFID 電源資訊

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

關鍵字: i2c接口 led驅動器 電源技術解析 led彩燈

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

關鍵字: 51單片機 eeprom
關閉