VS-RK3399 开发板上有 9 个片上 I2C 控制器,各个 I2C 的使用情况如下表:
Port
Pin name
Device
I2C0 GPIO1_B7/SPI3_RXD/I2C0_SDA
GPIO1_C0/SPI3_TXD/I2C0_SCL
RK808
I2C1 GPIO4_A1/I2C1_SDA
GPIO4_A2/I2C1_SCL
ALC5640
CAMERA
I2C2 GPIO2_A0/VOP_D0/CIF_D0/I2C2_SDA
GPIO2_A1/VOP_D1/CIF_D1/I2C2_SCL
复用为其他功能
I2C3 GPIO4_C0/I2C3_SDA/UART2B_RX
GPIO4_C1/I2C3_SCL/UART2B_TX
HDMI
I2C4 GPIO1_B3/I2C4_SDA
GPIO1_B4/I2C4_SCL
FUSB302B
TP
I2C5 GPIO3_B2/MAC_RXER/I2C5_SDA
GPIO3_B3/MAC_CLK/I2C5_SCL
复用为其他功能
I2C6 GPIO2_B1/SPI2_RXD/CIF_HREF/I2C6_SDA
GPIO2_B2/SPI2_TXD/CIF_CLKIN/I2C6_SCL
复用为其他功能
I2C7 GPIO2_A7/VOP_D7/CIF_D7/I2C7_SDA
GPIO2_B0/VOP_CLK/CIF_VSYNC/I2C7_SCL
复用为其他功能
I2C8 GPIO1_C4/I2C8_SDA
GPIO1_C5/I2C8_SCL
复用为其他功能
 
本文主要描述如何在该开发板上配置 I2C。
配置 I2C 可分为两大步骤:
  • 定义和注册 I2C 设备
  • 定义和注册 I2C 驱动
下面以配置 GSL3680 为例。

定义和注册 I2C 设备

在注册I2C设备时,需要结构体 i2c_client 来描述 I2C 设备。然而在标准Linux中,用户只需要提供相应的 I2C 设备信息,Linux就会根据所提供的信息构造 i2c_client 结构体。
用户所提供的 I2C 设备信息以节点的形式写到 dts 文件中,如下所示:

kernel/arch/arm64/boot/dts/rockchip/rk3399-videostrong-board-mipi.dts&i2c4 {    status = "okay";   
gsl3680: gsl3680@41 {   
           compatible = "gslX680";  
           reg = <0x41>;  
            screen_max_x = <1536>;  
            screen_max_y = <2048>;   
           touch-gpio = <&gpio1 20 IRQ_TYPE_LEVEL_LOW>;   
          reset-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
      };  };

定义和注册 I2C 驱动定义 I2C 驱动

在定义 I2C 驱动之前,用户首先要定义变量 of_device_id 和 i2c_device_id 。
of_device_id 用于在驱动中调用dts文件中定义的设备信息,其定义如下所示:

static struct of_device_id gsl_ts_ids[] = {   {.compatible = "gslX680"},   {}    };

定义变量 i2c_device_id:

static const struct i2c_device_id gsl_ts_id[] = {  
   {GSLX680_I2C_NAME, 0},   
  {}  
  };
MODULE_DEVICE_TABLE(i2c, gsl_ts_id);

i2c_driver 如下所示:

static struct i2c_driver gsl_ts_driver = {
     .driver = {
.name = GSLX680_I2C_NAME,
     .owner = THIS_MODULE,  
    .of_match_table = of_match_ptr(gsl_ts_ids),
     },
        .probe      = gsl_ts_probe,
      .remove     = gsl_ts_remove,
      .id_table   = gsl_ts_id,
};

注:变量id_table指示该驱动所支持的设备。

注册 I2C 驱动

使用i2c_add_driver函数注册 I2C 驱动。

i2c_add_driver(&gsl_ts_driver);

在调用 i2c_add_driver 注册 I2C 驱动时,会遍历 I2C 设备,如果该驱动支持所遍历到的设备,则会调用该驱动的 probe 函数。

通过 I2C 收发数据

在注册好 I2C 驱动后,即可进行 I2C 通讯。
  • 向从机发送信息:

int i2c_master_send(const struct i2c_client *client, const char *buf, int count) {
       int ret;      struct i2c_adapter *adap = client->adapter;   
   struct i2c_msg msg;      msg.addr = client->addr;  
    msg.flags = client->flags & I2C_M_TEN;
     msg.len = count;      msg.buf = (char *)buf;  
    ret = i2c_transfer(adap, &msg, 1);
          /*      * If everything went ok (i.e. 1 msg transmitted), return #bytes      * transmitted, else error code.      */   
   return (ret == 1) ? count : ret;
}

  • 向从机读取信息:

int i2c_master_recv(const struct i2c_client *client, char *buf, int count) {
     struct i2c_adapter *adap = client->adapter;
     struct i2c_msg msg;
     int ret;
     msg.addr = client->addr;  
    msg.flags = client->flags & I2C_M_TEN;  
    msg.flags |= I2C_M_RD;
    msg.len = count;
      msg.buf = buf;  
    ret = i2c_transfer(adap, &msg, 1);           /*       * If everything went ok (i.e. 1 msg received), return #bytes received,      * else error code.      */      return (ret == 1) ? count : ret; }  
  EXPORT_SYMBOL(i2c_master_recv);

