OpenHarmony标准系统-HDF框架之I2C驱动开发

请添加图片描述


引言


I2C基础知识

概念和特性

  • 集成电路总线,由串网12C(1C、12C、Inter-Integrated Circuit BUS)行数据线SDA和串行时钟线SCL组成,对于-个12C接口的器件,至少还需要电源和地线
  • 12C总线是双向、半双工传输支持多主机、多从机同时挂接在一条12C总线上,多主机同时请求总线时,可以通过冲突检测和仲裁机制防止总线数据被破坏;
  • 每个从设备都有唯一的地址,从设备可被寻址(又称被选中)只有被选中的从设备才能参与通信,每次通信只有一个主设备和个从设备参与;
  • 主设备发起一次通信,从设备响应:主从设备都可以发送和接收数据,SCL时钟由主设备发出,在工程中常见MCU或SOC作为主设备,主从设备地位可能交换。

12C是串行低速总线,常见传输速度如下
- 标准模式(Standard-mode):速率高达100kbit/s
- 快速模式(Fast-mode):速率高达400kbit/s
- 快速模式+(Fast-mode Plus):速率高达1Mbit/s。
- 高速模式(High-speed mode):速率高达3.4Mbit/s
工程中常见兼容标准模式和快速模式的12C从设备。

  • 一条12C总线上的所有从设备都有一个唯一的设备地址,不能与线上的其他设备地址重复;
  • 设备地址有7位和10位两种格式,常见7位格式;
  • I2C主设备对从设备可执行写操作和读操作,通过写地址和读地址区分写操作和读操作;

设备地址7位:1010000 (0x50)
写地址8位:设备地址左移1位,末位补0,10100000 (0xA0)
读地址8位:设备地址左移1位,末位补1,10100001 (0xA1)


  • 同一个I2C从设备可能具有多个设备地址,通常可通过从设备的管脚配置,以I2C接口的ROM芯片AT24C256为例:
    在这里插入图片描述
    在这里插入图片描述

协议,四种信号组合

在这里插入图片描述


I2C调试手段

硬件

在这里插入图片描述


软件

在这里插入图片描述


HDF框架下的I2C设备驱动

案例描述

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


驱动Dispatch

在这里插入图片描述


驱动读写

在这里插入图片描述


在这里插入图片描述


总结

