0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

I2C先寫后讀是什么

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-07-22 15:58 ? 次閱讀

I2C

圖片

I2C 先寫后讀

其實(shí)所謂的 I2C 讀,都是先寫后讀。

I2C spec 規(guī)定如下

圖片

詳細(xì)解析如下(詳細(xì)看圖)

圖片

對從機(jī)進(jìn)行讀操作時,主設(shè)備發(fā)出開始標(biāo)志 (S) 和讀地址 (從機(jī)地址加一個 R/W 位,1 為讀,0 為寫)。等待從機(jī)產(chǎn)生應(yīng)答信號。然后發(fā)送寄存器地址,告訴從機(jī)讀哪一個寄存器。緊接著,收到應(yīng)答信號后,主設(shè)備再發(fā)一個開始信號,然后發(fā)送從設(shè)備讀地址。從機(jī)產(chǎn)生應(yīng)答信號并開始發(fā)送寄存器數(shù)據(jù)。通信以主設(shè)備產(chǎn)生的拒絕應(yīng)答信號 (NACK) 和結(jié)束標(biāo)志 (P) 結(jié)束。

舉例(例子進(jìn)行了兩次封裝)

void ap3216c_readdata(struct ap3216c_dev *dev)
{
 unsigned char i =0;
    unsigned char buf[6];
 
 /* 循環(huán)讀取所有傳感器數(shù)據(jù) */
    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]為發(fā)送要讀取的首地址 */
 msg[0].addr = client- >addr;   /* ap3216c地址 */
 msg[0].flags = 0;     /* 標(biāo)記為發(fā)送數(shù)據(jù) */
 msg[0].buf = ?     /* 讀取的首地址 */
 msg[0].len = 1;      /* reg長度*/

 /* msg[1]讀取數(shù)據(jù) */
 msg[1].addr = client- >addr;   /* ap3216c地址 */
 msg[1].flags = I2C_M_RD;   /* 標(biāo)記為讀取數(shù)據(jù)*/
 msg[1].buf = val;     /* 讀取數(shù)據(jù)緩沖區(qū) */
 msg[1].len = len;     /* 要讀取的數(shù)據(jù)長度*/

 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;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 設(shè)備
    +關(guān)注

    關(guān)注

    2

    文章

    4358

    瀏覽量

    70282
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1453

    瀏覽量

    122285
