#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...