站内搜索
发作品签到
标准版

UK534-USB4I2C:单芯片Tiny-I2C-USB转换器

工程标签

344
0
0
1

简介

UK534-USB4I2C:芯片级的Tiny-I2C-USB(I2C-MP-USB或I2C-Pico-USB)转换器,软件和硬件全面兼容Tiny-I2C-USB。

简介:UK534-USB4I2C:芯片级的Tiny-I2C-USB(I2C-MP-USB或I2C-Pico-USB)转换器,软件和硬件全面兼容Tiny-I2C-USB。
复刻成本:49

开源协议

CC BY-NC-SA 3.0

(未经作者授权,禁止转载)
创建时间:2025-07-27 16:54:49更新时间:2025-08-05 14:22:14

描述

UK534-USB4I2C使用说明

版本号:V1.03C
发布日期:2025年6月8日

UK534-USB4I2C实质是芯片级的Tiny-I2C-USB(I2C-MP-USB或I2C-Pico-USB)转换器,软件和硬件全面兼容Tiny-I2C-USB,理论上可以兼容Tiny-I2C-USB、I2C-MP-USB、I2C-Pico-USB的全部软件资源。

硬件连接

UK534-USB4I2C可以单芯片实现Tiny-I2C-USB协议转换,原生真正的USB2.0接口,外围电路非常简洁,QFN28封装,只需必要的去耦电容和i2c上拉电阻,无需外围晶振及繁琐的USB接口配置电阻(原版Tiny-I2C-USB必需),硬件开源在https://oshwhub.com/openiic/uk534-usb4i2c-piic

图示, 示意图

AI 生成的内容可能不正确。

连接示意

UK534-USB4I2C连接示意图如下:

自动缩放到页面大小

实物连接PIIC-EXT(集成AT24C08,增强i2c通信距离可达80cm,SCL时钟可稳定在400KHz通信)图如下:

电子器材

AI 生成的内容可能不正确。

VID选择

源于一些众所周知的原因,UK534-USB4I2C提供两个不同的USB VID编号,用户通过VID引脚来自由配置。

  1. VID连接GND时:VID/PID= (0x1c40, 0x0534),默认设置;
  2. VID连接VCC时:VID/PID= (0x0403, 0xC631),用户需自行配置;

实际连接PC后可以产看到以下信息:

图形用户界面, 文本, 应用程序, 电子邮件

AI 生成的内容可能不正确。

常见问题及排查

问题现象

可能原因

解决方案

设备未被识别

USB接触不良或驱动未安装

1. 更换USB端口;

2. 检查设备管理器(Windows);

3. 重新安装驱动

I2C设备无响应

接线错误或电源不匹配

1. 检查SDA/SCL是否接反;

2. 确认电源电压(3.3V);

3. 检查设备地址是否正确

通信不稳定

缺少上拉电阻

在SDA和SCL线上添加4.7kΩ上拉电阻

数据错误

信号干扰或线缆过长

1. 缩短连接线缆(<30cm);

2. 使用双绞线或屏蔽线;

3. 降低I2C时钟频率

设备发热

电源短路

立即断开电源,检查VCC-GND是否短路

Linux i2c-tools

Linux(含各种发行版本)下可以直接使用i2c-tools工具操作i2c设备。

i2c-tools安装与检测

# 安装工具

sudo apt install i2c-tools

# 检测可用I2C适配器
i2cdetect -l

# 扫描总线7上的设备

i2cdetect -y 7

i2c-tools命令详解

常见的i2c-tools命令有:

- tools

- i2cdetect : 扫描i2c总线上的设备

- i2cget : 读取i2c设备上的某个寄存器值

- i2cset : 将值写入i2c设备上的某个寄存器

- i2cdump : 读取某个i2c设备所有寄存器的值

- i2ctransfer : 一次性从i2c设备读取多个寄存器的值

i2cdetect : 扫描i2c总线上的设备

- i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST]

- -y : 关闭交互模式

- -a : 强制扫描非常规地址(不推荐)

- -q : 使用 SMBus 的 "quick write" 命令进行探测(不推荐)

- -r : 使用 SMBus 的 "receive byte" 命令进行探测(不推荐)

- I2CBUS : i2c-x中的x总线编号

- FIRST LAST : 操作地址范围FIRST~LAST

- -F : 显示适配器实现的功能列表并退出

- -V : 显示版本信息并退出

- -l : 输出已安装 I2C 总线的列表

- eg : sudo i2cdetect -y -r 7 0x33 0x5F

- eg : sudo i2cdetect -y 7

