I2C驅動(2) 讀寫eeprom

2021-08-19 21:15:46 字數 2260 閱讀 9225

#include #include #include #include #include #include #include #include #include static unsigned short ignore      = ;

static unsigned short normal_addr = ; /* 位址值是7位 */

/* 改為0x60的話, 由於不存在裝置位址為0x60的裝置, 所以at24cxx_detect不被呼叫 */

static unsigned short force_addr = ;

static unsigned short * forces = ;

static struct i2c_client_address_data addr_data = ;

static struct i2c_driver at24cxx_driver;

static int major;

static struct class *cls;

struct i2c_client *at24cxx_client;

static ssize_t at24cxx_read(struct file *file, char __user *buf, size_t size, loff_t * offset)

else

return -eio;

}static ssize_t at24cxx_write(struct file *file, const char __user *buf, size_t size, loff_t *offset)

static struct file_operations at24cxx_fops = ;

static int at24cxx_detect(struct i2c_adapter *adapter, int address, int kind)

static int at24cxx_attach(struct i2c_adapter *adapter)

static int at24cxx_detach(struct i2c_client *client)

/* 1. 分配乙個i2c_driver結構體 */

/* 2. 設定i2c_driver結構體 */

static struct i2c_driver at24cxx_driver = ,

.attach_adapter = at24cxx_attach,

.detach_client = at24cxx_detach,

};static int at24cxx_init(void)

static void at24cxx_exit(void)

module_init(at24cxx_init);

module_exit(at24cxx_exit);

module_license("gpl");

#include #include #include #include #include #include /* i2c_test r addr

* i2c_test w addr val

*/void print_usage(char *file)

int main(int argc, char **argv)

fd = open("/dev/at24cxx", o_rdwr);

if (fd < 0)

if (strcmp(argv[1], "r") == 0)

else if (strcmp(argv[1], "w") == 0)

else

return 0;

}

i2c裝置驅動流程:

1、構造i2c_driver

static struct i2c_driver at24cxx_driver = ,

.attach_adapter = at24cxx_attach,

.detach_client  = at24cxx_detach,

2、註冊i2c_add_driver(&at24cxx_driver)

3、使用i2c_driver->attach_adapter發出裝置位址訊號,看裝置是否響應ack

4、若響應,呼叫at24cxx_detect,構造i2c_client,註冊字元裝置at24cxx

5、讀寫i2c裝置

a、構造i2c_msg

b、使用i2c_transfer發出i2c_msg

6、detach_client做清理工作

I2C外掛程式eeprom的讀寫

i2c簡介 i2c匯流排通訊是一種通訊協,用於連線微控制器及其外圍裝置,由兩根線組成,時鐘線sda和資料線scl。如圖所示,外掛程式裝置接到相應的線上就可以被i2c識別到,另外關於scl,sda以怎麼樣的波形去傳送訊息,以及裝置的應答波紋就不在詳細介紹了,這個對於不是直接寫驅動的開發人員來說沒有必要...

I2C讀寫問題

a.完全不能進行讀寫 1 通訊協議不正確 有很多的i2c裝置,並不支援所有的i2c協議,同時也不是乙個比較標準的i2c裝置 軟體的通訊時序不正確。2 i2c裝置位址不正確 有很多的i2c裝置的位址是可以通過硬體設定的 也有器件資料提供的資料是錯誤的。3 i2c通訊線上沒有加上拉電阻 由於i2c的從裝...

linux的I2C驅動 讀寫操作

接下來開始整體的介紹i2c,主要參考 linux裝置驅動開發詳解 1 i2c核心 i2c核心提供了i2c匯流排驅動和裝置驅動的註冊 登出方法,i2c通訊方法。2 i2c匯流排驅動 i2c匯流排驅動是對i2c硬體體系結構中介面卡的實現。i2c匯流排驅動主要包含i2c介面卡資料結構i2c adapter...