USB

Holtek推出全新一代5V USB MCU系列微控制器HT32F50343,采用Arm® Cortex®-M0+核心,具备高效能与宽广的工作电压,并集成控制RGB LED灯条专用硬件等特色,适合PC(主板、CPU风扇、游戏显卡、内存等)、游戏周边(电竞键盘、鼠标、耳机等)及各种需求LED灯效与USB的应用领域。

HOLTEK推出全新32-bit 5V USB MCU HT32F50343

HT32F50343最高运行速度为60MHz,操作电压为2.5V~5.5V,支持独立VDDIO引脚,提供设计上的弹性。内建64 KB Flash及12 KB SRAM;配备丰富的周边资源,如UART×2、I²C×2、SPI×2、USB、6通道PDMA、12通道1 Msps 12-bit SAR ADC、CRC16/32及硬件除法器等,采用32/46 QFN和48/64 LQFP封装,GPIO引脚可达23~51。

新增的SLED(串列式LED控制器)接口,可搭配DMA同步驱动多达8个灯条。此外还具备PWM Timer×3,SCTM×2和GPTM×1,可输出多达30组PWM信号,满足更广泛的应用。

HT32支持多种开发环境(Keil/IAR/SEGGER/GNU),并提供硬件开发工具包、周边驱动函式库 (Firmware Library)及应用范例等完整的开发资源。全系列M0+ MCU取得Keil MDK-ARM用户许可证,可提供客户免费使用。搭配ISP(In-System Programming)及IAP(In-Application Programming)技术方案,可轻易升级固件。全系列通过UL/IEC 60730-1 Class B认证,可提供自检程序(Safety Test Library)缩短产品认证时间。

来源:HOLTEK

围观 86

转眼间来到了2020年,新年伊始,小编将和大家一起学习使用MM32 MCU的USB功能。对于USB来说,主要应用是HID、CDC、MSC以及WINUSB等功能,此讲先介绍如何使用MM32 MCU的HID功能。

对于USB设备来说,其中有一大类就是HID设备,即Human Interface Devices,人机接口设备。这类设备包括鼠标、键盘等,其主要用于人与计算机进行交互。它是USB协议最早支持的一种设备类。HID设备可以作为低速、全速、高速设备用。由于HID设备要求用户输入能得到及时响应,所以其传输方式通常采用中断方式,而且无需安装驱动就能进行交互,简单方便。

在USB通信协议中,HID设备的定义放置在接口描述符中,USB的设备描述符和配置描述符中不包含HID设备的信息。所以对于某些特定的HID设备,我们可以定义多个接口,只要其中一个接口为HID设备类即可,在学习HID之前,先来复习一下USB协议的相关内容。

一、USB设备描述符-概述

当插入USB设备后,主机需要发送比较短的请求来确认设备的身份、类型、速度等信息,这个过程称之为枚举。

那什么是设备描述符呢?Descriptor即描述符,是一个完整的数据结构,可以通过C语言等编程实现,并存储在USB设备中,用于描述一个USB设备的所有属性,USB主机是通过一系列命令来要求设备发送这些信息的。

描述符的作用就是通过命令操作作来给主机传递信息,从而让主机知道设备具有什么功能、属于哪一类设备、要占用多少带宽、使用哪类传输方式及数据量的大小,只有主机确定了这些信息之后,设备才能真正开始工作。

USB有那些标准描述符呢?对于 USB来说有5种标准描述符:设备描述符、配置描述符、字符描述符、接口描述符、端点描述符 。

描述符之间有一定的关系,一个设备只有一个设备描述符,而一个设备描述符可以包含多个配置描述符,而一个配置描述符可以包含多个接口描述符,一个接口使用了几个端点,就有几个端点描述符。由此我们可以看出来,USB的描述符之间的关系是一层一层的,最上一层是设备描述符,下面是配置描述符,再下面是接口描述符,然后是端点描述符。在获取描述符时,先获取设备描述符,然后再获取配置描述符,根据配置描述符中的配置集合长度,一次将配置描述符、接口描述符、端点描述符一起一次读回。其中可能还会有获取设备序列号,厂商字符串,产品字符串等。

枚举的过程:

1、等待稳定:主机通过电平差检测到设备,等待100ms让设备电平趋于稳定;

2、首次复位:HUB发起复位,让设备进入初始的地址0模式;

3、首次查询设备描述符:GET_DESCRIPTOR 主机查询设备描述符,只要前8字节 ==> 80 06 01 00 00 00 12 00 ;

4、二次复位:在接收到设备描述符前8个字节后,再次重启设备;

5、设置地址:SET_ADDRESS 主机下发设置地址命令,设备获取新地址 ==> 00 05 01 00 00 00 00 00 ;

6、二次查询设备描述符:GET_DEVICE_DESCRPTOR获取整个18字节的设备描述符 ==> 80 06 01 00 00 00 12 00 ;

7、获取配置描述符:GET_CONFIGURATION 获取9字节配置描述符 ==> 80 06 02 00 00 00 09 00 ;

8、完成配置:SET_CONFIGURATION;

二、HID设备简述

2.1 HID设备的特点

交换的数据储存在称为报表(Report)的结构内,设备的固件必须支持HlD报表的格式。主机通过控制和中断传输中的传送和请求报表来传送和接收数据。报表的格式非常灵活。

