iMX6ULL应用笔记接口篇之 I2C 接口

原创 2022-12-05 16:29:00 iMX6ULL iMX6ULL I2C

imxull-C核心板

本文主要适用于飞凌 OKMX6ULL-S 平台 Linux4.1.15 操作系统。本文以读取 rtc 芯片 RX8010 的 seconds 寄存器为例进行说明。本文使用的思路和方法仅供参考使用,其它arm开发板虽然芯片不同,但思路和方法有很多的共性,希望对您在板卡的使用中能够有所帮助,更多ARM开发板相关资讯,关注飞凌嵌入式。 如对本文讲解有不明之处,您也可以联系飞凌的技术支持团队咨询了解。

先了解一下这款

FETMX6ULL-S核心板采用NXP的高性能、超高效、低成本处理器MCIMX6Y2开发设计,采用先进的ARM Cortex-A7内核,运行速度高达800MHz。先进的电源管理架构可以提供更低的功耗。 标配8路原生UART 、2路网口、2路CAN-bus总线、2路USB OTG等常用接口;核心板支持工业级和商业及两种配置:256MB DDR3L/512MB DDR3L,256MB NandFlash/4GB eMMC/8GB eMMC,方便用户不同的选择。为了方便用户二次开发的同时简化用户设计,为您的项目评估提供良好的评估及设计依据,飞凌为核心板提供了开发套件OKMX6ULL-S开发板,配备丰富的功能接口,满足用户多样化需求。

imx6ull开发板


i2C 测试例程

OKMX6ULL 默认配置了两路 i2c,i2c1 和 i2c2

可以在系统中/dev 目录下查看:

其中 i2c-0 对应设备树中的 i2c1,i2c-1 对应设备树中的 i2c2
现在以读取 rtc 芯片 RX8010 的 seconds 寄存器为例进行说明。
测试源码例程如下:
#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 数据包结构体
struct i2c_msg msg[2] = {
//构建 i2c_msg 结构体
[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;
//我们要发送的数据包的指针
i2c_read_rtc.nmsgs = 2;
//我们要发送的数据包的个数
ret = ioctl(fd, I2C_RDWR, &i2c_read_rtc); //使用 ioctl 的 I2C_RDWR 进行数据传输
if(ret < 0)
{
perror("ioctl error is:");
return ret;
}
RX8010_REG_SEC = data[0];
//从 i2c 读出来的数据中取出 RTC 的秒时间
return RX8010_REG_SEC;
}
int main(int argc, char* argv[])
{
__u8 TD_STATUS;
fd = open("/dev/i2c-0", O_RDWR); //打开 i2c-0 的节点
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 内核文件中编译(如 linux-4.1.15):

把编译得到的 i2c 可执行文件放到板子上,给可执行权限并运行,实现效果为每秒打印一次 RX8010的 seconds 寄存器中的值。



转载请注明来源 飞凌嵌入式 :www.forlinx.com

相关产品 >

  • OKMX6ULL-S开发板

    iMX6ULL是飞凌新近推出的一款开发板,iMX6ULL与iMX6UL开发板相比,功能无区别完全兼容,配置升级,性能高,价格低。根据介绍可看出i.MX6ULL参数丰富 ,采用NXP i.MX6ULL处理器芯片,邮票孔封装,支持Linux系统,i.MX6ULL开发板资料丰富,方便二次开发设计。

    了解详情
    OKMX6ULL-S开发板
  • FETMX6ULL-S核心板

    飞凌新出的一款采用NXP高性能、高效、低成本处理器的核心板—FETMX6ULL-S核心板,i.MX6ULL核心板采用邮票孔连接方式,ARM Cortex-A7内核,原生两路网口,两路Can和八路串口,可以和多种设备同时通讯。i.MX6ULL核心板支持工业级和扩展商业级两种配置,并且经过了高低温测试的检验,iMX6ULL核心板采用Linux4.1.15+Qt5.6操作系统,方便开发自己的应用程序。 了解详情
    FETMX6ULL-S核心板
  • FETMX6ULL-C核心板

    FETMX6ULL-C核心板采用NXP i.MX6ULL处理器开发设计,是一款高性能Linux核心板,采用低功耗的ARM Cortex-A7架构,运行速度高达800MHz。iMX6ULL核心板29*40mm  ,iMX6ULL这款处理器功能接口资源丰富,供货周期长。

    了解详情
    FETMX6ULL-C核心板
  • OKMX6ULL-C开发板

    40*29mm,双网双CAN,8路串口| i.MX6ULL开发板是基于NXP i.MX6ULL设计开发的的一款Linux开发板 ,主频800MHz,体积小,其核心板仅40*29mm,采用板对板连接器,适应场景丰富。 了解详情
    OKMX6ULL-C开发板

推荐阅读 换一批 换一批