http://wch.cn 
 
 
 
 
 
 
CH347 应用开发手册 
V1.3 
 
 
CH347 应用开发手册 
2 
http://wch.cn 
 
目录 
一、简介 ................................................................. 4 
二、接口说明 ............................................................. 4 
三、同步串行接口 ......................................................... 4 
3.1 相关数据类型 ..................................................... 4 
3.1.1 SPI 控制器信息 ............................................. 5 
3.1.2 设备信息 ................................................... 5 
3.2 公共操作函数 ..................................................... 6 
3.2.1 CH347OpenDevice ............................................ 6 
3.2.2 CH347CloseDevice ........................................... 6 
3.2.3 CH347SetDeviceNotify ....................................... 6 
3.2.4 CH347GetDeviceInfor ........................................ 7 
3.2.5 CH347GetVersion ............................................ 7 
3.2.6 CH347SetTimeout ............................................ 8 
3.2.7 接口动态插拔检测 ........................................... 8 
3.2.8 设备枚举操作 ............................................... 9 
3.3 SPI 功能函数 ..................................................... 9 
3.3.1 操作流程 ................................................... 9 
3.3.2 CH347SPI_Init ............................................. 10 
3.3.3 CH347SPI_GetCfg ........................................... 10 
3.3.4 CH347SPI_ChangeCS ......................................... 11 
3.3.5 CH347SPI_SetChipSelect .................................... 11 
3.3.6 CH347SPI_Write ............................................ 12 
3.3.7 CH347SPI_Read ............................................. 12 
3.3.8 CH347SPI_WriteRead ........................................ 13 
3.3.9 CH347StreamSPI4 ........................................... 13 
3.4 JTAG 功能函数 ................................................... 14 
3.4.1 操作流程 .................................................. 14 
3.4.2 CH347Jtag_INIT ............................................ 14 
3.4.3 CH347Jtag_WriteRead ....................................... 15 
3.4.4 CH347Jtag_WriteRead_Fast .................................. 15 
3.4.5 CH347Jtag_SwitchTapState .................................. 16 
3.4.6 CH347Jtag_ByteWriteDR ..................................... 16 
3.4.7 CH347Jtag_ByteReadDR ...................................... 17 
3.4.8 CH347Jtag_ByteWriteIR ..................................... 17 
3.4.9 CH347Jtag_ByteReadIR ...................................... 17 
3.4.10 CH347Jtag_BitWriteDR ..................................... 18 
3.4.11 CH347Jtag_BitWriteIR ..................................... 18 
3.4.12 CH347Jtag_BitReadIR ...................................... 19 
3.4.13 CH347Jtag_BitReadDR ...................................... 19 
3.5 I2C 功能函数 .................................................... 19 
3.5.1 操作流程 .................................................. 19 
CH347 应用开发手册 
3 
http://wch.cn 
3.5.2 相关数据类型 .............................................. 20 
3.5.3 CH347I2C_Set .............................................. 20 
3.5.4 CH347I2C_SetDelaymS ....................................... 21 
3.5.5 CH347StreamI2C ............................................ 21 
3.5.6 CH347ReadEEPROM ........................................... 22 
3.5.7 CH347WriteEEPROM .......................................... 22 
四、异步串行接口函数 .................................................... 23 
4.1 公共函数 ........................................................ 23 
4.1.1 接口动态插拔检测 .......................................... 23 
4.1.2 设备枚举操作 .............................................. 23 
4.2 HID/VCP UART 功能函数 ........................................... 24 
4.2.1 操作流程 .................................................. 24 
4.2.2 CH347Uart_Open ............................................ 24 
4.2.3 CH347Uart_Close ........................................... 25 
4.2.4 CH347Uart_SetDeviceNotify ................................. 25 
4.2.5 CH347Uart_Init ............................................ 25 
4.2.6 CH347Uart_SetTimeout ...................................... 26 
4.2.7 CH347Uart_Read ............................................ 26 
4.2.8 CH347Uart_Write ........................................... 27 
4.2.9 CH347Uart_QueryBufUpload .................................. 27 
4.3 GPIO 功能函数 ................................................... 27 
4.3.1 操作流程 .................................................. 27 
4.3.2 CH347GPIO_Get ............................................. 28 
4.3.3 CH347GPIO_Set ............................................. 28 
 
 
CH347 应用开发手册 
4 
http://wch.cn 
一、简介 
CH347是一款USB2.0高速转接芯片,以实现USB-UART(HID串口/VCP串口)、USB-SPI、
USB-I2C、USB-JTAG以及USB-GPIO等接口,分别包含在芯片的四种工作模式中。 
CH347DLL用于为CH347芯片提供操作系统端的UART/SPI/I2C/JTAG/BitStream等接口操
作函数,支持CH341厂商/HID/VCP驱动接口,使用时无需区分驱动接口和芯片工作模式。 
二、接口说明 
根据CH347所支持的USB转接接口特性,CH347DLL提供了USB-UART(HID串口/VCP串口)、
USB-SPI、USB-I2C、USB-JTAG以及USB-GPIO的接口功能函数,包括基本功能函数与对应的功
能函数,如EEPROM读写,JTAG应用中的SHIFT-DR状态读写等。 
CH347所支持接口如下表所示,通过上电时MODE配置引脚电平组合来切换不同模式。 
工作模式 
功能接口说明 
驱动接口 
API 
接口 0:USB 转高速串口 0 
接口 1:USB 转高速串口 1 
CH343SER(VCP) 
系统内原生串口 API 或
CH347DLL 内 CH347UART_xxx 
接口 0:USB2.0 转高速串口 1   CH343SER(VCP) 
系统内原生串口 API 或
CH347DLL 内 CH347UART_xxx 
CH347DLL 内 CH347SPI_xxx 
CH347I2C_xxx 
CH347UART_xxx 
CH347DLL 内 CH347SPI_xxx 
CH347I2C_xxx 
系统内原生串口 API 或
CH347DLL 内 CH347UART_xxx 
CH347DLL 内 CH347JTAG_xxx 
CH347I2C_xxx 
模式 0 
模式 1 
接口 1: USB2.0 转 SPI+I2C 
CH347PAR 
接口 0:USB2.0 HID 转高速串
口 1 
模式 2 
系统自带 HID 驱动 
接口 1:USB2.0 HID 转 SPI+I2C 
接口 0:USB2.0 转高速串口 1 
CH343SER(VCP) 
模式 3 
接口 1:USB2.0 转 JTAG+I2C 
CH347PAR 
Table. CH347 接口功能 API 表 
三、同步串行接口 
3.1 相关数据类型 
//驱动接口 
#define CH347_USB_CH341          0 
#define CH347_USB_HID            2 
#define CH347_USB_VCP           3 
 
