91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于RK3576開發板的I2C使用說明

ljx2016 ? 來源:ljx2016 ? 作者:ljx2016 ? 2025-05-07 10:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. I2C介紹

IIC又簡寫成I2C,是一種串行通信總線,使用多主從架構。

最初設計目的為了讓主板、嵌入式系統手機用來連接低速周邊設備。多用于小數據量的場合,有傳輸距離短,任意時刻只能有一個主機等特性。

Linux嵌入式應用開發的情景下,完全可以不必理會IIC協議的詳細規定。只需要按照驅動層提供給我們的操作IIC外設的操作接口函數就可以像操作linux中其他普通設備文件那樣輕松的操作IIC外設了。

1.1 開發板上I2C資源介紹

EASY EAI Orin-Nano開發板預留引出了2路IIC資源,以供用戶自定義調用,它們分別是IIC2和IIC8。確切的分部位置,如下圖所示:

wKgZO2gayMaAEsE5ABS-Mx3gT6o487.jpg

1.2 硬件接線示意圖

wKgZPGgayMaAZfIqAADdNgPRzl4127.png

本示例采用ADS1115電壓檢測模塊進行輔助演示。此模塊功能是把檢測到的電壓(模擬信號)轉化為數字信號存入寄存器中,然后以IIC的通信方式對外提供電壓信息的提取。

ADS1115模塊與EASY EAI Orin-Nano的接線原理圖如下所示:

wKgZO2gayMeAGSNvAABxrfCVn2A216.png

2. 快速上手

2.1 例程源碼下載

到【百度網盤】上下載相關的單例程序:

鏈接:https://pan.baidu.com/s/1RXHMGpmGSEfFy0rb1VkXSg?pwd=1234

提取碼: 1234

比如在windows環境中,就把單例程序下載到:此電腦D:BaiduNetdisk (無規定,用戶可自主選擇),如下圖所示。

wKgZPGgayMeAf0yrAACziBbs-LY313.png

然后把例程【復制粘貼】到nfs掛載目錄中。(不清楚目錄如何構建的,可以參考《入門指南/開發環境準備/nfs服務搭建與掛載》)

wKgZO2gayMeAcXWFAAEB2_3nRjY601.png

2.2 例程編譯&運行

通過adb shell進入開發板環境(不清楚如何通過adb進行調試,可以參考《入門指南/開發板調試方式介紹/adb調試》),執行下方命令定位到demo目錄,并且執行編譯操作。

cd /home/orin-nano/Desktop/nfs/08_IIC/
./build.sh
wKgZPGgayMeAQVOtAAF5g_M9vaE021.png

編譯成功后,會生成一個test-ads1115的可執行程序在Release目錄中。

執行下方命令則可運行測試demo,如下所示。

sudo ./Release/test-ads1115

執行效果如下所示,利用探測分別觸碰3V3,1V8,GND三個端子,則可在終端測出對應的電壓值。

wKgZO2gayMiAFnUdAACt8oyTDrM125.png

3. C語言使用案例

ADS1115的C語言使用案例,代碼地址為08_IIC/test-ads1115/main.c,供用戶編碼參考。以下代碼展示了對ADS1115操作流程:

int32_t ads1115_config_register(uint32_t fd, uint8_t configH, uint8_t configL)
{
    uint8_t reg_data[3] = {ADS1015_REG_POINTER_CONFIG, configH, configL};
    return iic_write(fd, ADS1115_ADDRESS, reg_data, sizeof(reg_data));
}

int16_t ads1115_read_data(uint32_t fd)
{
    bool ret = false;
    /*讀取數據*/
    uint8_t tx_data[1] = {ADS1015_REG_POINTER_CONVERT};
    if(iic_write(fd, ADS1115_ADDRESS, tx_data, sizeof(tx_data)) < sizeof(tx_data)){
        printf("iic write faild !n");
        return -1;
    }

    uint8_t rx_data[3]={0};
    if(iic_read(fd, ADS1115_ADDRESS, rx_data, 2) < 0){
        printf("iic read faild !n");
        return -1;
    }

    int16_t data = rx_data[0]*256+rx_data[1];
    return data;
}

