前言
CH341是一款USB总线的转接芯片,支持转接为串口、并口、SPI和I2C接口等,但其串口和其他接口模式是独立分开的,不能在同一模式下使用串口和其他接口,此时,则可使用CH347进行替换。
CH347是一款高速USB2.0转接芯片,可转接出UART、SPI、I2C、JTAG、GPIO等接口,且支持厂商驱动或者系统自带的HID驱动来实现接口功能。
其中UART最高支持到9Mbps通讯速率,SPI和JTAG速率最高支持到60MHz,其频率可通过接口API进行配置。
CH347简介
如下为模式说明,CH347芯片在复位时,会根据DTR1(CFG0)和RTS1(CFG1)引脚的电平状态配置其工作模式,各工作模式及功能说明如下
工作模式 |
模式说明 |
CFG0 |
CFG1 |
Mode0 |
480Mbps高速USB转双UART(Baudrate最高9Mbps) |
1 |
1 |
Mode1 |
480Mbps高速USB转UART+SPI+I2C(厂商驱动模式) |
0 |
1 |
Mode2 |
480Mbps高速USB转UART+SPI+I2C(系统HID驱动模式) |
1 |
0 |
Mode3 |
480Mbps高速USB转UART+JTAG(厂商驱动模式) |
0 |
0 |
硬件替代
使用CH347不能直接引脚替换掉CH341,需要重新进行硬件设计,但CH347外围电路简单,设计难度并不困难
开发板原理图
参考链接:CH347EVT.ZIP - 南京沁恒微电子股份有限公司
原理图路径:CH347EVT\EVT\PCB\CH347SCH.PDF
软件替代
驱动更换
串口驱动
CH347的串口支持CDC+VCP两种驱动模式,其串口驱动地址:CH343SER.EXE - 南京沁恒微电子股份有限公司
SPI&I2C等其他接口
CH347与CH341则可使用同一驱动:CH341PAR.EXE - 南京沁恒微电子股份有限公司
开发工程中所需调用的DLL文件与头文件可从此处获取:CH341PAR.ZIP - 南京沁恒微电子股份有限公司
驱动特点
从WCH官网下载CH347转SPI/I2C/JTAG/GPIO驱动:CH341PAR.EXE - 南京沁恒微电子股份有限公司
驱动下载后进行一次安装,后续即可实现系统“免驱”效果无需二次安装。未插入设备时安装会显示“驱动预安装成功”,此时驱动已经正常安装,硬件即插即用。
Windows驱动通过微软数字签名认证,支持32/64位 Windows 11/10/8.1/8/7/VISTA/XP/2000,SERVER 2019/2016/2012/2008/2003等系统,无需担心Windows不同系统兼容性问题。
官方同时提供驱动资源包CH341PAR.ZIP - 南京沁恒微电子股份有限公司,可将驱动安装文件打包至成熟产品一齐发布,且支持无界面安装操作,可通过软件编程调用命令行操作,只需执行“SETUP /S”命令即可静默驱动安装。
点击安装之后,等待弹出安装成功窗口后点击确定即可。
应用程序API替代
I2C操作函数
I2C速度设置
通过CH347I2C_Set()对I2C接口速度进行设置:
支持低速/20KHz,标准/100KHz(默认值),快速/400KHz,高速/750KHz
I2C读写函数
可使用原CH341操作函数以及设备检测函数
SPI操作函数
SPI速度设置
通过CH347SPI_Init()对SPI模式和速率等进行设置:
支持模式:SPI Mode 0/1/2/3
支持速度:60MHz,30MHz,15MHz,7.5MHz,3.75MHz,1.875MHz,937.5KHz,468.75KHz
SPI读写函数
(此处控制协议CH347与CH341不同,此处对硬件接口进行判断处理,硬件接口信息可通过CH347GetDeviceInfor函数获取)
CH347SPI_Write()
CH347SPI_Read()
CH347SPI_WriteRead()
CH347StreamSPI4()
UART操作函数
CH347的串口可通过Windows通用API进行操作,也可调用CH347DLL接口库中的串口操作函数进行,函数接口如下
CH347Uart_Open // 打开串口
CH347Uart_Close // 关闭串口
CH347Uart_SetDeviceNotify // 设置串口插拔检测
CH347Uart_GetCfg // 获取UART硬件配置
CH347Uart_Init // UART参数配置
CH347Uart_SetTimeout // 设置串口读写超时
CH347Uart_Read // 读取串口数据
CH347Uart_Write // 写入串口数据
CH347Uart_QueryBufUpload // 查询读缓冲区可读数据量
CH347Uart_GetDeviceInfor // 获取串口设备信息