收藏 人收藏

    評論

    相關(guān)推薦

    I2C總線—電平轉(zhuǎn)換

    我們先來看一張圖,熟悉I2C的人一看,這不是I2C的level shifter電路嘛,在Philip的I2C標(biāo)準(zhǔn)里面有,沒有啥復(fù)雜的。
    的頭像 發(fā)表于 11-02 12:32 ?3872次閱讀
    <b class='flag-5'>I2C</b>總線—電平轉(zhuǎn)換

    i2c總線ppt(I2C總線器件應(yīng)用)

    I2C總線器件應(yīng)用第一節(jié) I2C總線器件應(yīng)用概述I2C總線工作原理I2C總線系統(tǒng)結(jié)構(gòu)I2C總線系統(tǒng)結(jié)構(gòu)如圖7-1所示。其中,SCL是時鐘線,
    發(fā)表于 08-13 17:34 ?0次下載

    i2c總線的特點(diǎn)

    i2c總線的特點(diǎn):2 I2C 總線使設(shè)計人員和廠商都得益.. 3 2.1 設(shè)計人員的得益.. 4 2.2 廠商的得益. 5 3 介紹I2C 總線規(guī)范 6 4
    發(fā)表于 08-05 09:05 ?26次下載

    I2C總線規(guī)范與I2C器件C51讀寫程序

    I2C總線規(guī)范與I2C器件C51讀寫程序:本文簡要介紹了I2C總線,并給出了I2C器件的C51讀
    發(fā)表于 08-22 17:51 ?93次下載

    I2C Guid I2C指南

    I2C Guid  I2C指南 The I2C bus is used in a wide rangeof applications because it is simpleand
    發(fā)表于 04-23 13:55 ?36次下載

    什么是i2c總線

    什么是i2c總線  下載請點(diǎn)擊: i2c總線協(xié)議中文版 
    發(fā)表于 11-05 09:26 ?2877次閱讀

    基于CPLD的I2C總線接口設(shè)計

    在電路設(shè)計中,I2C總線是比較常用的兩線式串行通信方式,大多數(shù)的CPU都擅長于并口操作,不具備直接操作I2C總線接口的能力。為了使不具備I2C總線接口能力的CPU通過對并口的簡單操作實(shí)現(xiàn)對I2
    發(fā)表于 02-12 16:11 ?95次下載
    基于CPLD的<b class='flag-5'>I2C</b>總線接口設(shè)計

    基于51的I2c總線

    I2c總線,基于51的I2c總線,程序?qū)W習(xí)??靵硐螺d學(xué)習(xí)吧
    發(fā)表于 01-13 11:49 ?34次下載

    i2c

    單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;
    發(fā)表于 05-17 11:09 ?35次下載

    I2C LCD 器件通過驅(qū)動帶有 I2C 接口的 2 線式 16 字符 LCD

    I2C LCD 器件通過驅(qū)動帶有 I2C 接口的 2 線式 16 字符 LCD
    發(fā)表于 10-10 08:22 ?13次下載
    <b class='flag-5'>I2C</b> LCD 器件通過驅(qū)動帶有 <b class='flag-5'>I2C</b> 接口的 <b class='flag-5'>2</b> 線式 16 字符 LCD

    硬件I2C與模擬I2C

    硬件I2C對應(yīng)芯片上的I2C外設(shè),有相應(yīng)I2C驅(qū)動電路,其所使用的I2C管腳也是專用的,因而效率要遠(yuǎn)高于軟件模擬的I2C;一般也較為穩(wěn)定,但
    發(fā)表于 12-28 19:14 ?81次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    ESP 12E I2c基卡的I2C IO卡設(shè)計

    電子發(fā)燒友網(wǎng)站提供《ESP 12E I2c基卡的I2C IO卡設(shè)計.zip》資料免費(fèi)下載
    發(fā)表于 08-15 09:27 ?3次下載
    ESP 12E <b class='flag-5'>I2c</b>基卡的<b class='flag-5'>I2C</b> IO卡設(shè)計

    I2C子系統(tǒng)SW Architecture

    I2C SW Architecture 【driver 驅(qū)動層】由普通驅(qū)動工程師負(fù)責(zé),【i2c 核心層】由 Linux 提供,【i2c 核心層】以下由芯片原廠負(fù)責(zé)。 I2C 子系統(tǒng)
    的頭像 發(fā)表于 07-22 16:01 ?804次閱讀
    <b class='flag-5'>I2C</b>子系統(tǒng)SW Architecture

    I2CI3C的區(qū)別有哪些

    I2CI3C 主要區(qū)別如下: I2C 雖然也是兩條線,但是很多時候傳感器需要一條額外的中斷線,來告訴主控數(shù)據(jù)已經(jīng)準(zhǔn)備好。I3C 允許從設(shè)備直接在總線上產(chǎn)生中斷,不再需要一條額外的
    的頭像 發(fā)表于 07-22 16:20 ?5985次閱讀
    <b class='flag-5'>I2C</b>和<b class='flag-5'>I3C</b>的區(qū)別有哪些

    i2c采樣是上升沿嗎?

    i2c采樣是上升沿嗎?? I2C采樣是指在I2C總線上對數(shù)據(jù)進(jìn)行采樣。在I2C總線上,數(shù)據(jù)的傳輸是通過2條線傳遞。一條是時鐘線(SCL),另
    的頭像 發(fā)表于 09-19 17:16 ?2100次閱讀