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,详见接口说明。
  • 驱动调试

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

坚持就有收获

相关推荐
@海~涛9 分钟前
鸿蒙OpenHarmony
华为·harmonyos
Evand J38 分钟前
物联网智能设备:未来生活的变革者
人工智能·物联网·智能手机·智能家居·智能手表
zhongcx5 小时前
鸿蒙应用示例:镂空效果实现教程
harmonyos
训山6 小时前
【11】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-模块化语法与自定义组件
笔记·学习·华为·harmonyos·鸿蒙系统
helloxmg7 小时前
鸿蒙harmonyos next flutter混合开发之开发package
flutter·华为·harmonyos
zhongcx1 天前
鸿蒙应用示例:ArkTS UI框架中的文本缩进技巧
harmonyos
神一样的老师1 天前
面向MQTT基础物联网网络的Age-of-Information感知的保留消息策略
网络·物联网
东林知识库1 天前
鸿蒙NEXT开发-自定义构建函数(基于最新api12稳定版)
华为·harmonyos
Tlog嵌入式1 天前
蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键
arm开发·stm32·单片机·mcu·物联网·蓝桥杯·iot
码农超哥同学1 天前
Python知识点:如何使用Google Cloud IoT与Python进行边缘计算
python·物联网·面试·编程·边缘计算