在这里插入图片描述

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
<think>我们正在讨论的是在OpenHarmony开发板上安装和使用i2c-tools的方法。根据之前的对话历史,我们知道: - OpenHarmony内核支持I2C驱动框架HDF-开发板(如RK3568)上是可以支持i2c-tools的 - 需要交叉编译i2c-tools并集成到OpenHarmony系统中 步骤概览: 1. 准备OpenHarmony开发环境(包括全量编译OpenHarmony系统)。 2. 获取i2c-tools源码。 3. 交叉编译i2c-tools,生成可在OpenHarmony开发板上运行的可执行文件。 4. 将编译好的i2c-tools推送到开发板。 5. 赋予可执行权限并运行。 详细步骤: 1. **准备OpenHarmony开发环境** 参考引用[4],使用Docker环境可以方便地编译OpenHarmony。首先获取OpenHarmony源码并全量编译(确保可以编译RK3568开发板的镜像)。 ```bash # 根据引用[4]提供的命令进入Docker编译环境 docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0 ``` 然后按照OpenHarmony官方文档编译系统(例如:`./build.sh --product-name rk3568`)。 2. **获取i2c-tools源码** i2c-tools是一个开源的Linux工具集,我们可以从官网或GitHub获取。 ```bash wget https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/i2c-tools-4.3.tar.gz tar zxvf i2c-tools-4.3.tar.gz cd i2c-tools-4.3 ``` 3. **交叉编译i2c-tools** 在OpenHarmony的Docker环境中,使用OpenHarmony提供的交叉编译工具链来编译i2c-tools。 首先,需要确定OpenHarmony的交叉编译工具链路径。通常,编译完OpenHarmony后,工具链位于`out/rk3568/develop_tools/toolchain`目录下(具体路径可能因版本不同而有所变化)。 然后,设置环境变量,使用交叉编译工具链: ```bash # 假设交叉编译工具链的gcc路径为: # /home/openharmony/out/rk3568/develop_tools/toolchain/llvm-linux-unknown-ohos/llvm/bin/clang export CC="/home/openharmony/out/rk3568/develop_tools/toolchain/llvm-linux-unknown-ohos/llvm/bin/clang" export ARCH="arm64" # 根据开发板架构设置,RK3568是arm64 ``` 由于i2c-tools需要Linux内核头文件,我们需要指定OpenHarmony的内核头文件路径。在OpenHarmony源码中,内核头文件位于`kernel/linux/linux-5.10/include`(具体路径根据内核版本可能不同)。 编译命令: ```bash make CROSS_COMPILE=aarch64-linux-ohos- # 使用OpenHarmony的交叉编译前缀 ``` 或者,直接使用`CC`变量并指定`CFLAGS`: ```bash make CC=$CC CFLAGS="--target=aarch64-linux-ohos -I/home/openharmony/kernel/linux/linux-5.10/include" LDFLAGS="--target=aarch64-linux-ohos" ``` 注意:如果遇到内核头文件缺失,可能需要将OpenHarmony内核头文件复制到某个目录,并在CFLAGS中指定。 4. **将编译生成的可执行文件推送到开发板** 编译完成后,在i2c-tools目录下会生成`tools/i2cdetect`、`i2cdump`、`i2cset`、`i2cget`等工具。将这些文件通过ADB推送到开发板上。 ```bash adb connect <开发板IP> # 连接开发板 adb push ./tools/i2cdetect /system/bin adb push ./tools/i2cdump /system/bin adb push ./tools/i2cset /system/bin adb push ./tools/i2cget /system/bin ``` 5. **赋予可执行权限并运行** ```bash adb shell chmod +x /system/bin/i2cdetect adb shell chmod +x /system/bin/i2cdump adb shell chmod +x /system/bin/i2cset adb shell chmod +x /system/bin/i2cget ``` 然后就可以在开发板上使用这些工具了,例如扫描I2C总线: ```bash adb shell i2cdetect -l # 列出I2C总线 adb shell i2cdetect -y 0 # 扫描总线0上的设备 ``` 注意:如果开发板上的I2C设备节点权限不足,可能需要root权限。在开发阶段,可以通过`adb root`获取root权限。 引用说明: - 我们参考了引用[4]中提到的使用Docker编译环境来编译OpenHarmony,这为交叉编译i2c-tools提供了基础环境。 - 引用[2]和[4]都提到了RK3568开发板,说明该开发板是支持OpenHarmony的,并且可以作为目标平台。 如果在编译过程中遇到问题,可能需要调整Makefile或编译参数以适应OpenHarmony的环境。 相关问题: 1. 如何确认OpenHarmony开发板上的I2C总线编号? 2. 在OpenHarmony开发板上运行i2c-tools时出现权限问题如何解决? 3. 如何为OpenHarmony开发板交叉编译其他Linux工具? 4. 如何在OpenHarmony中编写自定义I2C设备驱动? </think>以下是在OpenHarmony开发板上安装并使用i2c-tools的完整方法,基于RK3568开发板示例(其他开发板流程类似): ### 安装步骤 #### 1. **准备交叉编译环境** 使用OpenHarmony官方Docker编译环境[^4]: ```bash docker run -it -v $(pwd):/home/openharmony \ swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0 ``` 2. **获取i2c-tools源码** ```bash wget https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/i2c-tools-4.3.tar.gz tar zxvf i2c-tools-4.3.tar.gz cd i2c-tools-4.3 ``` 3. **交叉编译** 使用OpenHarmony工具链编译静态链接版本: ```bash make CC=arm-linux-gnueabihf-gcc USE_STATIC_LIB=1 \ CFLAGS="-I/path/to/openharmony/kernel/include" ``` > 注:内核头文件路径通常在`kernel/linux/linux-5.10/include` 4. **集成到系统镜像** 将生成的可执行文件添加到文件系统: ```bash cp tools/*.py out/rk3568/packages/phone/system/bin/ cp tools/i2cdetect out/rk3568/packages/phone/system/bin/ ``` 5. **烧录固件** 重新编译并烧录系统镜像到开发板[^1]: ```bash ./build.sh --product-name rk3568 hdc_std flash ``` ### 使用方法 #### 1. **连接开发板调试**[^1]: ```bash hdc_std shell ``` 2. **扫描I2C设备**: ```bash i2cdetect -l # 列出所有I2C总线 i2cdetect -y 1 # 扫描总线1上的设备 ``` 输出示例: ``` 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- 33 -- -- -- -- -- -- -- -- -- -- -- -- ``` 3. **读写设备寄存器**: ```bash i2cget -y 1 0x33 0x00 # 读取0x33设备0x00寄存器 i2cset -y 1 0x33 0x01 0xFF # 向0x01寄存器写入0xFF ``` ### 常见问题解决 1. **权限问题**: 在`init.cfg`中添加: ``` "chmod 0666 /dev/i2c-*" ``` 2. **缺少依赖库**: 编译时添加`USE_STATIC_LIB=1`生成静态链接版本 3. **设备未识别**: 检查设备树配置: ```dts &i2c1 { status = "okay"; clock-frequency = <400000>; }; ``` --- ### 相关问题 1. 如何在OpenHarmony中增加新的I2C设备节点? 2. i2c-tools出现`No such file or directory`错误如何解决? 3. 如何通过HDF框架直接操作I2C设备寄存器?[^3] 4. RK3568开发I2C接口的物理引脚对应关系是什么?[^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值