表格

AI 生成的内容可能不正确。

i2cget : 读取i2c设备上的某个寄存器值

- i2cget [-f] [-y] [-a] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE]]

- -f : 强制读取数据,即使设备忙

- -y : 不提示确认,直接读取数据

- -a : 以字节形式输出数据

- I2CBUS : 指定I2C总线的编号

- CHIP-ADDRESS : 指定I2C设备的地址。

- DATA-ADDRESS : 可选参数,指定要读取的寄存器地址

- MODE : 可选参数,指定读取数据的模式

- eg : sudo i2cget -y -a 7 0x53 0x00 c

i2cset : 将值写入i2c设备上的某个寄存器

- i2cset [-f] [-y] [-m MASK] [-r] [-a] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]

- -f : 强制执行操作,即使总线被锁定也可以使用

- -y : 不要询问确认,直接执行操作。

- -m MASK : 使用位掩码设置数据

- -r : 从设备读回数据

- -a : 自动增加数据地址

- I2CBUS : I2C总线号,例如/dev/i2c-1

- CHIP-ADDRESS : I2C设备的地址

- DATA-ADDRESS : 要写入或读取的数据地址

- VALUE : 要写入的数据值

- MODE : 可选参数,用于指定数据的格式,例如"b"表示字节,"w"表示字

- eg : sudo i2cset -r -a 7 0x53 0x30 0x24

i2cdump : 读取某个i2c设备所有寄存器的值

- i2cdump [-f] [-y] [-r first-last] [-a] I2CBUS ADDRESS [MODE [BANK [BANKREG]]]

- -f : 强制访问设备

- -y : 关闭人机交互模式

- -r first-last : 指定寄存器范围,只能扫描从first到last地址区域

- -a : 强制扫描非常规地址

- I2CBUS : i2c-x中的x总线编号

- ADDRESS : 设备地址(指定设备)

- MODE : 指定读取的大小,b字节,w字,s是SMBus块,i是i2c块,c连续字节

- BANK : i2c设备的BANK号

- BANKREG : BANK中的寄存器号

- eg : sudo i2cdump -f -y 7 0x53 c

日历

AI 生成的内容可能不正确。

i2ctransfer : 一次性从i2c设备读取多个寄存器的值

- i2ctransfer [-f] [-y] [-v] [-V] [-a] I2CBUS DESC [DATA] [DESC [DATA]]...

- -f : 强制执行操作,即使设备忙碌

- -y : 不要询问用户确认,直接执行操作

- -v : 显示详细的输出信息

- -V : 显示版本信息

- -a : 自动发送读取命令,而不需要显式指定

- I2CBUS : i2c-x中的x总线编号

- DESC : 以此形式描述传输:{r|w}LENGTH[@address],读或写一定长度的字节到某设备0地址

- DATA : DESC描述的字节数据,空格分开

- eg : sudo i2ctransfer -y -a 7 r3@0x53

i2c-stub-from-dum : 使用文件模拟i2c设备进行虚拟测试

- i2c-stub-from-dump [-V] [-f] [-t] [-d ] [-c ]

- -V:显示命令的版本信息。

- -f:强制创建i2c stub设备,即使设备已经存在。

- -t:在创建设备后运行i2c-stub-test测试程序。

- -d \:指定每个字节之间的延迟时间(以毫秒为单位)。

- -c \:指定要从转储文件中读取的字节数。

- \:指定i2c设备文件的路径。

- \:指定i2c数据转储文件的路径。

i2c-tools操作AT24C02示例

# 1. 写入单个字节到地址0x10
sudo i2cset -y 7 0x50 0x10 0xA5

# 2. 从地址0x10读取字节
sudo i2cget -y 7 0x50 0x10

# 3. 写入多个字节(0x00-0x0F)
sudo i2cset -y 7 0x50 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F i

# 4. 转储EEPROM内容(前32字节)
sudo i2cdump -y -r 0x00-0x1F 7 0x50 b

# 5. 高级传输(写地址后读数据)
sudo i2ctransfer -y 7 w1@0x50 0x10 r2

Win/Mac/Lin跨平台调用usb4i2c.py

非常遗憾,Win/Mac没办法直接使用i2c-tools,因为Win/Mac在底层禁止了直接通过I2C总线访问外设,所以"I2C-Tiny-USB"基本是Linux用户。

福气啦。usb4i2c.py借助Python语言技巧,UK534-USB4I2C在保持与"I2C-Tiny-USB"或"I2C-MP-USB"或"I2C-Pico-USB"兼容的同时,通过libusb跨平台驱动、pyusb Python库和usb4i2c.py实现了Win/Mac/Lin跨平台i2c调试。