每一笔事务可以携带小量或中量的数据。低速设备每一笔事务最大是8B ,全速设备每一笔事务最大是64B,高速设备每一笔事务最大是1024B,一个报表可以使用多笔事务。

设备可以在未预期的时间传送信息给主机,例如键盘的按键或是鼠标的移动。所以主机会定时轮询设备,以取得最新的数据。

HID 设备的最大传输速度有限制。主机可以保证低速的中断端点每10ms 内最多 1笔事务,每一秒最多是 800B,保证全速端点每1ms 一笔事务,每一秒最多是64000B,保证高速端点每125 us 三笔事务,每一秒最多是 24.576MB。

HID 设备没有保证的传输速率。如果设备是设置在 10ms 的时距,事务之间的时间可能等于或小于10ms。除非设备是设置在全速时在每个帧传输数据,或是在高速时在每个微帧传输数据。这个是最快的轮询速率,所以端点可以保证有正确的带宽可供使用。

HID 设备除了传送数据给主机外,它也会从主机接收数据。只要能够符合HlD 类别规范的设备都可以是HID 设备。设备除了HlD 接口之外,它可能同时还包含有其他的USB 接口。

2.2 HID设备的硬件要求

HID 接口必须要符合 Device Class Definition for Human interface Devices 规范内所定义的 HID 类别的需求。在此文件内描述了所需的描述符、传输的频率以及传输的类型等。为了符合规范,HID 接口的端点与描述符都必须符合数个要求。所有的 HID 传输都是使用默认控制管道或是一个中断管道,HID设备必须有一个中断输入端点来传送数据到主机,中断输出端点则不是必需的。Control管道用于接收和响应USB控制和类数据的请求,在由HID类驱动程序轮询时传输数据(使用Get_Reportrequest),从主机接收数据。

对于主机与设备之间所交换的数据,可以分成两种类型:低延迟的数据,必须尽快地到达目的;配置或其他的数据,没有严格时间限制的需求。中断管道是控制管道之外的另一种数据交换的方式,特别适合使用在接收端需要定时或是尽可能及时收到数据的时候。中断输入管道携带数据到主机,中断输出管道则是携带数据到设备。在总线忙的时候,控制管道可能会被延迟,而中断管道保证会有可得到的带宽。HID不需要一定有中断输出管道。如果没有中断输出管道,主机会在控制管道上使用HID 设备特有的 Set_Report 请求来传送所有的报表。

2.3 HID的程序要求

主机的驱动程序要与 HID 设备通信,其设备的固件必须符合如下几个需求,设备的描述符必须识别该设备包含有 HID 接口(描述符)。除了默认控制管道外,固件必须另外支持一个中断输入管道。固件必须包含一个报表描述符来定义要传送与接收的设备数据。如果要传送数据,固件必须支持 Get_Report 控制传输与中断输入传输。如果要接收数据,固件必须支持 Set_Report 控制传输与选择性的中断输出传输。所有的 HID 数据都必须使用定义过的报表格式来定义报表中数据的大小与内容。设备可以支持一个或多个报表。在固件中的一个报表描述符用来描述此报表,以及如何使用报表数据的信息。在每一个报表中的一个数值,定义此报表是一个输入(Input )、输出(Output )或是特征(Feature )报表。主机在输入报表中接收数据,在输出报表中传送数据,特征报表可以在任何方向传递。

三、HID 描述符

HID 设备除了支持 USB 设备的 5 种标准描述符之外,还支持 HID 设备特有的 3 种描述符。这些描述符是:1、USB 标准描述符:设备、配置、接口、端点和字符串描述符;2、HID 特有的描述符: HID 、报表(Report )和实体(Physical )描述符。从描述符的关联关系看, HID 描述符是关联于接口。所以如果一个 HID 设备有 2 个端点,设备不需要每个端点有一个 HID 描述符,具体参考如下代码:

设备描述符

struct _DEVICE_DEscriptOR_STRUCT

{

BYTE   bLength;      //设备描述符的字节数大小

BYTE   bDescriptorType;   //描述符类型编号,为0x01

WORD  bcdUSB;      //USB版本号

BYTE  bDeviceClass;   //USB分配的设备类代码,0x01~0xfe为标准设备类,0xff为厂商自定义类型,0x00不是在设备描述符中定义的,如HID

BYTE   bDeviceSubClass;  //USB分配的子类代码,同上,值由USB规定和分配的,HID设备此值为0

BYTE  bDeviceProtocl;  //USB分配的设备协议代码,同上HID设备此值为0

BYTE   bMaxPacketSize0;  //端点0的最大包的大小

WORD   idVendor;  //厂商编号

WORD   idProduct;  //产品编号

WORD  bcdDevice;  //设备出厂编号

BYTE   iManufacturer;   //描述厂商字符串的索引

BYTE   iProduct;   //描述产品字符串的索引

BYTE   iSerialNumber;  //描述设备序列号字符串的索引

BYTE   bNumConfiguration;   //可能的配置数量

}

配置描述符 

struct _CONFIGURATION_DEscriptOR_STRUCT

