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

在这里插入图片描述

目录

  • 一、 I2C 概述
  • 二、I2C 模块相关API
  • 三、接口调用实例
  • 四、I2C HDF驱动开发
    • 4.1、开发步骤(待续...)
  • 坚持就有收获

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

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

坚持就有收获

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/396175.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity老项目Android 13支持

Unity老项目Android 13支持 前言 Google官方要求新、老app在一定时间要求内需要面向Android 12、Android 13构建,不然不给app过审。我们之前是面向Android API 30构建的,现在需要支持面向Android API 33构建。 https://developer.android.com/about/ver…

为什么2023年是AI视频的突破年,以及对2024年的预期#a16z

2023年所暴露的AI生成视频的各种问题,大部分被OpenAI发布的Sora解决了吗?以下为a16z发布的总结,在关键之处,我做了OpenAI Sora的对照备注。 推荐阅读,了解视频生成技术进展。 Why 2023 Was AI Video’s Breakout Year,…

怎么清理mac系统缓存系统垃圾文件 ?怎么清理mac系统DNS缓存

很多使用苹果电脑的用户都喜欢在同时运行多个软件,不过这样会导致在运行一些大型软件的时候出现不必要的卡顿现象,这时候我们就可以去清理下内存,不过很多人可能并不知道正确的清内存方式,下面就和小编一起来看看吧。 mac系统是一…

力扣94 二叉树的中序遍历 (Java版本) 递归、非递归

文章目录 题目描述递归解法非递归解法 题目描述 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root [] 输出:[] 示…

chrome版本117驱动下载路,解决版本不匹配问题

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

伦敦金适合现在进行投资吗?

伦敦金作为一种贵金属投资品种,近年来在全球范围内受到了越来越多的关注。那么,伦敦金适合现在进行投资吗?在回答这个问题之前,我们先来了解一下什么是伦敦金。 伦敦金,顾名思义,是指在伦敦市场上交易的黄…

小白都能看懂的力扣算法详解——哈希表(一)

!!本篇所选题目及解题思路均来自​​​​​​代码随想录 (programmercarl.com) 一 LC242.有效的字母异位词 题目要求: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字…

阿里云服务器镜像是什么?如何选择镜像?

阿里云服务器镜像怎么选择?云服务器操作系统镜像分为Linux和Windows两大类,Linux可以选择Alibaba Cloud Linux,Windows可以选择Windows Server 2022数据中心版64位中文版,阿里云服务器网aliyunfuwuqi.com来详细说下阿里云服务器操…

社交商业策略:揭秘Facebook Shops的成功之道

随着数字化时代的不断发展,社交媒体已经成为了商业活动的重要平台之一。在这个趋势下,Facebook作为全球最大的社交媒体平台之一,不仅仅是人们交流互动的场所,更成为了商家开展电子商务的重要渠道。其中,Facebook Shops…

python毕设选题 - 大数据商城人流数据分析与可视化 - python 大数据分析

文章目录 0 前言课题背景分析方法与过程初步分析:总体流程:1.数据探索分析2.数据预处理3.构建模型 总结 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到…

如何在Windows 10中停止正在进行的更新?这里有你需要知道的细节

本文介绍如何取消正在进行的Windows更新。说明适用于Windows 10家庭版和专业版。 如何在Windows下载更新后取消更新 如果你还没有完全安装Windows 10更新,但你的电脑已经下载了该文件,并且关闭和重置选项已更改为“更新并关闭”和“更新并重新启动”&a…

EI级 | Matlab实现TCN-GRU-MATT、TCN-GRU、TCN、GRU多变量时间序列预测对比

EI级 | Matlab实现TCN-GRU-MATT、TCN-GRU、TCN、GRU多变量时间序列预测对比 目录 EI级 | Matlab实现TCN-GRU-MATT、TCN-GRU、TCN、GRU多变量时间序列预测对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 【EI级】Matlab实现TCN-GRU-MATT、TCN-GRU、TCN、GRU多变量时间…

消息中间件之RocketMQ源码分析(十)

Namesrv启动流程 第一步:脚本和启动参数配置。 启动命令 nohup ./bin/mqnamesrv -c ./conf/namesrv.conf > dev/null 2>&1 & 通过脚本配置启动基本参数,比如配置文件路径、JVM参数,调用NamesrvStartup.main()方法,解析命令行的…

斯坦福大学全能家政服务机器人Mobile ALOHA以及“小群体大智慧”Zooids集群机器人

斯坦福大学成功研发出低成本自主进化克隆人类行为和任务的能力全能型家政服务机器人。 原文标题: 【Mobile ALOHA-Learning Bimanual Mobile Manipulation with Low-Cost Whole-Body Teleoperation】 论文链接:【Mobile ALOHA (mobile-aloha.github.io)】。 以及由斯坦福大学…

【C项目】无头单向不循环链表

简介:本系列博客为C项目系列内容,通过代码来具体实现某个经典简单项目 适宜人群:已大体了解C语法同学 作者留言:本博客相关内容如需转载请注明出处,本人学疏才浅,难免存在些许错误,望留言指正 作…

代码随想录算法训练营第三十六天|435. 无重叠区间 763.划分字母区间 56. 合并区间

435. 无重叠区间 链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 细节: 1. 这道题目和 452.用最少数量的箭引爆气球 ,452中的弓箭数量其实就是 无重叠区间的数量,用总的区间数减去 无重叠区间的数…

C++入门学习(二十九)goto语句

在C中,goto语句是一种控制流语句,用于无条件地转移到程序中指定的行。goto语句的使用通常是不推荐的,因为它可能导致代码结构变得混乱、不易理解和维护。然而,在某些特殊情况下,goto语句可能是一种有效的解决方法。 示…

day2 2/19

1> 使用fread和fwrite完成两个文件的拷贝 #include<myhead.h> int main(int argc, const char *argv[]) {FILE*fp1NULL;FILE*fp2NULL;if((fp1fopen("./ggb.bmp","r"))NULL){perror("fopen error");return -1;}if((fp2fopen("./bl…

为什么你用的redis没有出现雪崩,击穿,穿透

一、前言 在大规模并发访问系统中&#xff0c;如果你的系统用到redis&#xff0c;在面试的时候面试官往往会问你的系统有没有出现雪崩&#xff0c;击穿&#xff0c;穿透这样的场景&#xff0c;然后是怎样解决的。博主也经常反复温习redis的特性&#xff0c;总是被雪崩&#xf…

MySQL数据库基础(十):DQL数据查询语言

文章目录 DQL数据查询语言 一、数据集准备 二、select查询 三、简单查询 四、条件查询 1、比较查询 2、范围查询 3、逻辑查询 4、模糊查询 5、非空查询 五、排序查询 六、聚合查询 七、分组查询与having子句 1、分组查询介绍 2、group by的使用 3、group by 聚…
最新文章