安装libusb与pyusb.py

Windows没有官方i2c-tools支持,替代方案:1、使用Python+libusb开发(见3.2/3.3节);2、使用第三方工具如NinjaI2C、Bus Pirate等。

Mac OS X从10.8(Mountain Lion) 开始不再支持i2c-tools,内核架构变化移除了I2C驱动支持。替代方案:使用Python+libusb(见5.1/5.3节)。

Windows安装libusb驱动与pyusb

  1. 下载Zadig驱动工具:https://zadig.akeo.ie/
  2. 运行Zadig,选择"Options > List All Devices"

图形用户界面, 应用程序

AI 生成的内容可能不正确。

  1. 从列表中选择"UK534-USB4I2C"、"I2C-Tiny-USB"或"I2C-MP-USB"

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

  1. 选择"libusb-win32"驱动,点击"Install Driver"

图形用户界面, 文本, 应用程序

AI 生成的内容可能不正确。

正确安装驱动后,可在设备管理器看到libusb-win32 devices->UK534-USB4I2C设备号。

# win安装pyusb库
pip install pyusb

常见问题排查

  • 设备未列出:重新插拔设备,检查设备管理器
  • 驱动安装失败:以管理员身份运行Zadig
  • DLL缺失错误:确认libusb-1.0.dll在系统PATH或Python目录

Mac安装libusb驱动与pyusb

# 安装Homebrew
/bin/bash -c "$(curl -fsSL [https://raw.githubusercontent.com/Homebrew/install/HEAD/install.s](https://raw.githubusercontent.com/Homebrew/install/HEAD/install.s)h)"

# 安装libusb
brew install libusb

# 添加USB访问权限
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="c631", MODE="0666"' | sudo tee /etc/udev/rules.d/99-i2c-tiny-usb.rules

# 安装Python绑定
pip install pyusb

常见问题

  • USB访问被拒绝:在系统偏好设置中启用USB设备访问
  • 库未找到:添加libusb到库路径export DYLD_LIBRARY_PATH=/opt/homebrew/lib
  • 设备未列出:重启系统或重新插拔设备

linux安装libusb与pyusb

# 安装依赖
sudo apt install libusb-1.0-0-dev

# 添加udev规则
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="c631", MODE="0666"' | sudo tee /etc/udev/rules.d/99-i2c-tiny-usb.rules

# 重新加载规则
sudo udevadm control --reload-rules
sudo udevadm trigger

# 安装Python绑定
pip install pyusb

常见问题

  • LIBUSB_ERROR_ACCESS:确认udev规则生效,或使用sudo
  • 设备未找到:运行lsusb检查设备是否列出
  • 驱动冲突:卸载内核驱动sudo modprobe -r i2c-tiny-usb

安装usb4i2c.py库文件

方法一:从源码安装

git clone https://github.com/usb-i2c-spi/uk534-usb4i2c.git

cd uk534-usb4i2c

pip install .

方法二:直接安装

pip install usb4i2c

使用usb4i2c.py库操作i2c设备

以下案例都采用AT24C02作为i2c device,也可以选用PIIC-EXT快速测试。

USB4I2C-TEST.py

import sys

import os

# 添加包路径到系统路径

package_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))

if package_path not in sys.path:

sys.path.append(package_path)

from usb4i2c import I2CTinyUSB

from time import sleep

# 初始化设备

i2c = I2CTinyUSB()

# 扫描 I2C 总线

devices = i2c.scan_devices()

print(f"Detected devices: {[hex(addr) for addr in devices]}")

# 基本读写操作

i2c.write_byte(0x50, 0x10, 0xA5) # 向设备0x50的寄存器0x10写入0xA5

sleep(0.1)

value = i2c.read_byte(0x50, 0x10) # 从设备0x50的寄存器0x10读取值

print(f"Read value: 0x{value:02X}")

# 多字节操作

i2c.write_bytes(0x50, 0x00, [0x01, 0x02, 0x03]) # 写入多个字节

sleep(0.1)

data = i2c.read_bytes(0x50, 0x00, 3) # 读取多个字节

print(f"Read data: {data}")

# 原始操作

i2c.write_raw(0x50, [0x10, 0x20]) # 原始写入

sleep(0.1)

raw_data = i2c.read_raw(0x50, 2) # 原始读取

# 断开连接

i2c.disconnect()

以下图片是Thonny运行结果。

文本

AI 生成的内容可能不正确。

