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 下的一個鍵名,也就是裡面具體
Java讀寫CSV格式檔案(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-Java讀寫CSV格式檔案(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