1. 程式人生 > >Linux應用層讀寫i2c從裝置(eeprom)

Linux應用層讀寫i2c從裝置(eeprom)

/*****************************************************************************
  i2c讀函式,引數1:從裝置地址,引數2:暫存器地址,引數3:讀取資料緩衝區,引數4:讀取資料大小
******************************************************************************/
unsigned char _i2c_read(unsigned char device_addr, unsigned char sub_addr, unsigned char *buff, int
ByteNo) { int fd, ret; unsigned char buftmp[32]; struct i2c_rdwr_ioctl_data i2c_data; const char *i2c_dev = "/dev/i2c-0"; //---------------------------------- device_addr >>= 1; //init fd = open(i2c_dev, O_RDWR); if (fd<0) { printf("not have /dev/i2c-0 t\r\n"
); return -1; } i2c_data.nmsgs = 2; i2c_data.msgs = (struct i2c_msg *)malloc(i2c_data.nmsgs *sizeof(struct i2c_msg)); if (i2c_data.msgs == NULL) { printf("malloc error"); close(fd); return -1; } ioctl(fd, I2C_TIMEOUT, 1); ioctl(fd, I2C_RETRIES, 2
); //write reg memset(buftmp, 0, 32); buftmp[0] = sub_addr; i2c_data.msgs[0].len = 1; i2c_data.msgs[0].addr = device_addr; i2c_data.msgs[0].flags = 0; // 0: write 1:read i2c_data.msgs[0].buf = buftmp; //read data i2c_data.msgs[1].len = ByteNo; i2c_data.msgs[1].addr = device_addr; i2c_data.msgs[1].flags = 1; // 0: write 1:read i2c_data.msgs[1].buf = buff; ret = ioctl(fd, I2C_RDWR, (unsigned long)&i2c_data); if (ret < 0) { printf("read data %x %x error\r\n", device_addr, sub_addr); close(fd); free(i2c_data.msgs); return 1; } free(i2c_data.msgs); close(fd); #if 1 int i; printf("i2c__read 0x%02x:",buftmp[0]); for (i = 0; i < ByteNo; i++) { printf(" 0x%02x",buff[i]); } printf("\n"); #endif return 0; } /***************************************************************************** i2c寫函式,引數1:從裝置地址,引數2:暫存器地址,引數3:要寫入的資料緩衝區,引數4:寫入資料大小 ******************************************************************************/ unsigned char _i2c_write(unsigned char device_addr, unsigned char sub_addr, unsigned char *buff, int ByteNo) { int fd, ret; unsigned char buftmp[32]; struct i2c_rdwr_ioctl_data i2c_data; const char *i2c_dev = "/dev/i2c-0"; //---------------------------------- device_addr >>= 1; //init fd = open(i2c_dev, O_RDWR); if (fd < 0) { printf("not have /dev/i2c-0\r\n"); return -1; } i2c_data.nmsgs = 1; i2c_data.msgs = (struct i2c_msg *)malloc(i2c_data.nmsgs *sizeof(struct i2c_msg)); if (i2c_data.msgs == NULL) { printf("malloc error"); close(fd); return -1; } ioctl(fd, I2C_TIMEOUT, 1); ioctl(fd, I2C_RETRIES, 2); memset(buftmp, 0, 32); buftmp[0] = sub_addr; memcpy(buftmp + 1, buff, ByteNo); i2c_data.msgs[0].len = ByteNo + 1;; i2c_data.msgs[0].addr = device_addr; i2c_data.msgs[0].flags = 0; // 0: write 1:read i2c_data.msgs[0].buf = buftmp; ret = ioctl(fd, I2C_RDWR, (unsigned long)&i2c_data); if (ret < 0) { printf("write reg %x %x error\r\n", device_addr, sub_addr); close(fd); free(i2c_data.msgs); return 1; } free(i2c_data.msgs); close(fd); #if 1 int i; printf("i2c_write 0x%02x:",buftmp[0]); for(i=0; i<ByteNo; i++) { printf(" 0x%02x",buftmp[1+i]); } printf("\n"); #endif _alpu_delay_ms(100); return 0; } /***************************************************************************** 延時函式(ms) ******************************************************************************/ void _alpu_delay_ms(unsigned int i) { usleep(2000 * i); }

相關推薦

Linux應用i2c裝置eeprom