{

BYTE  bLength;   //配置描述符的字节数大小

BYTE   bDescriptorType;   //描述符类型编号,为0x02

WORD   wTotalLength;   //配置所返回的所有数量的大小

BYTE   bNumInterface;  //此配置所支持的接口数量

BYTE   bConfigurationVale;   //Set_Configuration命令需要的参数值

BYTE   iConfiguration;  //描述该配置的字符串的索引值

BYTE  bmAttribute;  //供电模式的选择

BYTE   MaxPower;   //设备从总线提取的最大电流

}

字符描述符 

struct _STRING_DEscriptOR_STRUCT

{

BYTE bLength;     //字符串描述符的字节数大小

BYTE bDescriptorType;    //描述符类型编号,为0x03

BYTE SomeDescriptor[36];   //UNICODE编码的字符串

接口描述符

struct _INTERFACE_DEscriptOR_STRUCT

{

BYTE bLength;     //接口描述符的字节数大小

BYTE bDescriptorType;    //描述符类型编号,为0x04

BYTE bInterfaceNunber;    //接口的编号

BYTE bAlternateSetting;   //备用的接口描述符编号

BYTE bNumEndpoints;    //该接口使用端点数,不包括端点0

BYTE bInterfaceClass;    //接口类型 HID设备此值为0x03

BYTE bInterfaceSubClass;   //接口子类型 HID设备此值为0或者1

BYTE bInterfaceProtocol;   //接口所遵循的协议

BYTE iInterface;   //描述该接口的字符串索引值

}

端点描述符

struct _ENDPOIN_DEscriptOR_STRUCT

{

BYTE bLength;     //端点描述符的字节数大小

BYTE bDescriptorType;     //描述符类型编号,为0x05

BYTE bEndpointAddress;    //端点地址及输入输出属性

BYTE bmAttribute;      //端点的传输类型属性

WORD wMaxPacketSize;    //端点收、发的最大包的大小

BYTE bInterval;     //主机查询端点的时间间隔

}

四、MM32 MCU HID代码实现

本次我们采用MM32L373 miniboard作为测试开发板。为了方便大家使用MM32 MCU的HID功能,我们已经封装好全部代码,用户不需要自己配置以上的那些描述符等参数,只需要了解MM32 MCU HID的VID和PID以及如何处理HID的数据接收和发送即可。

软件资源如下:

以下为函数初始化配置及相关全局变量定义内容,代码如下:

#define USBD_POWER                    0

#define USBD_MAX_PACKET0             64

#define USBD_DEVDESC_IDVENDOR      0x2F81

#define USBD_DEVDESC_IDPRODUCT     0x0001

以上是定义的MM32 MCU HID设备VID和PID,灵动微电子已经获得USB组织授权的VID和PID。当设备插入电脑上,可以查看到如上标识的HID设备,如图1所示:


图1 PC设备管理器列表

对于MM32 MCU的HID功能来说,在使用HID功能之前先调用USB初始化函数来初始化USB协议栈。

int main(void)

{

// USB Device Initialization and connect

usbd_init();

usbd_connect(__TRUE);

while (!usbd_configured())   // Wait for USB Device to configure

{

}

while (1)

{      

}

}

 

然后就是HID数据收发处理函数,USB数据处理函数如下:

static volatile uint8_t  USB_ResponseIdle;

static HID_queue HID_Cmd_queue;

 

void hid_send_packet()

{

uint8_t *sbuf;

int slen;

if (HID_queue_get_send_buf(&HID_Cmd_queue, &sbuf, &slen))

{

if (slen > USBD_HID_OUTREPORT_MAX_SZ)

{

util_assert(0);

}

else

{

usbd_hid_get_report_trigger(0, sbuf, USBD_HID_OUTREPORT_MAX_SZ);

}

}

}

 

// USB HID Callback: when system initializes

void usbd_hid_init(void)

{

USB_ResponseIdle = 1;

HID_queue_init(&HID_Cmd_queue);

}

 

// USB HID Callback: when data needs to be prepared for the host

int usbd_hid_get_report(U8 rtype, U8 rid, U8 *buf, U8 req)

{

uint8_t *sbuf;

int slen;

switch (rtype)

{

case HID_REPORT_INPUT:

switch (req)

{

case USBD_HID_REQ_PERIOD_UPDATE:

break;

 

case USBD_HID_REQ_EP_CTRL:

case USBD_HID_REQ_EP_INT:

if (HID_queue_get_send_buf(&HID_Cmd_queue, &sbuf, &slen))

{

if (slen > USBD_HID_OUTREPORT_MAX_SZ)

{

util_assert(0);

}

else

{

memcpy(buf, sbuf, slen);

return (USBD_HID_OUTREPORT_MAX_SZ);

}

}

else if (req == USBD_HID_REQ_EP_INT)

{

USB_ResponseIdle = 1;

}

break;

}

 

break;

 

case HID_REPORT_FEATURE:

break;

}

 

return (0);

}

 

// USB HID override function return 1 if the activity is trivial or response is null

__attribute__((weak))

uint8_t usbd_hid_no_activity(U8 *buf)

{

return 0;

}

 

// USB HID Callback: when data is received from the host

void usbd_hid_set_report(U8 rtype, U8 rid, U8 *buf, int len, U8 req)

{

uint8_t *rbuf;

main_led_state_t led_next_state = MAIN_LED_FLASH;

switch (rtype)

{

case HID_REPORT_OUTPUT:

if (len == 0)

{

break;

}

if (buf[0] == ID_HID_TransferAbort)

{

HID_TransferAbort = 1;

break;

}

 

// execute and store to HID_queue

if (HID_queue_execute_buf(&HID_Cmd_queue, buf, len, &rbuf))

{

if (usbd_hid_no_activity(rbuf) == 1)

{

//revert HID LED to default if the response is null

led_next_state = MAIN_LED_DEF;

}

if (USB_ResponseIdle)

{

hid_send_packet();

USB_ResponseIdle = 0;

}

}

else

{

util_assert(0);

}

 

break;

 

case HID_REPORT_FEATURE:

break;

}

}

 

void HID_queue_init(HID_queue *queue)

{

queue->recv_idx = 0;

queue->send_idx = 0;

queue->free_count = FREE_COUNT_INIT;

queue->send_count = SEND_COUNT_INIT;

}

 

BOOL HID_queue_get_send_buf(HID_queue *queue, uint8_t **buf, int *len)

{

if (queue->send_count)

{

queue->send_count--;

*buf = queue->USB_Request[queue->send_idx];

*len = queue->resp_size[queue->send_idx];

queue->send_idx = (queue->send_idx + 1) % HID_PACKET_COUNT;

queue->free_count++;

return (__TRUE);

}

return (__FALSE);

}

 

BOOL HID_queue_execute_buf(HID_queue *queue, const uint8_t *reqbuf, int len, uint8_t **retbuf)

{

uint32_t rsize;

if (queue->free_count > 0)

{

if (len > HID_PACKET_SIZE)

{

len = HID_PACKET_SIZE;

}

queue->free_count--;

memcpy(queue->USB_Request[queue->recv_idx], reqbuf, len);

rsize = HID_ExecuteCommand(reqbuf, queue->USB_Request[queue->recv_idx]);

queue->resp_size[queue->recv_idx] = rsize & 0xFFFF; //get the response size

*retbuf = queue->USB_Request[queue->recv_idx];

queue->recv_idx = (queue->recv_idx + 1) % HID_PACKET_COUNT;

queue->send_count++;

return (__TRUE);

}

return (__FALSE);

}

如上,我们只需要实现修改如下HID_ExecuteCommand可处理我们收到的收据,并且填入我们发送数据出去队列即可发送出去。

本次我们使用HID工具V1.3.3测试我们的HID功能,打开软件如图2所示:


图2 HID工具连接

点击选择HID设备,选择我们MM32 MCU的HID设备,如图3:


图3 HID工具设备选择

点击连接,发送数据,可以看到图4结果,发送两次共128字节,收到两次数据,共128字节。


图4 HID工具数据收发

以上就是MM32 MCU USB的HID功能,下一节我们继续介绍MM32 MCU USB的WINUSB功能。

来源: 灵动MM32MCU

围观 1104

前言

对于 usb (Universal Serial Bus)大家都非常熟悉,通用串行总线,是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影器材、数字电视(机顶盒)、游戏机等其它相关领域。

10 年我进入大学的时候,大部分电脑还是标配 usb2.0 的接口,后来才慢慢出了 usb3.0usb3.1 等,现在接口越来越多,包括我知道的早起安卓使用的 micro usb,现在的 type c 接口。而苹果的接口虽然不在 usb 标准里面,但是苹果的设备市场占有率也很大,他的 lighting接口thunderbolt接口 使用率也很高,很多时候这么多的接口类型让人困惑,本文就来讲一讲 usb 标准的版本和接口类型。

串口和并口

不管什么接口,作用都是为了连接外部设备,然后传递数据,而接口发展的目标当然是能够连接更多不同的设备以及获得更高的传输速率。但凡事都要考虑实现的难度和实现的成本,很多时候由于技术或成本的限制我们只能在具体的应用场景采取最合适的方案。串口和并口就是在早起传输速率不是很快的情况下,针对不同的应用场景采取的不同方案。

串口和并口的定义:在一个独立的信道上,每次同时传输1bit为串口,每次同时传输多个bit为并口。从定义上看,并口的传输速率似乎要比串口快,但是为什么在大部分应用场景下并口已经慢慢被淘汰了呢。我们知道就是在我们使用的 usb 以及以前的主办上的并行接口,串行接口内部都是有很多条线路的(比如 usb 或者 lighting接口 上的触电),他们有的用于供电,有的用于接地,有的用于传输信号,还可能有一些其他操作比如控制等。我们想要提高接口的传输速率无非两种方法,一种是提高单根线路的传输速率,另一种是增加线的数量。但是在并行接口的实践中已经发现,多条线路的信号会相互干扰,并且传输距离要有限制,不能太远,比如主板上的并行接口一次传 8bits,如果其中一个信号出错,8 个全部要重发。而串行的结构要简单很多,干扰的问题要小很多,同时成本也更低,我们只要提高单根线路的传输速率就好了,这要比解决干扰的问题成本小很多,而且并口的多条线路之间还要解决数据同步的问题。

简单的说就是串口形容一下就是一条车道,而并口就是有 8 个车道同一时刻能传送8位(一个字节)数据。但是并不是说并口快,由于 8 位通道之间的互相干扰(串扰),传输时速度就受到了限制,传输容易出错。串口没有互相干扰。并口同时发送的数据量大,但要比串口慢。如果并口的干扰问题解决,同时单线速率能够跟串口相同,它的传输速率必然更快,这也是在 21 世纪之前,在单根线路传输速度很慢的情况下,在需要较大传输速度的地方,例如打印机,并口得到广泛使用的原因。但是当前,并口只能在一些需求特殊的场景下发挥作用。

串行接口、并行接口是按照数据传输方式来划分的,串行接口是一大类接口。USBRS232SATAPS/2RS485 等等,这些都属于串行接口;但一般情况下,如果没有特殊说明而只是说“串口”的话,通常特指 RS232 接口。

usb 标准和接口类型

多媒体电脑刚问世时,外接式设备的传输接口各不相同,如打印机只能接 LPT、调制解调器只能接 RS232、鼠标键盘只能接 PS/2 等。繁杂的接口系统,加上必须安装驱动程序并重启才能使用的限制,都会造成用户的困扰。因此,创造出一个统一且支持易插拔的外接式传输接口,便成为无可避免的趋势,USB 应运而生。

USB 最初是由英特尔与微软倡导发起,最大的特点是尽可能得实现热插拔和即插即用。当设备插入时,主机枚举到此设备并加载所需的驱动程序,因此其在使用上远比 PCI 和 ISA 等总线方便。

USB 可以连接的外设有鼠标、键盘、游戏手柄、游戏杆、扫描仪、数字相机、打印机、硬盘和网络等部件。对数字相机这样的多媒体外设 USB 已经是缺省接口;由于大大简化与计算机的连接,USB 也逐步取代并行接口成为打印机的主流连接方式之一。2004 年已经有超过 1亿 台 USB 设备;到 2007 年时,高清晰度数字视频外设是仅有的 USB 未能染指的外设类别,因为他需要更高的传输速率,不过 USB3.1 和 2019 年 USB4 的问世,高清晰度数字视频外设和外接式显卡也能在 USB 播放。

现 USB 标准中,按照速度等级和连接方式分为以下七种版本。注意 USB-IF (USB开发者论坛,USB标准的制定组织)当前正式的主版本号只有 USB 2.0 和 USB 3.2 两个。

USB开发者论坛负责 USB 标准制订,其成员包括:AppleHPNECMicrosoft 和 Intel2001 年底,USB-IF 公布 USB 2.0 规范,与之前的 USB 0.9USB 1.0 和 USB 1.1 一样,该规范完全向下兼容。随后,USB-IF 公布 USB On-The-GoUSB OTG,当前版本:1.0a)作为 USB 2.0 规范的补充标准,使其能够用于在便携设备之间直接交换数据。

