CH34X-MPHSI高速Master扩展应用—I2C设备调试

news2024/11/19 2:43:28

一、前言 

本文介绍,基于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复用脚
11SCL-
12SDA-

CH347T 的I2C接口

PIN脚I2C功能脚GPIO复用脚
11SCLgpio3
12SDA-

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.o
  CC [M]  /home/wch/ch34x_mphsi_master_linux_V1.1/driver/ch34x_mphsi_master_spi.o
  CC [M]  /home/wch/ch34x_mphsi_master_linux_V1.1/driver/ch34x_mphsi_master_i2c.o
  CC [M]  /home/wch/ch34x_mphsi_master_linux_V1.1/driver/ch34x_mphsi_master_gpio.o
  LD [M]  /home/wch/ch34x_mphsi_master_linux_V1.1/driver/ch34x_mphsi_master.o
  MODPOST /home/wch/ch34x_mphsi_master_linux_V1.1/driver/Module.symvers
  CC [M]  /home/wch/ch34x_mphsi_master_linux_V1.1/driver/ch34x_mphsi_master.mod.o
  LD [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 22
     0  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 22
     0  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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python字符串前加r、f、u、l 的区别

嗨喽,大家好呀~这里是爱看美女的茜茜呐 👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了,直接在文末名片自取就可 f-strings 是…

Kubernetes基础(三)-Service外部网络访问方式

1 概述 NodePort、LoadBalancer 和 Ingress 都是将集群外部流量导入到集群内的方式,只是实现方式不同。以下是三种方式的工作原理 注意:这里说的每一点都基于Google Kubernetes Engine。如果用 minikube 或其它工具,以预置型模式&#xff08…

基于nodejs+vue学生成绩动态追踪管理系统_x3ime-

这个功能模块用来让工作人员进行后端登录。管理人员通过网站。在输入自己的用户名和密码、角色进行登录,登录后管理人员就可以对后台的信息相关的操作。 首先,设计后端管理的登陆页面。对页面的各个板块进行详细的设计,规划它们的字体大小&am…

数据存储——(探究内存里的秘密)

内存中的数据是代码的基因,相当于人体中的DNA。 你看代码就是看内存,因此了解内存中的数据存储十分有必要。 内容较多,制作不易,多多点赞支持一下,我自己会总结科班和it培训班的精华共享。 下面的图片有代码和解释 内…

钡铼BL302与PLC:提升酿酒业效率与品质的利器

啤酒是人类非常古老的酒精饮料,是水和茶之后世界上消耗量排名第三的饮料。 啤酒在生产过程中主要有制造麦芽、粉碎原料、糖化、发酵、贮酒後熟、过滤、灌装包装等工序流程。需要用到风选机、筛分机、糖化锅、发酵设备、过滤机、灌装机、包装机等食品机械设备。这些食…

西门子S7协议及报文格式详解

一、简介 S7Comm(S7 Communication)是西门子专有的协议,是西门子S7通讯协议簇里的一种。 S7通信协议是西门子S7系列PLC内部集成的一种通信协议,是S7系列PLC的精髓所在。 它是一种运行在传输层之上的(会话层/表示层/应…

广州华锐互动:VR结绳逃生训练模拟真实火灾场景,增强训练沉浸感

随着科技的发展,虚拟现实(VR)技术已被广泛应用到各个领域,其中包括消防训练。VR消防结绳训练是一种创新的消防训练方式,它通过虚拟现实技术模拟真实的灭火场景,使消防人员能够在无风险的环境中进行高强度的…

stable diffusion和gpt4-free快速运行

这是一个快速搭建环境并运行的教程 stable diffusion快速运行gpt快速运行 包含已经搭建好的环境和指令,代码等运行所需。安装好系统必备anaconda、conda即可运行。 stable diffusion快速运行 github: AUTOMATIC1111/稳定扩散网络UI:稳定扩散网页用户界…

2024新款进销存系统erp管理系统

环境要求 服务器系统 Linux、Unix、Mac、Windows web服务器 Apache、Nginx、IIS、其他 MySQL版本 5.7 PHP版本 8.0 采购价格 当前商品如进行过采购,则采购价格列内会出现价格信息,及采购的历史价格,点击后面的图标进入历史信息页面。 库存…

OJ练习第182题——字典树(前缀树)

字典树(前缀树) 208. 实现 Trie (前缀树)题目描述示例知识补充官解代码 211. 添加与搜索单词 - 数据结构设计题目描述示例思路Java代码 208. 实现 Trie (前缀树) 力扣链接:208. 实现 Trie (前缀树) 题目描述 示例 知识补充 插入字符串 我…

SPI—读写串行FLASH

一、SPI协议简介 SPI协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛的使用在ADC、LCD等设备与MCU之间,要求通讯速率比较高的场合。 SP…

实验室信息管理系统(LIMS)全套源码,ASP.NET Dotnet 3.5 +EXT.NET+MSSQL 2018

实验室信息管理系统(LIMS)源码 检测实验室LIMS系统全套源码 技术架构:ASP.NET Dotnet 3.5 EXT.NETMSSQL 2018 实验室信息管理系统(LIMS)能够完成实验室数据和信息的收集、分析、报告和管理的系统。它是现代实验室综合管理的一种理念、技术、方…

【Nuxt】01 什么是SSR 服务端渲染

前言 在当前的前端开发工作中,我们见到最多的三种渲染方式,如下: CSR:Client Side Rendering,客户端(通常是浏览器)渲染;SSR:Server Side Rendering,服务端…

如何一键提取微信背景图?

微信图文中的背景图,就像室内装修中的墙纸。使用不同颜色、图案的背景图能让文章更有质感,更立体,能给读者带来不一样的视觉体验。那看到其他公众号用的背景图很好看,自己也想用,怎么办?(以速排…

国货疯抢流量,B站接连爆发800万播放实现破圈

近日,“79元商战”的消息洗刷全平台,众多国货品牌的“不容易”开始被越来越多的消费者注意到,消费者们自发性地开始重新审视真正做产品的国货品牌们,并为之全力支持。有网友笑称:这“泼天的富贵”终于落到了国货品牌的…

软信天成:元数据的干货分享!建议点赞收藏

元数据(Metadata)为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。简单来讲,元数…

golang工程——grpc一元请求与流请求

唉,难顶,像块砖一样到处搬。又跑去golang技术栈的项目俩月 本篇博客多有参考,记录一下近期学习 rpc、grpc原理 grpc 是一项进程间通信技术,可以用来连接、调用、操作和调试构建分布式程序,调用过程如同调用函数一样&…

【剑指Offer】77.按之字形顺序打印二叉树

题目 给定一个二叉树&#xff0c;返回该二叉树的之字形层序遍历&#xff0c;&#xff08;第一层从左向右&#xff0c;下一层从右向左&#xff0c;一直这样交替&#xff09; 数据范围&#xff1a;0≤n≤1500,树上每个节点的val满足 ∣val∣<1500 要求&#xff1a;空间复杂度…

深入浅出DAX:SELECTEDVALUE()

深入浅出DAX&#xff1a;SELECTEDVALUE() SELECTEDVALUE()&#xff0c;如果筛选 columnName 的上下文后仅剩下一个非重复值&#xff0c;则返回该值。否则返回alternateResult&#xff0c;语法如下&#xff1a; SELECTEDVALUE(<columnName>[, <alternateResult>] …

CorelDRAW Graphics Suite2023绿色中文版本下载教程

CorelDRAW Graphics Suite2023版是领先的一体化软件包&#xff0c;它包括多个程序&#xff0c;如CorelDRAW、Corel PHOTO-PAINT、Corel CAPTURE、Corel Font Manager、Duplexing Wizard等&#xff0c;可全部安装&#xff0c;也可根据实际需要选择进行安装&#xff0c;都是最新版…