/***************************************************************************** i2c讀函式,引數1:從裝置地址,引數2:暫存器地址,引數3:讀取資料緩衝區,引數4:讀取資料大小

linux應用之vim的安裝與配置centos

utf8 power scroll pbo gb2312 nco pla red vma 1.vim的安裝 #yum search vim //查看vim相關軟件信息 #yum install -y vim* //在線安裝vim 2.vim的配置 (1)~/.vimi

Linux系統中的ISCSI-共享硬碟裝置企業級

一.共享硬碟裝置 服務端: 1.安裝共享策略編輯器 yum install targetcli -y 2.劃分/dev/vdb1分割槽 fdisk /dev/vdb ##分配vdb1 1G ,修改uid為8e partprobe pvcreate /dev

安裝Centos7 、 Mysql8 叢集,實現分離 高可用-- 主從設定

零、寫在前面    為了嘗試新技術和業務需要,因此打算搞一套這樣的環境玩兒一下    作業系統及資料庫的安裝請見前兩篇一、理論依據    不再贅述我的硬體規劃等細節    這次僅用到兩臺虛擬機器,一主一

安裝Centos7 、 Mysql8 叢集,實現分離 高可用-- MyCat分離

零、說在前面    先吐個槽,這點東西折騰了我四五天,最後還是一條告警拯救了我,下面進入正文    看了幾個MySQL的讀寫分離的中介軟體,貌似這個是比較流行的一個,雖然我不是BAT的粉絲,但是有好用的

檔案工具簡單實現之java的UI介面視覺化畫圖/製作

現在和大家介紹下,我們簡單的介面工具開發,使用者選擇檔案,讀出部分想要檔案內容,滑鼠在大輸入框點選某一行就會顯示在其他輸入框中,然後在其他輸入框修改後內容,點寫入按鈕即可修改並顯示到大輸入框中,且原檔案對應剛剛選的改行內容;大概的介面如下,網路現在原因不能上傳圖片:選擇檔案按

C/C++ 關於如何ini配置檔案 小結

讀取 讀取字元   DWORD GetPrivateProfileString(   LPCTSTR lpAppName,        // INI檔案中的一個欄位名[節名]可以有很多個節名   LPCTSTR lpKeyName,        // lpAppName 下的一個鍵名,也就是裡面具體

JavaCSV格式檔案opencsv

一,讀取CSV格式檔案: import java.io.File; import java.io.FileReader; import java.util.List; import au.com.bytecode.opencsv.CSVReader; public c

安裝Centos7 、 Mysql8 叢集,實現分離 高可用-- 資料庫安裝篇

零、寫在前面    為了嘗試新技術和業務需要,因此打算搞一套這樣的環境玩兒一下    伺服器的安裝請見上一篇一、硬體規劃    我用的是自己的本機(8核、16G),劃分出三臺虛擬機器(一主兩從--MyS

安裝Centos7 、 Mysql8 叢集,實現分離 高可用-- 作業系統安裝篇

零、寫在前面    為了嘗試新技術和業務需要,因此打算搞一套這樣的環境玩兒一下    我的虛擬機器環境是VMWare12    這是第一篇,Centos7系統的安裝篇一、硬體規劃    我用的是自己的本

12-JavaCSV格式檔案opencsv

maven依賴 <!-- https://mvnrepository.com/artifact/net.sourceforge.javacsv/javacsv --> <de

IOS iPhone 開發中的檔案及資料儲存

 資料的儲存無疑是軟體開發中的重要課題。本文給初學者介紹下iphone開發中常見的檔案讀寫,當然,我也是初學者~ iOS的檔案儲存採用的是“沙箱機制”,也就是應用程式只能訪問自己的檔案目錄,每個應用程式的資料是獨立的,就像一個一個的沙箱一樣。這種管理方法比windows和原

資料庫鎖的實現C++

一、基本概念 在資料庫中,對某資料的兩個基本操作為寫和讀,分佈有兩種鎖控制:排它鎖(X鎖)、共享鎖(S鎖)。 排它鎖(x鎖):若事務T對資料D加X鎖,則其它任何事務都不能再對D加任何型別的鎖,直至T釋放D上的X鎖;                  一般要求在修改資料前要向

spring MVC、mybatis配置分離,ReplicationDriver轉載

讀寫 就是 actor 只讀 完成後 方法 -o pass 執行 環境: 3臺數據庫機器,一個master,二臺slave,分別為slave1,slave2 2.要實現的目標: ①使數據寫入到master ②讀數據時,從slave1和s

Android平臺i2c裝置開發筆記二

二、 使用JNI在應用程式框架層新增服務訪問介面        APP應用不能直接訪問HAL層,需要JNI層訪問HAL模組並向上提供API介面。可以直接提供介面,但建議最好使用服務的方式提供訪問。        我們先看JNI如何訪問剛才的HAL模組。        進入原

Linux下直接物理地址內存

ann erro 分頁 .... gpio 細心 key 單位 開發 虛擬 轉 物理地址 virt_to_phys( *addr );物理 轉 虛擬地址 phys_to_virt( *addr ); 如: unsigned long pProtectVA;

EEPROM學習筆記與I2C總線

一點 後來 並不是 完數 cal 效應 計算 spi 速度慢 無論任何電子產品都會涉及到數據的產生與數據的保存,這個數據可能並不是用來長久保存,只是在運行程序才會用到,有些數據體量較大對於獲取時效性並不太強,各種各樣的數據也就有不同的存儲載體,這次在EEPR

windows NLB實現MSSQL分離--數據庫集群負載均衡

sql AC 安裝數據庫 track esp 清華 創建 schema brush 主從模式,幾乎大部分出名的數據庫都支持的一種集群模式。 當Web站點的訪問量上去之後,很多站點,選擇讀寫分離,減輕主數據庫的的壓力。當然,一主多從也可以作用多個功能,比如備份。這裏主要演示如

Linux:使用鎖使線程同步

解釋 -s write des 返回值 沒有 enter red bubuko 基礎與控制原語 讀寫鎖 與互斥量類似,但讀寫鎖允許更高的並行性。其特性為:寫獨占,讀共享。 讀寫鎖狀態: 一把讀寫鎖具備三種狀態: 1. 讀模式下加鎖狀態 (讀鎖)

荔枝派 V3S Linux 應用 IIC 使用OLED

ddr 開始 出現 驅動程序 line 但是 IE HR 手冊 1.開始   我想在荔枝派上驅動oled屏,但是在內核中寫驅動對我來說肯定是非常麻煩的,所以我退而求其次,想在應用層中操作通用i2c接口來實現oled的驅動程序。 我買的OLED是中景園經典款,四針IIC接口o