USB 的连接器分为 AB 两种,分别用于主机和设备;其各自的小型化的连接器是 Mini-AMini-B 和 Micro-AMicro-B,另外还有 Mini-AB(可同时支持 Mini-A 及 Mini-B)的插口。USB 3.1 版本中引入了支持正反面不区分插入的 C 型。每一种连接器有对应的公口和母口,并且我们用来连接两种不同设备的 USB 线两端会用不同的连接器,这些内容在 USB-IF 都有规定。

紫色的 Type-C 充电速度最高支持 5A 充电、充电功率最高达 100W

具体的版本和对应的接口看下图:

从上面的内容中可以看出,所谓的 2.03.03.13.2 对应的就是 USB-IF 制定的新的 USB 标准的命名,而所谓的 type Ctype A 则是在某个标准实现下具体使用的物理接口(连接器),同一个标准会为不同的设备设计不同的接头。不过几家参与制定标准的大厂都是向着统一接口的目标努力的。

USB Connectors 接头

单独说一下接头,其实真正让使用者搞不清的其实并不是 USB 标准的版本,其实大部分用户也不会去真的把版本区分那么清楚,只要大致知道哪个快哪个慢就行了。真正让大家搞不清的是花样百出的各种接头,Android 上的早起 Micro-B 和现在的 Type-CType-A 里面的 2.03.03.13.2,再加上苹果自己的 lighting 和 thunderbolt,种类繁多,眼花缭乱。

