I2C 讀
I2C 先寫后讀
其實所謂的 I2C 讀,都是先寫后讀。
I2C spec 規定如下
詳細解析如下(詳細看圖)
對從機進行讀操作時,主設備發出開始標志 (S) 和讀地址 (從機地址加一個 R/W 位,1 為讀,0 為寫)。等待從機產生應答信號。然后發送寄存器地址,告訴從機讀哪一個寄存器。緊接著,收到應答信號后,主設備再發一個開始信號,然后發送從設備讀地址。從機產生應答信號并開始發送寄存器數據。通信以主設備產生的拒絕應答信號 (NACK) 和結束標志 (P) 結束。
舉例(例子進行了兩次封裝)
void ap3216c_readdata(struct ap3216c_dev *dev)
{
unsigned char i =0;
unsigned char buf[6];
/* 循環讀取所有傳感器數據 */
for(i = 0; i < 6; i++)
{
buf[i] = ap3216c_read_reg(dev, AP3216C_IRDATALOW + i);
}
}
static unsigned char ap3216c_read_reg(struct ap3216c_dev *dev, u8 reg)
{
u8 data = 0;
ap3216c_read_regs(dev, reg, &data, 1);
return data;
}
static int ap3216c_read_regs(struct ap3216c_dev *dev, u8 reg, void *val, int len)
{
int ret;
struct i2c_msg msg[2];
struct i2c_client *client = (struct i2c_client *)dev- >private_data;
/* msg[0]為發送要讀取的首地址 */
msg[0].addr = client- >addr; /* ap3216c地址 */
msg[0].flags = 0; /* 標記為發送數據 */
msg[0].buf = ? /* 讀取的首地址 */
msg[0].len = 1; /* reg長度*/
/* msg[1]讀取數據 */
msg[1].addr = client- >addr; /* ap3216c地址 */
msg[1].flags = I2C_M_RD; /* 標記為讀取數據*/
msg[1].buf = val; /* 讀取數據緩沖區 */
msg[1].len = len; /* 要讀取的數據長度*/
ret = i2c_transfer(client- >adapter, msg, 2);
if(ret == 2) {
ret = 0;
} else {
printk("i2c rd failed=%d reg=%06x len=%dn",ret, reg, len);
ret = -EREMOTEIO;
}
return ret;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
設備
+關注
關注
2文章
4539瀏覽量
70795 -
I2C
+關注
關注
28文章
1495瀏覽量
124236
發布評論請先 登錄
相關推薦
i2c總線ppt(I2C總線器件應用)
I2C總線器件應用第一節 I2C總線器件應用概述I2C總線工作原理I2C總線系統結構I2C總線系統結構如圖7-1所示。其中,SCL是時鐘線,
發表于 08-13 17:34
?0次下載
i2c總線的特點
i2c總線的特點:2 I2C 總線使設計人員和廠商都得益.. 3
2.1 設計人員的得益.. 4
2.2 廠商的得益. 5
3 介紹I2C 總線規范 6
4
發表于 08-05 09:05
?26次下載
I2C Guid I2C指南
I2C Guid I2C指南
The I2C bus is used in a wide rangeof applications because it is simpleand
發表于 04-23 13:55
?36次下載
基于CPLD的I2C總線接口設計
在電路設計中,I2C總線是比較常用的兩線式串行通信方式,大多數的CPU都擅長于并口操作,不具備直接操作I2C總線接口的能力。為了使不具備I2C總線接口能力的CPU通過對并口的簡單操作實現對I2
發表于 02-12 16:11
?95次下載
I2C LCD 器件通過驅動帶有 I2C 接口的 2 線式 16 字符 LCD
I2C LCD 器件通過驅動帶有 I2C 接口的 2 線式 16 字符 LCD
發表于 10-10 08:22
?13次下載
硬件I2C與模擬I2C
硬件I2C對應芯片上的I2C外設,有相應I2C驅動電路,其所使用的I2C管腳也是專用的,因而效率要遠高于軟件模擬的I2C;一般也較為穩定,但
發表于 12-28 19:14
?81次下載
I2C子系統SW Architecture
I2C SW Architecture 【driver 驅動層】由普通驅動工程師負責,【i2c 核心層】由 Linux 提供,【i2c 核心層】以下由芯片原廠負責。 I2C 子系統
I2C和I3C的區別有哪些
I2C 和 I3C 主要區別如下: I2C 雖然也是兩條線,但是很多時候傳感器需要一條額外的中斷線,來告訴主控數據已經準備好。I3C 允許從設備直接在總線上產生中斷,不再需要一條額外的
i2c采樣是上升沿嗎?
i2c采樣是上升沿嗎?? I2C采樣是指在I2C總線上對數據進行采樣。在I2C總線上,數據的傳輸是通過2條線傳遞。一條是時鐘線(SCL),另
評論