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 )