最近需要操作24c02,封裝了一下函式方便以後操作。
原始碼:
#include #include #include #include #include #include #include #include #define i2c_default_timeout 1
#define i2c_default_retry 3
/* * fd : 檔案描述符
* timeout : 傳送超時時間
* retry : 重**送次數
*///重**送次數可以設多一點,在除錯的時候,只設定了一次,導致有時候傳送會失敗。
int i2c_set(int fd, unsigned int timeout, unsigned int retry)
/* * fd : 檔案描述符
* addr : i2c的裝置位址
* reg : 暫存器位址
* val : 要寫的資料
*/int i2c_byte_write(int fd, unsigned char addr, unsigned char reg, unsigned char val)
/*
* fd : 檔案描述符
* addr : i2c的裝置位址
* reg : 暫存器位址
* val : 要寫的資料
* len : 資料長度
* 24c02以8位元組為1個page,如果在乙個page裡面寫,寫的位元組長度超過這個page的末尾,
* 就會從page的開頭寫,覆蓋開頭的內容
*/int i2c_nbytes_write(int fd, unsigned char addr, unsigned char reg, unsigned char *val, int len)
messages.buf[0] = reg;
for (i = 0; i < len; i++)
ret = ioctl(fd, i2c_rdwr, (unsigned long)&packets);//讀出來
if (ret < 0)
err:
free(messages.buf);
return ret;
}/*
* fd : 檔案描述符
* addr : i2c的裝置位址
* val : 儲存讀取資料
*/int i2c_byte_read(int fd, unsigned char addr, unsigned char *val)
/* * fd : 檔案描述符
* addr : i2c的裝置位址
* reg : 暫存器位址
* val : 儲存讀取的資料
* len : 讀取資料的長度
* 描述 :讀取達到eeprom的末尾時,會讀取最開頭的位元組
*/int i2c_nbytes_read(int fd, unsigned char addr, unsigned char reg, unsigned char *val, int len)
tony liu
2016-9-23, shenzhen
Linux I2C裝置驅動學習
一 i2c 簡介 1 i2c簡介 a 優點 i2c匯流排僅用兩根訊號線 scl sda 就實現了裝置之間的資料互動,極大簡化了對硬體資源和pcb板佈線空間的占用 b 用途 eeprom 實時鐘 小型lcd等裝置與cpu的介面中 2 i2c驅動體系 i2c框架 通用 適應性強 i2c核心 i2c匯流排...
linux I2C裝置驅動例項 EEPROM
開發板 優龍公司的fs2410 核心版本 linux2.6.28.6 開發環境 ubuntu12.04 交叉編譯器 arm none linux gnueabi gcc 4.3.2 目標 在fs2410上驅動eeprom,實現應用層對eeprom的讀寫操作 一 linux2.6.28.6 系統上 i...
Linux I2C裝置驅動編寫(一)
在linux驅動中i2c系統中主要包含以下幾個成員 i2c adapter 即i2c介面卡 i2c driver 某個i2c裝置的裝置驅動,可以以driver理解。i2c client 某個i2c裝置的裝置宣告,可以以device理解。是cpu整合或外接的i2c介面卡,用來控制各種i2c從裝置,其驅...