double ads1115_get_voltage_val(uint32_t fd, uint8_t configH, uint8_t configL)
{
    /*配置寄存器*/
    if(ads1115_config_register(fd, configH, configL) < 0){
        printf("ads1115 config register faildn");
        return 0.0;
    }
    usleep(100 * 1000);
    
    int16_t ad_val = ads1115_read_data(fd);
    if((0x7FFF == ad_val)|(0X8000 == ad_val)) {//是否超量程了
        ad_val = 0;
        printf("ads1115 over PGArn");
    }
    
    double val = 0.0;
    switch((0x0E&configH)?>>1)//量程對應的分辨率
    {
        case(0x00):
            val = (double)ad_val*187.5/1000000.0; break;
        case(0x01):
            val = (double)ad_val*125/1000000.0; break;
        case(0x02):
            val = (double)ad_val*62.5/1000000.0; break;
        case(0x03):
            val = (double)ad_val*31.25/1000000.0; break;
        case(0x04):
            val = (double)ad_val*15.625/1000000.0; break;
        case(0x05):
            val = (double)ad_val*7.8125/1000000.0; break;
        default:
            val = 0.0; break;
    }
    
    return val;
}

int main(int argc, char const *argv[])
{
    bool ret = false;
    double val;
    int fd = iic_init("/dev/i2c-2");
    if(fd < 0){
        printf("iic init faild n");
        return -1;
    }
    
    if(0 != iic_set_addr_len(fd, 7)){
        return -1;
    }
    
    if(0 != iic_set_addr(fd, ADS1115_ADDRESS)){
        return -1;
    }    
    
    while (1) {
        val = ads1115_get_voltage_val(fd, CONFIG_REG_H, CONFIG_REG_L);
        printf("val: %f Vrn",val);
        sleep(2);
    }
    
    iic_release(fd);
    return 0;
}

其中iic_init(),iic_set_addr_len(),iic_set_addr(),iic_read(),iic_write(),iic_release()是對系統調用的易用化封裝。具體實現于08_IIC/commonApi/iic.c

