HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-I2C

在这里插入图片描述

一、 I2C 概述

I2C(Inter Integrated Circuit)集成电路间总线是由 Philips 公司开发的一种简单、双向二线制同步串行总线。I2C 以主从方式工作。通常有一个主设备和一个或者多个从设备,主从设备通过 SDA(SerialData)串行数据线以及 SCL(SerialClock)串行时钟线两根线相连。

I2C 总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址,当主设备需要和某一个从设备通信时,通过广播的方式,将从设备地址写到总线上,如果某个从设备符合此地址,将会发出应答信号,建立传输。

I2C 的通信方式为半双工,因为只有一根 SDA 线,所以在同一时间内只可以单向通信。

I2C 接口定义了完成 I2C 传输的通用方法集合,包括:

  • I2C 控制器管理:打开或关闭 I2C 控制器;
  • I2C 消息传输:通过消息传输结构体数组进行自定义传输。

I2C 设备的连接示意图如下:

请添加图片描述

I2C 时序主要有四个元素组成:起始信号,终止信号,应答(0),非应答(1)。

请添加图片描述

I2C 数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。数据传输以字节为单位,高位在前,逐个 bit 进行传输。

请添加图片描述
请添加图片描述
I2C 操作流程如下:
请添加图片描述

二、I2C 模块相关API

头文件路径:base/iothardware/peripheral/interfaces/inner_api/iot_i2c.h

接口函数 描述
unsigned int IoTI2cInit(unsigned int id, unsigned int baudrate); 初始化I2C
unsigned int IoTI2cWrite(unsigned int id, unsigned short deviceAddr, const unsigned char *data, unsigned int dataLen); I2C写操作
unsigned int IoTI2cRead(unsigned int id, unsigned short deviceAddr, unsigned char *data, unsigned int dataLen); I2C读操作
unsigned int IoTI2cSetBaudrate(unsigned int id, unsigned int baudrate); 设置I2C波特率

三、接口调用实例

//代码功能:定义了 I2C 接口功能以及 I2C 相关参数,GPIO_00 号口作为 I2C_SDA 模式,最后进行读写操作。

#include "iot_i2c.h"
IoTI2cInit(I2C_SDA,100000); //100KHz 为波特率
IoTI2cWrite(I2C_SDA,0x00,data,strlen(data)); //0x00 为指定的设备地址
IoTI2cRead(I2C_SDA,0x00,data,strlen(data));

四、I2C HDF驱动开发

在HDF框架中,同类型设备对象较多时(可能同时存在十几个同类型控制器),若采用独立服务模式,则需要配置更多的设备节点,且相关服务会占据更多的内存资源。相反,采用统一服务模式可以使用一个设备服务作为管理器,统一处理所有同类型对象的外部访问(这会在配置文件中有所体现),实现便捷管理和节约资源的目的。I2C模块即采用统一服务模式(如图1)。

在统一模式下,所有的控制器都被核心层统一管理,并由核心层统一发布一个服务供接口层,因此这种模式下驱动无需再为每个控制器发布服务。

I2C模块各分层的作用为:

接口层:提供打开设备,数据传输以及关闭设备的能力。

核心层:主要负责服务绑定、初始化以及释放管理器,并提供添加、删除以及获取控制器的能力。

适配层:由驱动适配者实现与硬件相关的具体功能,如控制器的初始化等。

图 1 I2C统一服务模式结构图

4.1、开发步骤(待续…)

I2C模块适配包含以下四个步骤:

  • 实例化驱动入口

    • 实例化HdfDriverEntry结构体成员。
    • 调用HDF_INIT将HdfDriverEntry实例化对象注册到HDF框架中。
  • 配置属性文件

    • 在device_info.hcs文件中添加deviceNode描述。
    • 【可选】添加i2c_config.hcs器件属性文件。
  • 实例化I2C控制器对象

    • 初始化I2cCntlr成员。
    • 实例化I2cCntlr成员I2cMethod和I2cLockMethod。
      • icon-note.gif 说明:
      • 实例化I2cCntlr成员I2cMethod和I2cLockMethod,详见接口说明。
  • 驱动调试

    • 【可选】针对新增驱动程序,建议验证驱动基本功能,例如挂载后的信息反馈,消息传输的成功与否等。

坚持就有收获

在这里插入图片描述

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-02-20 07:52:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-20 07:52:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-20 07:52:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-20 07:52:03       18 阅读

热门阅读

  1. 【0259】inval.h/inval.c的理解

    2024-02-20 07:52:03       30 阅读
  2. HBase API

    2024-02-20 07:52:03       30 阅读
  3. 【React】使用lodash的debounce未生效

    2024-02-20 07:52:03       37 阅读
  4. ansible inventory 主机清单

    2024-02-20 07:52:03       29 阅读
  5. Docker Compose 配置环境变量

    2024-02-20 07:52:03       25 阅读
  6. git checkout 某个分支后如何回退到执行之前的分支

    2024-02-20 07:52:03       25 阅读
  7. 课时39:表达式_运算符_简单计算

    2024-02-20 07:52:03       21 阅读
  8. 2024前端面试准备之uniapp篇

    2024-02-20 07:52:03       32 阅读
  9. C/C++ BM9 删除链表的倒数第n个节点

    2024-02-20 07:52:03       31 阅读