首先我们要知道接头是由 USB-IF 所指定,接头的设计一方面为了支持众多 USB 的基本需求,另一方面也避免以往许多类似串行接头所出现的问题。

  • 接头设计的相当耐用。许多以往使用的接头较脆弱,即使受力不大,有时针脚或零件也会折弯甚至断裂。而 USB 接头的金属导电部分周围有塑料作为保护,而且整个连接部分被金属的保护套围住,因此 USB 接头不论插拔,都不容易受损。由于金属保护套和外围塑料护套的保护,需要较大的力量才能造成 USB 接头明显的损坏。
  • 具有防呆设计,方向相反的插头不可能插到插座里,方向正反很容易感觉出来。所以不可能把 USB 接口插错。
  • 接头能相对便宜地大量生产。
  • 在 USB 网络中,接头被强制使用定向拓扑。USB 不支持环形网络,因此不兼容的 USB 设备之间接口也不兼容。不像其他通讯系统(如 RJ-45 电缆)不能使用转换插头,防止环形 USB 网络产生。
  • 适度的插拔力。USB 电缆和小型 USB 设备能被插口卡住(不需要夹子、螺丝或者其他接口那样的锁扣)。只需要适当力量插拔即可连接周边设备。
  • 由于接头的构造,在将 USB 插头插入 USB 座时,插头外面的金属保护套会先接触到 USB 座内对应的金属部分,之后插头内部的四个触点才会接触到 USB 座。金属保护套会连接到系统的地线,提供路径使静电可以放电,避免因静电通过电子零件而造成损坏。
  • USB 电缆最长允许 5 米,更长的距离需要 HUB