除了需要有對IIC硬件資源進行操作的接口以外,要需要清楚IIC總線上的IIC從機設備的寄存器操作方法。如ADS1115電壓檢測芯片,與其寄存器相關的操作定義均在08_IIC/test-ads1115/ads1115.h中實現。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1541

    瀏覽量

    127789
  • 開發板
    +關注

    關注

    25

    文章

    5676

    瀏覽量

    104576
  • rk3576
    +關注

    關注

    1

    文章

    173

    瀏覽量

    716
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于RK3576開發板的WDT看門狗使用說明

    RK3576開發板的WDT使用說明
    的頭像 發表于 05-06 17:15 ?626次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>的WDT看門狗<b class='flag-5'>使用說明</b>

    基于RK3576開發板的PCIE固態硬盤使用說明

    RK3576開發板的PICE固態硬盤使用方法
    的頭像 發表于 05-06 17:33 ?1344次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>的PCIE固態硬盤<b class='flag-5'>使用說明</b>

    基于RK3576開發板的TF卡槽使用說明

    RK3576開發板使用TF卡槽
    的頭像 發表于 05-07 09:24 ?747次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>的TF卡槽<b class='flag-5'>使用說明</b>

    基于RK3576開發板的PWN使用說明

    RK3576開發板使用PWN教程及Demo
    的頭像 發表于 05-07 14:07 ?1273次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>的PWN<b class='flag-5'>使用說明</b>

    基于RK3576開發板的RTC使用說明

    文章主要展示RK3576開發板的RTC信息和快速上手例程
    的頭像 發表于 05-07 15:04 ?802次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>的RTC<b class='flag-5'>使用說明</b>

    基于RK3576開發板的人臉識別算法

    RK3576開發板展示人臉識別算法例程和API說明
    的頭像 發表于 05-07 16:48 ?1931次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>的人臉識別算法

    新品體驗 | RK3576開發板

    RK3399、RK3566、RK3568、RK3588、RK3576等型號的核心與評估
    的頭像 發表于 11-01 08:08 ?1914次閱讀
    新品體驗 | <b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>

    米爾RK3576開發板特惠活動!

    近日,米爾電子發布基于瑞芯微RK3576核心開發板RK3576作為國產熱門處理器,其高性能數據處理能力、領先的AI智能分析、強大的擴展性與兼容性受到廣大
    的頭像 發表于 11-12 01:00 ?852次閱讀
    米爾<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>特惠活動!

    敬請期待 | 迅為RK3576開發板即將發布

    敬請期待 | 迅為RK3576開發板即將發布
    的頭像 發表于 11-22 15:13 ?618次閱讀
    敬請期待 | 迅為<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>即將發布

    迅為RK3576開發板核心與底板接口硬件介紹

    迅為RK3576開發板核心與底板接口硬件介紹
    的頭像 發表于 01-14 15:15 ?1504次閱讀
    迅為<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>核心<b class='flag-5'>板</b>與底板接口硬件介紹

    迅為RK3576開發板Android?多屏顯示

    迅為RK3576開發板Android?多屏顯示
    的頭像 發表于 01-16 16:58 ?1007次閱讀
    迅為<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>Android?多屏顯示

    基于RK3576開發板的MIPI-DSI使用

    MIPI DSI接口是由MIPI聯盟下的Display工作組指定的DSI(Display Serial Interface)的接口標準。rk3576開發板使用mipi-dsi教程
    的頭像 發表于 05-06 16:11 ?368次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>的MIPI-DSI使用

    基于RK3576開發板的揚聲器和耳機使用說明

    RK3576開發板的揚聲器和耳機使用說明
    的頭像 發表于 05-06 16:36 ?399次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>的揚聲器和耳機<b class='flag-5'>使用說明</b>

    基于RK3576開發板的HDMI-OUT使用說明

    RK3576開發板的HDMI-OUT使用說明
    的頭像 發表于 05-06 16:48 ?339次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>的HDMI-OUT<b class='flag-5'>使用說明</b>

    基于RK3576開發板的人員檢測算法

    展示了RK3576開發板的人員檢測算法例程及API說明
    的頭像 發表于 05-07 17:33 ?291次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發板</b>的人員檢測算法
    主站蜘蛛池模板: 日日操夜夜爽 | 久久国产伦三级理电影 | 国产精品天天看大片特色视频 | 久久久午夜精品 | 天天干天天要 | 天天狠天天透天干天天怕处 | 日韩种子| 一级大片免费看 | 欧美一区二区影院 | 国产在线永久视频 | 爽好舒服快给老师 | 国产一区二区在线视频播放 | 一女被两男吃奶玩乳尖口述 | 黄色刺激网站 | 欧美国产在线一区 | 国产中文99视频在线观看 | 丁香婷婷综合网 | 伊人久久大香线蕉综合亚洲 | 天堂tv亚洲tv日本tv欧美人tv | 色视频在线观看免费 | 黄色一级大片视频 | 巨臀中文字幕一区二区翘臀 | 亚洲国产一区二区在线 | 国产精品久久久香蕉 | 亚洲四虎永久在线播放 | 久久综合色综合 | 四虎永久免费影院在线 | 婷婷97狠狠的狠狠的爱 | 久久久久久久国产免费看 | 艹逼免费视频 | 4438成人成人高清视频 | 一级黄视频 | 国产玖玖在线 | 国产91色综合久久免费分享 | se94se最新网站 | 五月综合色 | 日本肥妇 | 久操视频在线 | 在线亚洲成人 | 高清不卡毛片免费观看 | 黄在线观看在线播放720p |