CH34X-MPHSI高速Master扩展应用—I2C设备调试
一、前言
本文介绍,基于USB2.0高速USB转接芯片CH347,配合厂商提供的USB转MPHSI(Multi Protocol High-Speed Serial Interface)Master总线驱动(CH34X-MPHSI-Master)为系统扩展I2C总线的用法,除此之外,还可以扩展SPI总线和GPIO等资源。
驱动软件正常工作后,会在系统下创建新的I2C Master,拥有独立的bus num,原I2C器件的设备驱动可直接通过DTS配置文件或者sysfs节点挂载到该总线上,原有设备驱动无需任何修改。
项目地址:GitHub - WCHSoftGroup/ch34x_mphsi_master_linux
二、应用框图
三、CH347 I2C接口特点
CH347F 的I2C接口
PIN脚 | I2C功能脚 | GPIO复用脚 |
---|---|---|
11 | SCL | - |
12 | SDA | - |
CH347T 的I2C接口
PIN脚 | I2C功能脚 | GPIO复用脚 |
---|---|---|
11 | SCL | gpio3 |
12 | SDA | - |
CH347F/T支持至少4种I2C时钟:20kHz,100kHz,400kHz和750kHz。驱动配置的默认I2C时钟为100KHz,当前不支持动态修改该时钟频率,若需要修改可以在ch34x_mphsi_i2c_init函数中修改。
此外,芯片支持时钟延展功能(I2C Clock Stretching),如果需要开启,也可以在ch34x_mphsi_i2c_init 函数中开启。
四、驱动使用与确认SPI总线信息
本文基于树莓派4B平台,使用CH347F/T芯片通过树莓派的USB接口扩展I2C总线接口,介绍不同的I2C设备的应用实例。
1. 编译驱动
root@raspberrypi:/home/wch/ch34x_mphsi_master_linux_V1.1/driver # make
make -C /lib/modules/6.1.21-v8+/build M=/home/wch/ch34x_mphsi_master_linux_V1.1/driver modules
make[1]: 进入目录“/usr/src/linux-headers-6.1.21-v8+”CC [M] /home/wch/ch34x_mphsi_master_linux_V1.1/driver/ch34x_mphsi_master_usb.oCC [M] /home/wch/ch34x_mphsi_master_linux_V1.1/driver/ch34x_mphsi_master_spi.oCC [M] /home/wch/ch34x_mphsi_master_linux_V1.1/driver/ch34x_mphsi_master_i2c.oCC [M] /home/wch/ch34x_mphsi_master_linux_V1.1/driver/ch34x_mphsi_master_gpio.oLD [M] /home/wch/ch34x_mphsi_master_linux_V1.1/driver/ch34x_mphsi_master.oMODPOST /home/wch/ch34x_mphsi_master_linux_V1.1/driver/Module.symversCC [M] /home/wch/ch34x_mphsi_master_linux_V1.1/driver/ch34x_mphsi_master.mod.oLD [M] /home/wch/ch34x_mphsi_master_linux_V1.1/driver/ch34x_mphsi_master.ko
make[1]: 离开目录“/usr/src/linux-headers-6.1.21-v8+”
2. 加载驱动
root@raspberrypi:/home/wch/ch34x_mphsi_master_linux_V1.1/driver # make load
insmod ch34x_mphsi_master.ko
3、确认I2C总线信息
将CH347F/T 设备通过USB连接至树莓派,查看系统日志,可看到扩展的I2C总线号为I2C bus 22
[ 218.193644] ch34x_mphsi_master: loading out-of-tree module taints kernel.
[ 218.194619] mphsi-ch34x 1-1.2:1.2: ch34x_cfg_probe: output SPI slave with CS0
[ 218.194633] mphsi-ch34x 1-1.2:1.2: ch34x_cfg_probe: output SPI slave with CS1
[ 218.195050] mphsi-ch34x 1-1.2:1.2: ch34x_spi_probe: SPI master connected to SPI bus 7
[ 218.195323] mphsi-ch34x 1-1.2:1.2: ch34x_mphsi_i2c_probe: I2C master connected to I2C bus 22
[ 218.195645] mphsi-ch34x 1-1.2:1.2: ch34x_mphsi_gpio_probe: registered GPIOs from 501 to 503
[ 218.195663] mphsi-ch34x 1-1.2:1.2: ch34x_usb_probe: USB to SPI/I2C/GPIO adapter ch34x now attached.
[ 218.195778] usbcore: registered new interface driver mphsi-ch34x
也可使用 i2c-tools 工具查看系统所有I2C总线。
root@raspberrypi:~ # i2cdetect -l
i2c-20 i2c fef04500.i2c I2C adapter
i2c-1 i2c bcm2835 (i2c@7e804000) I2C adapter
i2c-21 i2c fef09500.i2c I2C adapter
i2c-22 i2c ch34x-mphsi-i2c at bus 001 device 003 I2C adapter
将SHT3X-DIS模块连接到CH347的I2C接口,然后扫描I2C总线下的I2C设备,设备(UU)地址为0x44(如果未加载对应设备驱动,UU位置显示为44)
root@raspberrypi:~ # i2cdetect -y -a 220 1 2 3 4 5 6 7 8 9 a b c d e f 00: 00 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
五、24C02 EEPROM模块调试
24C02是一个2Kbit的串行EEPROM存储芯片,可存储256个字节数据。
root@raspberrypi:~ # i2cdetect -y -a 220 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 51 52 53 54 55 56 57 -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
读写EEPROM
root@raspberrypi:~ # i2cset -y 22 0x50 0 0x11 root@raspberrypi:~ # i2cset -y 22 0x50 1 0x11 root@raspberrypi:~ # i2cset -y 22 0x50 2 0x22 root@raspberrypi:~ # root@raspberrypi:~ # i2cget -y 22 0x50 0 0x11 root@raspberrypi:~ # i2cget -y 22 0x50 1 0x11 root@raspberrypi:~ # i2cget -y 22 0x50 2 0x22 root@raspberrypi:~ # root@raspberrypi:~ # i2ctransfer 22 w8@0x50 0x00 0xff- WARNING! This program can confuse your I2C bus, cause data loss and worse! I will send the following messages to device file /dev/i2c-22: msg 0: addr 0x50, write, len 8, buf 0x00 0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 Continue? [y/N] y root@raspberrypi:~ # root@raspberrypi:~ # i2ctransfer 22 w1@0x50 0x00 r7 WARNING! This program can confuse your I2C bus, cause data loss and worse! I will send the following messages to device file /dev/i2c-22: msg 0: addr 0x50, write, len 1, buf 0x00 msg 1: addr 0x50, read, len 7 Continue? [y/N] y 0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 root@raspberrypi:~ #
六、SHT3X-DIS温湿度传感器模块调试
SHT3x-DIS是Sensirion新一代的温湿度传感器芯片,精度为±2%RH和±0.3℃,输入电压范围从2.4V到5.5V,采用IIC总线接口,速率可达1MHz。测量温湿度范围分别为是-40℃ ~ 125℃和0 ~ 100%。
加载sht3x驱动
root@raspberrypi:~ # insmod sht3x.ko
将 i2c_client 设备名挂载到 I2C 总线
root@raspberrypi:~ # echo "sht3x 0x44" > /sys/bus/i2c/devices/i2c-22/new_device
[ 1594.345331] i2c i2c-22: new_device: Instantiated device sht3x at 0x44
运行测试程序,获取当前温度和湿度信息
root@raspberrypi:~ # ./sht3x_test_app
temperature: 27.14 humidity: 62.28
七、MPU6050功能测试
MPU6050 是 InvenSense 公司推出的整合性 6 轴运动处理组件,其内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并且含有一个IIC 接口, 可用于连接外部磁力传感器,并利用自带的数字运动处理器(DMP: Digital Motion Processor) 硬件加速引擎,通过主 I2C接口,向应用端输出完整的 9 轴融合演算数据。
参考资料MPU-6050 | TDK InvenSense
加载 mpu6050 驱动
root@raspberrypi:~ # insmod mpu6050.ko
将 i2c_client 设备名挂载到 I2C 总线
root@raspberrypi:~ # echo "mpu6050 0x68" > /sys/bus/i2c/devices/i2c-22/new_device
[ 188.063732] i2c i2c-22: new_device: Instantiated device i2c_mpu6050 at 0x68
运行测试程序,可获取当前位置信息(原始数据)
root@raspberrypi:/home/wch/mpu6050_test # ./test_app
AX=1112, AY=-574, AZ=16212 GX=-252, GY=-16, GZ=-38
AX=1054, AY=-578, AZ=16220 GX=-259, GY=-17, GZ=-41
AX=1066, AY=-584, AZ=16260 GX=-163, GY=-26, GZ=-41
相关文章:

CH34X-MPHSI高速Master扩展应用—I2C设备调试
一、前言 本文介绍,基于USB2.0高速USB转接芯片CH347,配合厂商提供的USB转MPHSI(Multi Protocol High-Speed Serial Interface)Master总线驱动(CH34X-MPHSI-Master)为系统扩展I2C总线的用法,除…...
记一次正式环境升级docker服务基础进行版本异常
因为服务的httpd和tomcat基础镜像版本比较旧,漏洞多,需要升级至最新版本。在本地环境和测试环境都是直接将dockerfile中的FROM基础镜像升级至最新: httpd:由httpd:2.4.52-alpine升级至httpd:2.4.57 tomcat:由4年前的…...

leetcode面试经典150题第一弹(一)
leetcode面试经典150题第一弹 一、合并俩个有序数组(难度:简单) 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并…...

VME-7807RC-414001 350-93007807-414001 VMIVME-017807-411001 VMIVME-017807-414001
VME-7807RC-414001 350-93007807-414001 VMIVME-017807-411001 VMIVME-017807-414001 由于第12代英特尔酷睿处理器的16核/24线程配置,Nuvo-9000型号与之前的平台相比,性能大幅提升。它们还支持新的DDR5内存标准,以获得更多内存带宽…...

01-Zookeeper特性与节点数据类型详解
上一篇: 在了解Zookeeper之前,需要对分布式相关知识有一定了解,什么是分布式系统呢?通常情况下,单个物理节点很容易达到性能,计算或者容量的瓶颈,所以这个时候就需要多个物理节点来共同完成某项…...
TP6 TP8 使用阿里官方OSS SDK方法
安装 composer require aliyuncs/oss-sdk-php 官网:GitHub - aliyun/aliyun-oss-php-sdk: Aliyun OSS SDK for PHP 二、PHP简单上传 官网教程:如何进行字符串上传和文件上传_对象存储 OSS-阿里云帮助中心 引入 use OSS\OssClient; use OSS\Core\OssE…...

