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波特率

三、接口调用实例

c 复制代码
//代码功能:定义了 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,详见接口说明。
  • 驱动调试

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

坚持就有收获

相关推荐
一只大侠的侠5 小时前
Flutter开源鸿蒙跨平台训练营 Day 10特惠推荐数据的获取与渲染
flutter·开源·harmonyos
御承扬11 小时前
鸿蒙NDK UI之文本自定义样式
ui·华为·harmonyos·鸿蒙ndk ui
前端不太难11 小时前
HarmonyOS 游戏上线前必做的 7 类极端场景测试
游戏·状态模式·harmonyos
大雷神11 小时前
HarmonyOS智慧农业管理应用开发教程--高高种地--第29篇:数据管理与备份
华为·harmonyos
讯方洋哥12 小时前
HarmonyOS App开发——关系型数据库应用App开发
数据库·harmonyos
巴德鸟13 小时前
华为手机鸿蒙4回退到鸿蒙3到鸿蒙2再回退到EMUI11 最后关闭系统更新
华为·智能手机·harmonyos·降级·升级·回退·emui
一起养小猫13 小时前
Flutter for OpenHarmony 实战_魔方应用UI设计与交互优化
flutter·ui·交互·harmonyos
一只大侠的侠13 小时前
Flutter开源鸿蒙跨平台训练营 Day7Flutter+ArkTS双方案实现轮播图+搜索框+导航组件
flutter·开源·harmonyos
那就回到过去13 小时前
VRRP协议
网络·华为·智能路由器·ensp·vrrp协议·网络hcip
相思难忘成疾14 小时前
通向HCIP之路:第四步:边界网关路由协议—BGP(概念、配置、特点、常见问题及其解决方案)
网络·华为·hcip