前言

最近天气寒冷,长期待在空调房,空气干得不行,我翻出了好几年前买的 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使用。

芯片详细介绍:

7端口多功能USB HUB CH339:https://www.wch.cn/products/CH339.html

GUI框架介绍

由于需要实时显示,以及不希望GUI过于复杂,并考虑到后期跨平台的需求,采用了imgui开源框架,Dear ImGui 是一个用于C++程序的图形用户界面库,可以方便的实现跨平台的GUI程序。目前已在GitHub积累接近70K Star。

项目开源地址:

https://github.com/ocornut/imgui

功能设计

最初构想将功能划分为 5 大块,对应硬件芯片核心功能:温湿度实时显示(I2C)、FPGA 下载调试(JTAG)、MCU 程序下载(SWD)、LCD 屏幕显示(SPI)和串口收发调试(UART)。

  • I2C部分,实时采集温湿度数据并显示,提供调整采集间隔的功能;
  • JTAG部分,使用开源方案xvcd-ch347,该项目利用vivado的xvcd虚拟线缆功能,实现了CH347/339W配合Vivado的程序烧录与固化。

项目详细地址:https://github.com/AIOT-CAT/xvcd-ch347

  • 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还增加了串口远程通讯及串口示波器等新颖功能,我们直接单独使用即可。

Windows串口调试软件:COMTransmit.ZIP

程序框架

程序将定义如下类去实现程序的各个功能:

  • ch3xx:ch347/339w的底层操作,设备打开、关闭等。
  • openocd:与OpenOCD程序交互。
  • xvcd:与CH347_XVCD程序交互。
  • TFTSceen:控制SPI显示屏。

总结

本章主要是对整体项目进行了构想,接下来的文章将对各个部分具体的构建以及使用方法做详细的介绍。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