SkyWalking分布式链路追踪学习
为什么要用分布式链路追踪 实际生产中,面对几十个、甚至成百上千个的微服务实例,如果一旦某个实例发生宕机,如果不能快速定位、提交预警,对实际生产造成的损失无疑是巨大的。所以,要对微服务进行监控、预警࿰…...

git revert 撤销之前的提交
git revert 用来撤销之前的提交,它会生成一个新的 commit id 。 输入 git revert --help 可以看到帮忙信息。 git revert commitID 不编辑新的 commit 说明 git log 找到需要撤销的 commitID , 然后执行 git revert commitID ,会提示如下…...

rk3568环境配置和推理报错: RKNN_ERR_MALLOC_FAIL
前言 最近在部署算法在板子侧遇到的一些问题汇总一下: 一、版本问题 经过测试现在将自己环境配置如下: 本地linux安装rknn-toolkit2-1.5.0 本地Linux使用的miniconda新建的一个python虚拟环境(自行网上查找相关方法) 安装好自…...
网络工程师基础笔记(一)
一、接入网 接入网,是指将端系统物理连接到边缘路由器的网络。 (1)家庭接入:数字用户线(DSL)、电缆、光纤到户(FTTH)卫星和拨号接入。 (2)企业(家庭)接入&…...

Postman应用——Headers请求头设置
文章目录 Header设置Header删除或禁用Header批量编辑Header预设添加 一般在接口需要校验签名时,Headers请求头用来携带签名和生成签名需要的参数,在Postman也可以设置请求头在接口请求时携带参数。 Header设置 说明: Key:Header…...

