CH347/339W开源项目:集SPI、I2C、JTAG、SWD、UART、GPIO多功能为一体(1)
本文介绍了一个基于CH347/CH339W芯片的多功能开发工具设计。通过整合I2C、JTAG、SPI等多种接口功能,开发了一个集温湿度监测、芯片烧录、SPI屏幕控制等功能于一体的工具。
前言
最近天气寒冷,长期待在空调房,空气干得不行,我翻出了好几年前买的 SHT40 温湿度传感器,想着做个能实时查看温湿度的小工具。
本来打算用 STM32 单片机,但又觉得工作量太大,需求重合度不高。后来把目光投向了项目里正在用的CH339W,以及老搭档CH347F。这样我只需要搭建个界面,简单使用几个API函数就可以实现温湿度采集的功能。
CH347F 这芯片接口特别多,JTAG,SPI 传输速度能达到60MHz,串口也能最高到9Mbps,且多个接口可同时使用;CH339W在CH347功能基础上多出了USB HUB和SD卡功能。正好有 OpenOCD、XVCD 这些开源项目,琢磨着写个集成软件,把这些接口功能全整合到一块儿。
我的想法是让这个小工具实现多功能:既使用I2C读取SHT40的温湿度数据,又能通过JTAG给芯片烧写程序,还能用 SPI 控制显示屏。
软件概述
主界面

硬件介绍
CH347
CH347作为国产USB转接芯片,实现单路USB转SPI/IIC/JTAG/SWD/UART/GPIO接口,分为CH347T与CH347F两种型号,具体芯片特性如下:
| 特性 | CH347F | CH347T |
|---|---|---|
| SPI接口 | ● 主机模式,最高速率60MHz | |
| I2C接口 | ● 主机模式,最高速率1MHz | |
| JTAG接口 | ● 主机模式,最高速率60MHz | |
| SWD接口 | ● 主机模式,最高速率5MHz | |
| UART接口 | ● 2个独立UART,最高波特率9Mbps | |
| 工作模式 | 无需模式选择: 默认支持所有接口功能,并且接口可同时使用。 | 需要硬件配置模式: 芯片复位时通过特定引脚(DTR1, RTS1)的电平选择以下4种模式之一: • Mode 0: USB转双UART • Mode 1: USB转UART+SPI+I2C(厂商驱动) • Mode 2: USB转UART+SPI+I2C(系统HID驱动) • Mode 3: USB转UART+JTAG(厂商驱动) |
| 封装与供电 | QFN28封装,支持I/O口独立供电(3.3V/2.5V/1.8V) | TSSOP-20封装 |
CH347官方介绍:https://www.wch.cn/products/CH347.html
CH347其他相关文章:https://blog.csdn.net/qq_43010294/category_12775144.html
CH339W
CH339W是一款7端口多功能HUB控制器芯片,单芯片集成7口USB HUB、USB百兆以太网、USB高速SD读卡器、USB PD和USB转SPI、USB转JTAG、USB转UART、USB转I2C接口等功能。
简单来说就是在CH347的基础上又增加了HUB、SD、PD等功能,使用者可以借助该芯片快速开发多功能的USB HUB产品。
CH339W的SPI I2C JTAG SWD部分API使用与CH347完全一致,因此该软件可以直接搭配CH339W使用。
芯片详细介绍:
GUI框架介绍
由于需要实时显示,以及不希望GUI过于复杂,并考虑到后期跨平台的需求,采用了imgui开源框架,Dear ImGui 是一个用于C++程序的图形用户界面库,可以方便的实现跨平台的GUI程序。目前已在GitHub积累接近70K Star。
项目开源地址:
功能设计
最初构想将功能划分为 5 大块,对应硬件芯片核心功能:温湿度实时显示(I2C)、FPGA 下载调试(JTAG)、MCU 程序下载(SWD)、LCD 屏幕显示(SPI)和串口收发调试(UART)。
- I2C部分,实时采集温湿度数据并显示,提供调整采集间隔的功能;
- JTAG部分,使用开源方案xvcd-ch347,该项目利用vivado的xvcd虚拟线缆功能,实现了CH347/339W配合Vivado的程序烧录与固化。
- SWD部分,使用OpenOCD开源项目完成MCU的程序下载烧录,该项目凭借强大的调试与编程能力,在嵌入式开发领域得到广泛应用。如今OpenOCD官方已经增加了CH347调试器接口,Windows端可参考WCH官方仓库,里面有编译好的可执行程序。
OpenOCD官方主线:https://github.com/openocd-org/openocd
WCH OpenOCD仓库:https://github.com/WCHSoftGroup/ch347
- SPI部分,将使用CH347/339W去控制一块LCD屏幕,循环展示一些自己的照片。LCD的DC与RST引脚,则利用CH347/339W的两个GPIO脚去控制。
- UART部分,由于WCH官方本身发布了串口助手COMTransmit软件,新发布COMTransmit还增加了串口远程通讯及串口示波器等新颖功能,我们直接单独使用即可。
程序框架
程序将定义如下类去实现程序的各个功能:
- ch3xx:ch347/339w的底层操作,设备打开、关闭等。
- openocd:与OpenOCD程序交互。
- xvcd:与CH347_XVCD程序交互。
- TFTSceen:控制SPI显示屏。
总结
本章主要是对整体项目进行了构想,接下来的文章将对各个部分具体的构建以及使用方法做详细的介绍。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)