1.UI021/022简要介绍
UI021/022采用USBHID无驱协议,即插即用,用户MCU通过UI021/022可以和上位机双向通讯。上位机应用程序只需简单的3个API函数就可以实现通讯。
不同于使用虚拟串口的USB转UART的芯片/转接线,UI021/022采用命令——响应方式来实现UART转USB,一切指令、操作均由上位机控制、发起。
UI021/022适用于需要将UART接口转为USB接口的应用场景,而且是追求通讯的可靠性和速度的应用,如测量标定仪器设备等。
2.UI021/022功能、性能
您只需将连接***232/202芯片的UARTTX/RX连接到UI021/022上,即可轻松实现USB连接,并且保证有可靠的通讯,不会有其他USB转UART芯片/连接线所具有的数据丢失、系统兼容问题。
全速USBHID接口,无需安装驱动、应用软件,即插即用。
支持windows2000/xp/vista/win7。
支持5V或3.3V、9600N81或115200N81的UART接口。
支持最大到136Bytes的数据包。
双线UART或单线UART与MCU连接
支持3种通讯方式
发送命令、接收响应的双向通讯方式。
只发命令,无响应的单向通讯方式。
无命令发送,只收响应的单向通讯方式。
简单的外围电路设计
不需要外围晶体、复位电路,直接连接上就可使用。
简单的上位机应用程序设计
只需3个API接口(Open、Close、Comm)即可实现。
3.开发使用指南
UI021/022是SOP18封装,在正常工作时,几乎不需要任何外围电路,只需要连接上USB接口就可以。
3.1.引脚定义
UI021 UI022
引脚名称
类型
引脚号
说明
UART_TX
输出
4
串口发送引脚,PushPull推挽输出
UART_RX
输入
5
串口接收引脚,高阻输入
UART_TX/RX
输入输出
5
串口发送、接收引脚
OD开漏输入输出,内部带有14KΩ上拉电阻,外部无需再加上拉电阻
GND
电源
6
芯片地
V33_OUT
输出
7
输出3.3V电源,可提供30mA电流
IO_VDD
电源
10
IO引脚的电源
USB_VCC
电源
11
芯片工作电源
USB_D-
USB信号
12
连接USB的D-
USB_D+
USB信号
13
连接USB的D+
BR_SEL
输入
14
UART通讯波特率选择引脚
悬空:115200
接地:9600
NC
不用连接也不要连接的引脚,保持悬空
3.2.典型应用电路图
3.2.1.UI021典型应用电路图
3.2.2.UI022典型应用电路图
UI022使用注意事项
3.3.上位机应用程序开发
上位机应用程序(目前只支持VC)只需调用3个API接口函数,就可以实现USB通讯。
3.3.1.UI_Open打开端口
HANDLEWINAPIUI_Open(
char*name,
unsignedintreserved_param1,
unsignedcharreserved_param2
);
参数说明:
name:取"ui_hid1","ui_hid2","ui_hidN"等,1<=N<=9
序号分配原则,有以下情况:
n系统上所有N个UI设备均处于未打开端口状态,请调用"ui_hid1","ui_hid2",...,"ui_hidN"依次打开设备,1~N跟插入顺序无关。
n系统上存在N个已打开端口的UI设备,插上一个新的UI设备并打开此设备,则需从"ui_hid1"~"ui_hid(N+1)"依次调用,已打开过端口的设备将返回INVALID_HANDLE_VALUE,由此定位到新插入的设备。
reserved_param1:未使用,可为任意值
reserved_param2:未使用,可为任意值返回值:
INVALID_HANDLE_VALUE(-1)表示打开端口失败;
其他值(大于0)为打开的端口句柄
3.3.2.UI_Close关闭端口
intWINAPIUI_Close(HANDLEui_hdl);
参数说明:
ui_hdl为函数UI_Open所返回的句柄
返回值:
-1为失败;0为成功.
3.3.3.UI_Comm发送命令并取回响应
unsignedWINAPIUI_Comm(
HANDLEui_hdl,
DWORDdw_LenCommand,
unsignedchar*ucp_Command,
DWORD*dwp_LenResponse,
unsignedchar*ucp_Response,
DWORDdw_TimeOut
);
参数说明:
ui_hdl:用UI_Open打开的端口句柄
dw_LenCommand:命令comm的长度;对于UI021/022,该值范围0~136
ucp_Command:需要发送的命令
dwp_LenResponse:取回响应的长度
ucp_Response:响应的数据
dw_TimeOut:此条命令等待响应的时间,单位(s),0~600s,也就是10分钟
返回值:
0xFFFF无效的句柄或参数
0xFFF4usb通讯异常,请重新插拔设备,重新打开端口
0xFFF8响应数据长度错误
0xF0FF响应数据校验错
0xF0FE读取响应数据超时
0x0001命令执行成功
注意事项:
v当dw_LenCommand=0时,说明没有命令要发送,只取MCU的响应
v当dw_TimeOut=0时,说明只发送命令,不取MCU的响应
3.4.UART数据帧格式
UART的数据帧格式为:9600bps波特率或115200波特率,8位数据位,无校验位,1位停止位。
波特率由BR_SEL引脚来决定,如果该引脚悬空,则波特率为115200;如果该引脚接地,波特率为9600。
3.5.UART通讯协议
UI021/022和MCU的UART通讯遵循以下协议:
LEN(1Byte)+Data(长度为Len)+XOR(LEN和Data的XOR)(1Byte)
数据
长度(Byte)
说明
LEN
1
后续Data的长度,取值范围:1~136
Data
LEN
UI021/022转发的命令,即UI_Comm中的ucp_Command
MCU返回的响应数据,即UI_Comm中的ucp_Response
XOR
1
将LEN和所有Data做XOR运算后的值
3.6.工作方式及时序
3.6.1.发送命令、接收响应的双向通讯
步骤1.插上USB,上位机在打开端口获得句柄后,通过UI_CommAPI将命令发送给UI021/022
步骤2.UI021/022获取命令后,通过UART转发给MCU,并开始计时,等待MCU的响应数据。UART通讯协议见上。
步骤3.UI021/022等待MCU返回响应数据,等待时间由UI_CommAPI中的dw_TimeOut参数决定。MCU通过UART返回数据给UI021/022。UART通讯协议见上。
需要注意的是:在接收到第1个字节后,UI021/022将只等待900ms接收剩余的所有数据。
如果以上两个时间超时,UI021/022将不再等待,返回超时错误给上位机,如果UI021/022已经收到MCU返回的部分数据,这些数据也一并返回给上位机。
步骤4.UI021/022将响应数据返回给上位机。
3.6.2.发送命令、不接收响应的单向通讯
当UI_Comm中的dw_TimeOut=0时,说明只发送命令,不取MCU的响应。
步骤1.插上USB,上位机在打开端口获得句柄后,通过UI_CommAPI将命令发送给UI021/022
步骤2.UI021/022获取命令后,通过UART转发给MCU,并开始计时,等待MCU的响应数据。UART通讯协议见上。
步骤3.UI021/022返回长度为0的响应结果给上位机。
3.6.3.不发送命令、只接收响应的单向通讯
当UI_Comm中的dw_LenCommand=0时,说明没有命令要发送,只取MCU的响应。
步骤1.插上USB,上位机在打开端口获得句柄后,通过UI_CommAPI将命令发送给UI021/022
步骤2.UI021/022在接收完USB发来的命令后,等待MCU返回响应数据,等待时间由UI_CommAPI中的dw_TimeOut参数决定。MCU通过UART返回数据给UI021/022。UART通讯协议见上。
需要注意的是:在接收到第1个字节后,UI021/022将只等待900ms接收剩余的所有数据。
如果以上两个时间超时,UI021/022将不再等待,返回超时错误给上位机,如果UI021/022已经收到MCU返回的部分数据,这些数据也一并返回给上位机。
步骤3.UI021/022将响应数据返回给上位机。
3.7.针对UI022使用的注意事项
lUI022的UART_TX/RX是OD门驱动,UI022内部已经集成14KΩ的上拉电阻,外部无需再加上拉电阻。
l请确保MCU的UART_TX/RX也是OD门驱动,并且至少可以吸入1mA的电流。如果MCU的UART_TX/RX仍有上拉电阻,请确保上拉电阻大于10K欧。
l如果MCU的UART_TX/RX不是OD门,请确保在UI022发送数据时,MCU不能同时发送数据。为了确保不损坏IO,建议在连接线上串联1KΩ的电阻。
l如果MCU必须使用双线UART,通过下述方法也可以连接UI022,但MCU固件设计时需要注意操作时序。建议您在这种情况下使用UI021会更合适。
lUI022的UART通讯由于是OD门驱动,请在PCB布线时,尽量减短UART的连接线,并减少过孔。
3.8.使用的注意事项
l如果您需要VBUS为您的系统供电,请注意,VBUS只能提供300mA的电流。
l如果您需要V33_OUT为您的系统供电,请注意,V33_OUT只能提供35mA的电流。