USB 的连接器的插头和插座配对,以及连接不同设备的 USB 线的两端连接器标准都是有规定的,见下两张图。


大部分的连接器都是只能和合身对应的插头插座连接,USB 3.0 的插座大部分都向下兼容。而在 USB 线的部分我们可以看到应用的最广泛的 Type-A 和 Type-C 是适用场景最多的。

这里提一下 USB 4USB 4 于 2019年9月3日 发布。采用 Thunderbolt 3 协议规格,使 Thunderbolt 3设备将能兼容于 USB 4,现有 3.2 及 2.0 也向下兼容。速度方面加倍来到两条通道总共 40Gb/s 的传输速度。

苹果的接口

最后单独说一下苹果的接口,苹果作为一家特立独行,什么东西都自己来的公司,它的接口也都是自己的一套标准。目前在 iphoneipadipod 还有一系列周边设备上使用的都是苹果自己的闪电接口 lighting

闪电是由苹果公司所制作的专属连接器规格,首次出现在 2012 年所发表的 iPhone 5、 iPod Touch 及 iPod nano 等新款手持式消费性电子产品。此连接器针脚为 8 pin,正反面皆可插,尺寸与 Micro USB 相近。闪电取代了使用多年的 30pin 连接器。闪电连接器也是移动市场首个成为主流的正反可插接口,由于插头采用了对称式设计,所以插头的上下两面均分布有相同的针脚。无论用户以何种方向将插头插入接口,其中一组针脚都会同基座中的针脚相连接。当前还有 USB Type-C 也跟着采用这种设计。不同的是,闪电接头的引脚在外面,USB-C 接头的引脚则在里面,且闪电的插座引脚只有一边,USB-C 则两边都有。

相对于移动设备上的 Lighting,在 Mac 上苹果自家的接口就是 Intel 发表的 Thunderbolt 高速串行接口标准,是用来连接电脑和其他设备通用总线。13 年的 Macbook Pro 开始搭载 thunderbolt216 年的 Macbook Pro 开始搭载 Thunderbolt3,而 Thunderbolt3 的 连接器也选择了 Type-C 标准,而最新的 USB 4 标准也采用了 Thunderbolt 3 的协议。

由于支持 Thunderbolt 1, 2 的厂商不多,而且采用 Thunderbolt 的设备大多是高端产品,价格昂贵,加上接口使用的是苹果 Mini Displayport,配件无法用在其他电子设备,普及程度远低于对手 USB。所以 Thunderbolt 3 才与 USB Type-C 的接头兼容,使 Thunderbolt 接口变得更普及。

总结

本文整理了一些关于硬件接口的知识,看完后相信对于各种流行的高速串行接口的标准以及各种连接器的标准都能够有一定的了解。如有错漏,欢迎指正。

参考文章

  1. 并行端口
  2. 为什么串口比并口快? – 又见山人的回答 – 知乎
  3. USB-维基百科
  4. 闪电接头-维基百科
  5. Thunderbolt-维基百科

本博客所有内容采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可

转载文章请注明:USB标准版本和接口类型 - https://www.clloz.com/programming/hardware/2019/11/18/usb-standard-and-connector-type/

围观 395

作者:郭老师

之前由于工作需要,基于 RT-Thread 在 STM32 上实现了 USB 虚拟串口。为了方便大家,我在这里把在正点原子 F429 阿波罗开发板上实现 USB 虚拟串口的详细过程分享给大家,希望可以帮助到更多想要学习 USB 的人。

