iMX6ULL應(yīng)用筆記接口篇之 I2C 接口

原創(chuàng) 2022-12-05 16:29:00 iMX6ULL iMX6ULL I2C

imxull-C核心板

本文主要適用于飛凌 OKMX6ULL-S 平臺(tái) Linux4.1.15 操作系統(tǒng)。本文以讀取 rtc 芯片 RX8010 的 seconds 寄存器為例進(jìn)行說(shuō)明。本文使用的思路和方法僅供參考使用,其它arm開(kāi)發(fā)板雖然芯片不同,但思路和方法有很多的共性,希望對(duì)您在板卡的使用中能夠有所幫助,更多ARM開(kāi)發(fā)板相關(guān)資訊,關(guān)注飛凌嵌入式。 如對(duì)本文講解有不明之處,您也可以聯(lián)系飛凌的技術(shù)支持團(tuán)隊(duì)咨詢了解。

先了解一下這款

FETMX6ULL-S核心板采用NXP的高性能、超高效、低成本處理器MCIMX6Y2開(kāi)發(fā)設(shè)計(jì),采用先進(jìn)的ARM Cortex-A7內(nèi)核,運(yùn)行速度高達(dá)800MHz。先進(jìn)的電源管理架構(gòu)可以提供更低的功耗。 標(biāo)配8路原生UART 、2路網(wǎng)口、2路CAN-bus總線、2路USB OTG等常用接口;核心板支持工業(yè)級(jí)和商業(yè)及兩種配置:256MB DDR3L/512MB DDR3L,256MB NandFlash/4GB eMMC/8GB eMMC,方便用戶不同的選擇。為了方便用戶二次開(kāi)發(fā)的同時(shí)簡(jiǎn)化用戶設(shè)計(jì),為您的項(xiàng)目評(píng)估提供良好的評(píng)估及設(shè)計(jì)依據(jù),飛凌為核心板提供了開(kāi)發(fā)套件OKMX6ULL-S開(kāi)發(fā)板,配備豐富的功能接口,滿足用戶多樣化需求。

imx6ull開(kāi)發(fā)板


i2C 測(cè)試?yán)?/span>

OKMX6ULL 默認(rèn)配置了兩路 i2c,i2c1 和 i2c2

可以在系統(tǒng)中/dev 目錄下查看:

其中 i2c-0 對(duì)應(yīng)設(shè)備樹(shù)中的 i2c1,i2c-1 對(duì)應(yīng)設(shè)備樹(shù)中的 i2c2
現(xiàn)在以讀取 rtc 芯片 RX8010 的 seconds 寄存器為例進(jìn)行說(shuō)明。
測(cè)試源碼例程如下:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>
int fd;
int i2c_read_data(__u16 slave_addr, __u8 reg_addr)
{
__u8 data[7];
__u8 RX8010_REG_SEC;
int ret;
struct i2c_rdwr_ioctl_data i2c_read_rtc;       //定義 I2C 數(shù)據(jù)包結(jié)構(gòu)體
struct i2c_msg msg[2] = {
//構(gòu)建 i2c_msg 結(jié)構(gòu)體
[0] = {
.addr = slave_addr,
.flags = 0,
.buf = ?_addr,
.len = sizeof(reg_addr)
},
[1] = {
.addr = slave_addr,
.flags = 1,
.buf = data,
.len = sizeof(data)
}
}
i2c_read_rtc.msgs = msg;
//我們要發(fā)送的數(shù)據(jù)包的指針
i2c_read_rtc.nmsgs = 2;
//我們要發(fā)送的數(shù)據(jù)包的個(gè)數(shù)
ret = ioctl(fd, I2C_RDWR, &i2c_read_rtc); //使用 ioctl 的 I2C_RDWR 進(jìn)行數(shù)據(jù)傳輸
if(ret < 0)
{
perror("ioctl error is:");
return ret;
}
RX8010_REG_SEC = data[0];
//從 i2c 讀出來(lái)的數(shù)據(jù)中取出 RTC 的秒時(shí)間
return RX8010_REG_SEC;
}
int main(int argc, char* argv[])
{
__u8 TD_STATUS;
fd = open("/dev/i2c-0", O_RDWR); //打開(kāi) i2c-0 的節(jié)點(diǎn)
if(fd < 0)
{
perror("open error\n");
return fd;
}
while(1)
{
TD_STATUS = i2c_read_data(0x32, 0x10); //0x32 為 i2c 地址,0x10 為寄存器地址
printf("TD_STATUS value is %x\n", TD_STATUS);
sleep(1);
}
return 0;
}
在 linux 內(nèi)核文件中編譯(如 linux-4.1.15):

把編譯得到的 i2c 可執(zhí)行文件放到板子上,給可執(zhí)行權(quán)限并運(yùn)行,實(shí)現(xiàn)效果為每秒打印一次 RX8010的 seconds 寄存器中的值。



轉(zhuǎn)載請(qǐng)注明來(lái)源 飛凌嵌入式 :www.szrcclub.com

相關(guān)產(chǎn)品 >

  • OKMX6ULL-S開(kāi)發(fā)板

    iMX6ULL是飛凌新近推出的一款開(kāi)發(fā)板,iMX6ULL與iMX6UL開(kāi)發(fā)板相比,功能無(wú)區(qū)別完全兼容,配置升級(jí),性能高,價(jià)格低。根據(jù)介紹可看出i.MX6ULL參數(shù)豐富 ,采用NXP i.MX6ULL處理器芯片,郵票孔封裝,支持Linux系統(tǒng),i.MX6ULL開(kāi)發(fā)板資料豐富,方便二次開(kāi)發(fā)設(shè)計(jì)。

    了解詳情
    OKMX6ULL-S開(kāi)發(fā)板
  • FETMX6ULL-S核心板

    飛凌新出的一款采用NXP高性能、高效、低成本處理器的核心板—FETMX6ULL-S核心板,i.MX6ULL核心板采用郵票孔連接方式,ARM Cortex-A7內(nèi)核,原生兩路網(wǎng)口,兩路Can和八路串口,可以和多種設(shè)備同時(shí)通訊。i.MX6ULL核心板支持工業(yè)級(jí)和擴(kuò)展商業(yè)級(jí)兩種配置,并且經(jīng)過(guò)了高低溫測(cè)試的檢驗(yàn),iMX6ULL核心板采用Linux4.1.15+Qt5.6操作系統(tǒng),方便開(kāi)發(fā)自己的應(yīng)用程序。 了解詳情
    FETMX6ULL-S核心板
  • FETMX6ULL-C核心板

    FETMX6ULL-C核心板采用NXP i.MX6ULL處理器開(kāi)發(fā)設(shè)計(jì),是一款高性能Linux核心板,采用低功耗的ARM Cortex-A7架構(gòu),運(yùn)行速度高達(dá)800MHz。iMX6ULL核心板29*40mm  ,iMX6ULL這款處理器功能接口資源豐富,供貨周期長(zhǎng)。

    了解詳情
    FETMX6ULL-C核心板
  • OKMX6ULL-C開(kāi)發(fā)板

    40*29mm,雙網(wǎng)雙CAN,8路串口| i.MX6ULL開(kāi)發(fā)板是基于NXP i.MX6ULL設(shè)計(jì)開(kāi)發(fā)的的一款Linux開(kāi)發(fā)板 ,主頻800MHz,體積小,其核心板僅40*29mm,采用板對(duì)板連接器,適應(yīng)場(chǎng)景豐富。 了解詳情
    OKMX6ULL-C開(kāi)發(fā)板

推薦閱讀 換一批 換一批