人人都是项目经理-项目管理概述(一)
一、重新认识项目管理 1. 什么是项目 项目(Project),是为提供某项独特的产品(交付物),服务或成果所做的临时性努力。 – PMBOK指南 项目是指一系列独特的、复杂的并相互关联的活动,这些活动有着…...
浅谈基于物联网的医院消防安全管理
安科瑞 华楠 摘 要:医院消防物联网将原本与网络无关的消防设施和网络结合起来,将消防监督管理、防火灭火所需的相关信息进行汇总,可以让医院更加轻松地发现和处理医院的警情信息,降低火灾发生频率。 关键词:物联网技…...
户用储能争斗:华宝新能“稳”、正浩科技“快”、安克创新“急”
便携式储能市场一片红海,户用储能(家用储能)成为储能企业新的“格斗场”。 过去两年,房车游、户外旅行、露营等旅游项目热度攀升,户外用电需求与日俱增,嗅觉敏锐的资本方相继加码便携储能市场,越…...
【面试篇】集合相关高频面试题
目录 1. ArrayList和LinkedList的区别?2. HashMap和HashTable的区别?1. ArrayList和LinkedList的区别? ArrayListLinkedList数据结构数组链表插入和删除在中间插入或删除元素时需要移动数组中的其他元素,时间复杂度为O(n)只需要调整指针,时间复杂度为O(1)访问元素通过索引…...

RT Preempt linux学习笔记
RT Preempt linux学习笔记 一、实时操作系统(Realtime Operating System) 1. 什么是实时操作系统 A real-time system is a time-bound system which has well-defined, fixed time constraints. Processing must be done within the defined constra…...

JavaScript 基础第四天笔记
JavaScript 基础 - 第4天笔记 理解封装的意义,能够通过函数的声明实现逻辑的封装,知道对象数据类型的特征,结合数学对象实现简单计算功能。 理解函数的封装的特征掌握函数声明的语法理解什么是函数的返回值知道并能使用常见的内置函数 函数 …...

Unity 2021.x及以下全版本Crack
前言 最近Unity那档子事不出来了吗,搞得所有人都挺烦的,顺便在公司内网需要我完成一个游戏的项目,就研究了一下如何将Unity给Crack掉。 注意所有操作应有连接外网的权限 以我选择的版本为例,我使用的是Unity 2021.3.5f1与Unity…...

基于知识蒸馏的夜间低照度图像增强及目标检测
源自:应用光学 作者:苗德邻, 刘磊, 莫涌超, 胡朝龙, 张益军, 钱芸生. “人工智能技术与咨询” 发布 摘要 为了实现夜间低照度图像的增强,提高目标检测模型在夜间低照度条件下的检测精度并减小模型的计算成本,提出了一种基…...

4、ARM异常处理
一、异常处理 1、异常 概念 处理器在正常执行程序的过程中可能会遇到一些不正常的的事件发生,这时处理器就要将当前的程序暂停下来转去处理这个异常的事件,异常事件完成后再返回到之前被异常打断的点继续执行 2、异常处理机制 不同的处理器对异常的…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...