1、首先,需要更新了一下 RT-Thread 的源代码(因为 RT-Thread 的代码更新很快,短时间内就有可能有很多的代码更新,Github地址:https://github.com/RT-Thread/rt-thread 点star还能领10元柿饼派优惠券)

2、然后进入 rt-thread\bsp\stm32目录下,找到正点原子 F429 阿波罗开发板对应的BSP stm32f429-atk-apollo ,打开此目录。

3、然后查看一下当前 BSP 支持不支持 USB 功能。在当前目录下打开 Env 工具,输入 menuconfig 命令查看,可以看到在硬件配置的片上外设的配置菜单中并没有配置 USB 的选项,看来这个 BSP 还不支持 USB 设备。

4、想到新的 STM32 BSP 所有的 BSP 都是用的同一份驱动,这样就可以根据有没有做好的 USB 驱动来判断有没有 BSP 支持 USB 功能了。打开rt-thread\bsp\stm32\libraries\HAL_Drivers目录。如下所示,可以看到里面果然有 usb 的驱动文件,叫做drv_usbd_fs.c。

5、然后根据同一目录下的 Sconscript 脚本文件,可以查看这个驱动的依赖关系,根据下面的图片可以看出,此驱动文件依赖于 BSP_USING_USBD_FS这个配置项。

6、全局搜索此 stm32 目录下所有的 BSP ,查看哪个 bsp 下有这个配置项。根据这个配置项可以判断出哪个 BSP 支持了 USB 的功能,也可以借此看出依赖关系。搜索发现 F469 的 bsp 有这个配置项,由下图可以看出:打开这个配置的同时,也利用 select 命令打开了 RT_USING_USB_DEVICE 这个配置。

7、修改正点原子 F429 阿波罗 bsp 下 Kconfig 文件,添加这一段配置项。


8、然后,利用 Env 工具根据修改好的配置菜单配置工程。在 目录下输入 menuconfig 配置工程,开启刚刚添加的 usb 驱动的配置项。

9、然后,进入组件配置菜单下设备驱动的配置菜单中的 USB 配置,配置 usb 设备框架的选项。开启虚拟串口。

10、保存并重新生成工程。 发现编译报错。看起来是硬件没有配置。需要打开 stm32CubMX 配置 usb 的硬件引脚。

11、打开stm32f429-atk-apollo\board\CubeMX_Config目录下 stm32CubMX 的工程,配置 usb.


12、开启 usb 功能之后,时钟配置报警告,还需重新配置一下时钟。配置好之后,重新生成代码。

13、由于更新了时钟树,所以还要把stm32f429-atk-apollo\board\CubeMX_Config\Src目录下main.c中的时钟配置函数SystemClock_Config更新到stm32f429-atk-apollo\board目录下的 board.c 文件中。

14、然后重新打开工程,编译,发现还是报错,cannot open source input file "stm32f4xx_hal_exti.h": No such file or directory,注释掉报错的头文件重新编译即可。再次编译,发现没有问题了。


15、下载运行,输入 list_device 命令可以看到注册到系统中的两个 usb 相关的设备。

16、然后在 main函数里添加一段测试代码,编译下载运行。

17、连接开发板上的 USB_SLAVE 接口到电脑上,打开设备管理器,发现多了一个 USB 串行设备,用串口工具打开,就可以接收到从 main 函数里发送过来的消息了。


这样就基于 RT-Thread 在 STM32 上实现 USB 虚拟串口了!

来源: RTThread物联网操作系统

围观 108

针对新型系统保护配置而优化了 USB3.2 SuperSpeed 的全新解决方案

Nexperia 是分立元件、逻辑元件与 MOSFET 元件方面的全球领先供应商。Nexperia 今日宣布:已优化其用于 C 型 USB 接口的 TrEOS ESD 保护二极管系列。新的 USB3.2 标准在 Rx 输入端引用了一个可选电容器,因此 Nexperia 现在推出了两组元件:一组元件在连接器和电容器之间提供极高的浪涌抗扰度,另一组元件则具有极低的触发电压,用于放置在电容器和系统芯片之间。

Nexperia 的 TrEOS ESD 保护技术采用有源硅控整流器,可实现极低电容(低至 0.1pF)、极低的钳位(动态电阻低至 0.1Ω)以及非常高的浪涌和 ESD 脉冲抗扰度(对于非常快速的数据线,最高可达 20A 8/20µs)的最佳组合。接通时间也非常快,约为 0.5ns,器件可承受高达 30kV 的接触放电,超过 IEC 61000-4-2 标准 4 级水平。在 8/20 IEC61000-4-5 标准下,保护装置放置于电容器之前的 TrEOS 应用器件目前可用于业界领先的峰值脉冲电流额定值 9.5、15 和 20A。在电容器之后使用的 TrEOS 器件同样具有业界领先的性能,具有低至 4.3V 的最低触发电压 (Vt1)。这些特性也适用于 A 型 USB 和 MicroUSB 接口。

Nexperia 产品经理 Stefan Seider 表示:“C 型 USB 和 USB Power Delivery 提供的选项非常具有吸引力:为确保最终用户可以享受高达 20Gbps 的数据速度和高达 100W 的充电速度,Nexperia 提供了两种 TrEOS 保护系列,可支持围绕新型 USB3.2 Rx 电容的每一种保护策略,用于防止敏感收发器遭受可能的故障条件影响。”

TrEOS 保护二极管采用广泛使用的 0603 规格进行封装。DSN0603-2 (SOD962-2) 封装非常紧凑且稳健,其优点是没有封装接线,可消除另一种故障模式,并产生最低的电感,以实现最快的保护。该封装非常适合移动和计算应用项目。还提供了其他节省空间的封装。Nexperia 提供了全面的参数化 USB 保护搜索指南(单击此处),以帮助设计人员为其系统配置选择最佳组件。

如需更多信息,请访问:
https://assets.nexperia.com/documents/leaflet/Nexperia_document_leaflet_...

围观 414

该可编程控制器集五个芯片的功能于一体,可用于移动PC扩展坞

全球领先的嵌入式解决方案提供商赛普拉斯半导体公司(纳斯达克代码:CY)日前宣布,推出业界首款支持USB 协商供电(PD)协议的七端口 USB-C Hub控制器。可编程的 EZ-USB® HX3PD Hub 控制器集五个芯片的功能于一体,简化了USB-C扩展坞的设计,降低了物料成本(BOM),并可将电路板尺寸缩小 50%。这款高度集成的控制器适用于笔记本电脑和平板电脑扩展坞、显示器扩展坞以及多功能 USB-C 外设产品。

USB-C 扩展坞的设计非常复杂,需要两个 USB Hub 来实现内部和外部的连接,支持 USB PD 充电的每一个USB-C 端口都需要一个专用控制器,以及一个 USB Billboard、USB-C 桥接控制器来报告运行状态和连接失败的情况。EZ-USB HX3PD Hub 控制器集成以上这些芯片的功能,从根本上简化了系统的设计。此外,它还采用了 12 毫米×12 毫米的封装,从而减少了芯片面积。该控制器包括一个七端口 10-Gbps 的 USB 3.1 Gen 2 Hub、两个支持 USB PD 3.0 充电的 USB-C 端口以及一个支持USB Billboard 功能和安全固件下载的扩展坞管理控制器。该控制器具备可编程特性,从而使设计人员能够紧跟 USB-C 和 USB PD 规范的更迭,并且更好地解决相关的互操作性问题。该控制器还集成了一个可配置的 USB PHY 以防止 USB 信号的衰减,从而提高信号质量、满足乃至超过 USB协议的要求。欲了解更多有关HX3PD解决方案的信息,请访问 www.cypress.com/hx3pd

赛普拉斯有线连接事业部副总裁 Ajay Srikrishna 表示:“全新的 HX3PD Hub 解决方案包括了 HX3和HX3C 两款产品,为用于扩展坞解决方案的 USB Hub 产品带来了 10Gbps 的性能表现,充分展现了我们在 USB-C 和 USB PD 上的技术优势。过去,我们的 USB-C 解决方案在市场上一马当先,并且在 SuperSpeed USB领域处于业界领先地位,该高度集成解决方案进一步巩固了我们的领先优势。”

USB Type-C 和 PD 标准可实现纤薄的工业设计,其接口和线缆具有极佳的易用性,可支持多种传输协议,并具有高达100瓦的供电能力,因而正在快速得到顶尖电子产品制造商的青睐。USB Type-C标准的 2.4 毫米连接头比现有的 4.5 毫米 USB Standard-A 连接头显著缩小。想要了解更多有关赛普拉斯 USB-C 和 协商供电解决方案的信息,请访问 www.cypress.com/Type-C

产品供货情况

目前,EZ-USB HX3PD Hub 控制器系列产品目前处于样品阶段,预计将于 2018 年第三季度量产,采用 192-ball BGA封装。

围观 281

MAX22505可避免任何故障对端口的损害,包括高达±40V的地电位差;并将方案尺寸减小50%以上

Maxim 宣布推出MAX22505 ±40V高速USB故障保护器,帮助设计者排除任何故障对USB口的损害,包括高达±40V的地电位差,避免了竞争方案参数折中。器件可用于保护24V交流或40V直流供电的工业设备数据线及电源线,方案尺寸缩小50%以上,以支持工业应用。

MAX22505技术细节: https://www.maximintegrated.com/cn/products/power/protection-control/pro...
高清图片: https://www.maximintegrated.com/content/dam/images/newsroom/2018/MAX2250...

当今工业环境中,开发人员仍在不断地努力减小方案尺寸,提高生产力和产量,保持更高的系统稳定性和更长的正常运行时间。因此,由于连接器尺寸变得更小,自动化设备开始采用USB口替代RS232口。随着工业环境采用USB口支持实时诊断、可编程逻辑控制器(PLC)的编程/服务或摄像头视觉系统,以获取更快的通信速度,需要对USB口的过压和地电位差等故障提供有效保护,同时还要兼顾高达480Mbps的高数据率要求。这些系统可能发生对主机侧和设备侧的同时损害,需要实现高压故障保护的独特方案。目前市场上已有的USB故障保护方案无法同时兼顾USB的工作速度和数据线、电源线的限压/限流保护。所以,市场上的现有方案成本昂贵,且不能为高速USB提供有效的故障保护。

MAX22505的推出迎合了市场需求,是业内唯一能够提供工业高速USB故障保护 (480Mbps) ,并可以灵活地支持主机或设备侧应用,包括便携式 (OTG) USB的解决方案。器件可保护设备不受来自电源和数据线上的过压或负压、以及设备之间地电位差造成的损害。与竞争方案相比,器件可将方案尺寸减小50%以上,同时在恶劣环境下确保可靠通信,以及实现高成效、更简单的设计。器件采用24引脚、4mm x 4mm TQFN封装,工作在-40°C至+105°C温度范围。支持包括楼宇自动化、工业PC、PLC以及USB诊断端口等应用。

主要优势

  •   可靠通信:防止过压、负压、地电位差造成的损害;集成VBUS/GND电源线 ±50VDC保护;集成D+/D-数据线 ±40.7VDC保护

  •   小尺寸:相比竞争方案,尺寸减小50%以上

  •   高性能:支持高速率(480Mbps)、全速(12Mbps)和低速(1.5Mbps) USB工作速率

评价

  •   “在此之前,业界尚无适用于高速USB故障保护的方案,”Databeans研发总监Susie Inouye表示:“Maxim的方案为提高工业系统的可靠性铺平了道路,特别是在当今工业设备诊断端口越来越普及的形势下。”

  •   “随着Maxim在通信可靠性领域的投入进一步增强,我们的客户得以实现针对工业电压应用的高速USB故障保护。”Maxim Integrated工业与医疗健康事业部执行业务经理Timothy Leung表示。

供货及价格

  •   MAX22505的价格为2.24美元 (1000片起,美国离岸价) ,可通过Maxim网站及特许经 销商购买

  •   提供MAX22505EVKIT# 评估板,价格为110美元

围观 339

页面

订阅 RSS - USB