视壮科技:VS-RK3399简单的I2C 功能介绍相关推荐

  1. 视壮提前祝大家国庆快乐!

    深圳市视壮科技有限公司成立于1998年,是一家专注于开源智能硬件,数字音视频,物联网产品的研发设计.生产和销售,同时提供了智能硬件产品的整体解决方案.公司拥有一支强大的瑞芯微(Rockchip)方案的 ...

  2. 视通科技互动录播主机,互动教学超简单!

    现如今随着录播系统的逐渐深入,很多学校开始安装录播教室,通过录制.直播.点播等方式,把最优秀的教育资源共享到各个学校. 互动录播教学,是在教学过程中利用互动录播系统实现教与学双方交流.沟通.探讨,激发 ...

  3. 二进制转8421bcd码_中山CVI转CVBS芯视音科技原装

    中山CVI转CVBS芯视音科技原装 深圳市芯视音科技有限公司,是一家专注于音视频转换方案和IC研发的实力公司.涵盖视频展台.工业相机.视频矩阵.视频转换.游戏设备周边方案,车载安防周边等领域,总部设在 ...

  4. 视通科技车载应急指挥调度解决方案

    应急指挥车.应急指挥系统作为整个应急指挥平台的主要组成部分,被广泛用于救灾抢险,安全保障等特殊场景,可通过应急指挥车或现场应急指挥系统与后方指挥中心传输音视频信息,实现现场与指挥中心的实时通信,进行视 ...

  5. 视通科技助力某法院审委会打造多媒体会议室

    审判委员会是人民法院内部对审判工作实行集体领导的组织形式,主要任务是总结审判经验,讨论重大的或者疑难的案件和其他有关审判工作的问题. 本次视通科技助力某法院审委会打造多媒体会议室,满足多媒体调度及会议 ...

  6. 视通科技科技法庭解决方案

    科技法庭是根据国家和最高法院发布的有关标准和规范,满足庭审过程公开.公正.高效.真实.透明的要求,打破时间和空间因素对庭审活动的限制,最大限度规范庭审活动,提高庭审效率,为法官.当事人.群众提供便捷的 ...

  7. 视通科技音视频解决方案

    企业的分支机构遍布各地,企业内部的跨地域沟通必不可少,确保信息互通的及时性,让问题在第一时间得到解决尤其重要.因此,拥有一个智能会议室有明显的积极意义,无论是从节约能源还是提升效率. -项目概况- 此 ...

  8. 视通科技助力消防队打造智能化指挥中心

    应急指挥中心正在进行信息化升级转型,丰富数据资源与关键应用布局,实现更精准.高效地监控预警与实时应急指挥. 视通科技研发的新一代AS-ADS 4K分布式KVM坐席拼控系统能够实现视频会议.视频监控.语 ...

  9. 视壮VS-RK3399开发板播放视频步骤共享

    视壮VS-RK3399开发板播放视频步骤共享: 大家都知道VS-RK3399开发板可应用与平板电脑.商用平板.高端平板等各类商业显示器,那么各位童鞋对于如何VS-RK3399播放视频知道吗?了解更多请 ...

最新文章

  1. Linux里新建文件/目录的默认权限
  2. python logging logger
  3. 【原创】【专栏】《Linux设备驱动程序》--- LDD3源码目录结构和源码分析经典链接
  4. 高档名片设计:12款专业的名片设计欣赏
  5. linux命令实验设备,实验二 Linux系统的常用命令
  6. python os如何创建文件夹_Python怎样创建文件夹,怎样删除文件夹
  7. mysql 数据备份
  8. Yum安装Memcache
  9. 7 win 卸载node_如何从windows中完全删除node.js_windows彻底卸载node教程
  10. 访问tomcat7 java.lang.ClassCastException: org.apache.jasper.el.ELContextImpl
  11. maven伺服搭建_Maven私服搭建
  12. 美丽的窗花java分形_“高冷奇葩”原来冰窗花可以这么美
  13. c语言编写面向对象的类
  14. Qt环境下利用opencv逐帧播放视频
  15. 成神之路——实施工程师
  16. 安装多个win10系统
  17. 2022年信息安全从业者书单推荐(2022.2.20更新)
  18. linux添加jetdirect协议,Linux系统中如何打印
  19. JAVA300集——面向对象编程-类和对象-构造方法及其重载-方法调用
  20. 【leetcode】442. Find All Duplicates in an Array(Python C++)

热门文章

  1. 如何采集喜欢的电视剧照?
  2. SqlPlus访问oracle
  3. 《算法竞赛入门经典(第二版)》习题解答——第二章
  4. 中国电力通信网发展综述
  5. 钉钉---氚云常规表格数据操作 -----记录贴
  6. ubuntu虚拟机下测试摄像头拉流
  7. Cesium自定义天空盒子图片
  8. oracle中raw是什么格式,oracle中RAW数据类型
  9. python模块下载连接清华镜像
  10. 主板知识详解:支持内存类型