CH347 应用开发手册 
5 
http://wch.cn 
//芯片功能接口号 
#define CH347_FUNC_UART         0 
#define CH347_FUNC_SPI_IIC       1 
#define CH347_FUNC_JTAG_IIC      2 
3.1.1 SPI 控制器信息 
typedef struct _SPI_CONFIG{ 
 
UCHAR   iMode;                  // 0-3:SPI Mode0/1/2/3 
UCHAR iClock;                   // 0=60MHz,   1=30MHz, 2=15MHz, 3=7.5MHz, 
4=3.75MHz, 5=1.875MHz, 
6=937.5KHz,7=468.75KHz 
 
 
 
 
 
UCHAR  iByteOrder;             // 0=低位在前(LSB), 1=高位在前(MSB) 
USHORT  iSpiWriteReadInterval;  // SPI 接口常规读取写入数据命令,单位为 uS 
UCHAR   iSpiOutDefaultData;     // SPI 读数据时默认输出数据 
ULONG   iChipSelect;            // 片选控制, 位 7 为 0 则忽略片选控制, 位 7 为
1 则参数有效: 位 1 位 0 为 00/01 分别选择
CS1/CS2 引脚作为低电平有效片选 
UCHAR   CS1Polarity;            // 位 0:片选 CS1 极性控制,0:低电平有效; 
UCHAR   CS2Polarity;            // 位 0:片选 CS2 极性控制,0:低电平有效; 
1:高电平有效; 
1:高电平有效; 
USHORT  iIsAutoDeativeCS;       // 操作完成后是否自动撤消片选 
USHORT  iActiveDelay;           // 设置片选后执行读写操作的延时时间,单位 uS 
ULONG   iDelayDeactive;         // 撤消片选后执行读写操作的延时时间,单位 uS 
 
 
 
}mSpiCfgS,*mPSpiCfgS; 
 