basic_test.py

import sys

import os

# 添加包路径到系统路径

package_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))

if package_path not in sys.path:

sys.path.append(package_path)

from usb4i2c import I2CTinyUSB, AT24CXX

import time

# Auto-detect device

i2c = I2CTinyUSB()

# Scan I2C bus

devices = i2c.scan_devices()

print(f"Detected devices: {[hex(addr) for addr in devices]}")

# Create EEPROM instance

eeprom = AT24CXX(i2c, model='24C02', i2c_addr=0x50)

time.sleep(1)

# Basic read/write test

test_addr = 0x10

test_value = 0x5A

# Write and read back

eeprom.write_byte(test_addr, test_value)

read_value = eeprom.read_byte(test_addr)

print(f"Wrote 0x{test_value:02X} to 0x{test_addr:04X}, read back 0x{read_value:02X}")

# Dump first 32 bytes

eeprom.dump_memory(0x00, 256)

# Disconnect

i2c.disconnect()

以下图片是Thonny运行结果。

图片包含 文本

AI 生成的内容可能不正确。

USB4I2C-TEST_EEPROM.py

import sys

import os

# 添加包路径到系统路径

package_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))

if package_path not in sys.path:

sys.path.append(package_path)

from usb4i2c import I2CTinyUSB, AT24CXX

import time

def test_eeprom():

try:

# Initialize I2C device

i2c = I2CTinyUSB()

 

# Scan I2C bus

devices = i2c.scan_devices()

print(f"Detected devices: {[hex(addr) for addr in devices]}")

 

# Create AT24C02 instance

eeprom = AT24CXX(i2c, model='24C02', i2c_addr=0x50)

 

# Test basic info

print(f"\nEEPROM Model: {eeprom.model}")

print(f"Total Size: {eeprom.total_bytes} bytes")

print(f"Page Size: {eeprom.page_size} bytes")

 

# Execute full test

eeprom.full_test()

 

except Exception as e:

print(f"Test error: {e}")

finally:

if 'i2c' in locals():

i2c.disconnect()

if __name__ == "__main__":

test_eeprom()

以下图片是Thonny运行结果(部分)。

文本

AI 生成的内容可能不正确。

USB4I2C-TEST-24C02-STRESS.py

import sys

import os

# 添加包路径到系统路径

package_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))

if package_path not in sys.path:

sys.path.append(package_path)

from usb4i2c import I2CTinyUSB, AT24CXX

import time

def test_eeprom():

try:

# 初始化I2C设备

i2c = I2CTinyUSB()

 

# 扫描I2C总线

devices = i2c.scan_devices()

print(f"Detected devices: {[hex(addr) for addr in devices]}")

 

# 创建AT24C02实例

eeprom = AT24CXX(i2c, model='24C02', i2c_addr=0x50)

 

# 测试基本信息

print(f"\nEEPROM Model: {eeprom.model}")

print(f"Total Size: {eeprom.total_bytes} bytes")

print(f"Page Size: {eeprom.page_size} bytes")

 

# 执行完整测试

eeprom.full_test()

 

# 高强度压力测试,需要优化eeprom写入时间

eeprom.stress_test(cycles=100)

 

except Exception as e:

print(f"Error during test: {e}")

finally:

if 'i2c' in locals():

i2c.disconnect()

if __name__ == "__main__":

test_eeprom()

以下图片是Thonny运行结果(部分)。

文本

AI 生成的内容可能不正确。

参考文献与资源

类别

资源

链接

官方资源

UK534-USB4I2C

https://github.com/usb-i2c-spi/uk534-usb4i2c

I2C-Tiny-USB项目主页

http://www.harbaum.org/till/i2c_tiny_usb

I2C-MP-USB产品页面

https://www.fischl.de/i2c-mp-usb

代码仓库

I2C-Tiny-USB GitHub

https://github.com/harbaum/I2C-Tiny-USB

jI2C_MP_USB库

https://github.com/EmbedME/jI2C_MP_USB

I2C-Pico-USB

https://github.com/dquadros/I2C-Pico-USB

驱动工具

Zadig(Windows驱动)

https://zadig.akeo.ie

libusb

https://libusb.info

开发库

usb4java

http://usb4java.org

pyusb(Python)

https://github.com/pyusb/pyusb

参考项目

Smart Battery示例

https://github.com/harbaum/I2C-Tiny-USB/blob/master/testapp/smart_battery.py

传感器集成示例

https://www.fischl.de/i2c-mp-usb

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
UK534-USB4I2C使用手册-V103C.pdf
8
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航