3.1.2 设备信息 
typedef struct _DEV_INFOR{ 
UCHAR    iIndex;                // 当前打开序号 
UCHAR    DevicePath[MAX_PATH]; 
UCHAR    UsbClass;               // 0:CH341 Vendor; 1:CH347 Vendor; 2:HID 
UCHAR    FuncType;               // 0:UART1;        1:SPI+I2C; 2:JTAG+I2C 
CHAR     DeviceID[64];           // USB\VID_xxxx&PID_xxxx 
UCHAR    Mode;                   // 芯片模式,0: Mode0(UART*2); 
1: Mode1(Uart1+SPI+I2C); 
2: Mode2(HID Uart1+SPI+I2C)  
3: Mode3(Uart1+Jtag+I2C) 
HANDLE   DevHandle;              // 设备句柄 
USHORT   BulkOutEndpMaxSize;     // 上传端点大小 
USHORT   BulkInEndpMaxSize;      // 下传端点大小 
UCHAR    UsbSpeedType;           // USB 速度类型,0:FS,1:HS,2:SS 
UCHAR    CH347FuncType;          // USB 接口号 
UCHAR    DataUpEndp;             // 端点地址 
CH347 应用开发手册 
6 
http://wch.cn 
UCHAR    DataDnEndp;             // 端点地址 
CHAR     ProductString[64];      // USB 产品字符串 
CHAR     ManufacturerString[64]; // USB 厂商字符串 
ULONG    WriteTimeout;           // USB 写超时 
ULONG    ReadTimeout;            // USB 读超时 
CHAR   
UCHAR    FirewareVer;        
 // 接口功能描述符 
  // 固件版本 
 FuncDescStr[64];    
  
}mDeviceInforS,*mPDeviceInforS 
 
 
3.2 公共操作函数 
3.2.1 CH347OpenDevice 
功能描述 
该函数用于打开 CH347 设备,支持 CH347 所有模式下的 SPI/I2C/JTAG 接口的打开 
函数定义 
HANDLE  WINAPI  
CH347OpenDevice( ULONG  DevI); 
参数说明 
DevI:  指定操作设备序号 
返回值 
执行成功返回设备序号 
3.2.2 CH347CloseDevice 
功能描述 
该函数用于关闭 CH347 设备,支持 CH347 所有模式下 SPI/I2C/JTAG 接口的关闭 
函数定义 
BOOL  WINAPI  
CH347CloseDevice( ULONG  iIndex) 
参数说明 
iIndex: 指定操作设备序号 
返回值 
执行成功返回 1,失败返回 0 
3.2.3 CH347SetDeviceNotify 
功能描述 
该函数用于指定设备事件通知程序,可用于 CH347 所有模式下 SPI/I2C/JTAG 接口的动
态插拔检测 
函数定义 
BOOL  WINAPI 
CH347SetDeviceNotify(    
 
ULONG     iIndex,    
 
 
 
 
 
CH347 应用开发手册 
7 
http://wch.cn 
 
 
    
    PCHAR     iDeviceID,    
 
          mPCH347_NOTIFY_ROUTINE     iNotifyRoutine) 
 
 
 
 
 
 
 
参数说明 
  指定操作设备序号 
iIndex: 
iDeviceID:   可选参数,指向字符串,指定被监控的设备的 ID,字符串以\0 终止 
iNotifyRoutine:指定设备事件回调程序,为 NULL 则取消事件通知, 
否则在检测到事件时调用该程序 
返回值 
执行成功返回 1,失败返回 0 
注解 
iDeviceID 该参数为可变参数,若需实现 CH347 设备的插拔检测,可定义宏如下 
#define  CH347DevID  "VID_1A86&PID_55D\0" 
传参时 iDeviceID 替换为 CH347DevID 即可实现对 CH347 同步串行接口的动态插拔检测 
若需准确检测各模式下接口的插拔动作,可写下完整的 USBID,以模式 1 中 SPI 接口为
例,可定义下方宏: 
#define  USBID_VEN_SPI_I2C  “VID_1A86&PID_55DB&MI_02\0” 
传参时 iDeviceID 替换为 USBID_VEN_SPI_I2C 即可实现对 CH347 模式 1 的 SPI&I2C 接口
的动态插拔检测 
其他接口设置可参考 3.2.7 接口动态插拔检测 
3.2.4 CH347GetDeviceInfor 
功能描述 
该函数用于获取设备当前接口模式、VID/PID 等信息 
函数定义 
BOOL  WINAPI  
CH347GetDeviceInfor(ULONG    iIndex, 
mDeviceInforS    *DevInformation) 
参数说明 
iIndex: 
DevInformation:设备信息结构体 
  指定操作设备序号 
返回值 
执行成功返回 1,失败返回 0 
注解 
设备信息结构体,可参考_DEV_INFOR 
3.2.5 CH347GetVersion 
功能描述 
该函数用于获得驱动版本、库版本、设备版本、芯片类型(CH341(FS)/CH347(HS)) 
函数定义 
BOOL  WINAPI  
CH347 应用开发手册 
8 
http://wch.cn 
CH347GetVersion(ULONG    iIndex,  
  PUCHAR   iDriverVer, 
  PUCHAR   iDLLVer, 
  PUCHAR   ibcdDevice, 
  PUCHAR   iChipType) 
参数说明 
  指定操作设备序号 
iIndex: 
iDriverVer:    驱动版本信息 
iDLLVer:    库版本信息 
ibcdDevice:  设备版本信息 
iChipType:   芯片类型 
返回值 
执行成功返回 1,失败返回 0 
3.2.6 CH347SetTimeout 
功能描述 
该函数用于设置 USB 数据读写的超时 
函数定义 
BOOL 
CH347SetTimeout(ULONG    iIndex,  
WINAPI 
ULONG    iWriteTimeout,  
ULONG    iReadTimeout ) 
参数说明 
iIndex: 
iWriteTimeout: 指定 USB 写出数据块的超时时间,以毫秒 mS 为单位, 
  指定操作设备序号 
0xFFFFFFFF 指定不超时(默认值) 
iReadTimeout:  指定 USB 读取数据块的超时时间,以毫秒 mS 为单位, 
0xFFFFFFFF 指定不超时(默认值) 
返回值 
执行成功返回 1,失败返回 0 
3.2.7 接口动态插拔检测 
检测同步串行接口动态插拔信息可通过 CH347SetDeviceNotify 函数来实现,代码参考
如下: 
启用 CH347 同步串行接口 USB 的插入和移除的监测: 
CH347SetDeviceNotify(DevIndex, USBDevID, UsbDevPnpNotify); 
关闭 CH347 同步串行接口 USB 的插入和移除的监测,在程序退出时一定要关闭。 
CH347SetDeviceNotify(DevIndex, USBDevID, NULL); 
 
// CH347 设备插拔检测通知程序 
VOID     CALLBACK    UsbDevPnpNotify (ULONG iEventStatus )