本帖最后由 muyichuan2012 于 2024-7-24 13:06 编辑  
 
AN0212-AT32 USB桥接透传工具应用指南  
 
前言 
AT32 USB 多功能桥接设备提供一个专有的高速USB接口,可以使用多种传输接口与目标进行通 
信:UART, CAN, SPI, I2C,RS485, USB使用CDC协议进行外设数据透传,可搭配USART IAP, 
CAN IAP, SPI IAP, I2C IAP等使用,部分系统下需要安装USB CDC驱动。 
USB CDC驱动下载链接:https://www.arterytek.com/file/download/1701 
支持外设: 
 USB to USART 
 USB to CAN 
 USB to SPI 
 USB to I2C 
 USB to RS485 
支持型号列表: 
支持型号 AT32F405 系列 
 
 
 
1 概述 
1.1 USB Bridge 特点 
USB 端使用USBHS CDC 协议虚拟一个COM 口,支持多种外设接口,可具体需要选择转接外设接 
口,同一时刻只支持转一种外设,可通过USB 控制请求配置当前使用哪一个外设,同时也支持通过 
SET LINE CODEING 命令修改外设波特率。 
支持外设: 
 USB to USART 
 USB to CAN 
 USB to SPI 
 USB to I2C 
 USB to RS485 
1.1.1 外设选择 
可通过3 种方法来选择外设: 
 通过代码初始化时固定选择支持的外设,后续不再更改 
 通过USB 控制端点SETUP 请求来实时选择当前外设 
 通过USB HID 命令请求来选择当前外设 
1.1.1.1 初始化选择外设 
USB Multi Bridge 在初始化时可通过函数接口usb_multi_bridge_set_type(USB_TO_USART);设置当 
前使用接口,包括如下参数: 
USB_TO_USART:USB 转串口 
USB_TO_CAN:USB 转CAN 
USB_TO_SPI:USB 转SPI 
USB_TO_I2C:USB 转I2C 
USB_TO_RS485:USB 转RS485 
USB_TO_IDLE:当前IDLE 状态,没有转接外设 
1.1.1.2 USB 控制请求选择外设 
另外可通过USB 端点0 SETUP 控制传输命令配置当前支持的转接接口,可参考<Universal Serial 
Bus Specification 2.0 >,如下是SETUP 数据包格式: 
 
图 1 USB SETUP 请求格式 
 
 
 
 
 
 
1.1.1.3 HID 命令选择外设 
通过设备HID 设备配置当前使用的转接外设,HID VID(0x2E3C), PID(0xFF01)。 
如下是上位机发送数据对于切换的外设: 
 
 
 
 
 
 
1.1.2波特率修改 
不同转接外设支持不同的波特率或者频率,可通过SET LINE CODING 命令进行配置。 
 
图 2 SET LINE CODING 命令 
 
 
Line coding structure:通过dwDTERate 参数传递设置的波特率。 
图 3 Line Coding Structure 
 
 
USART、RS485 支持波特率: 1600bps~6Mbps 
CAN 支持波特率: 
 
表 1 CAN 支持波特率 
 
 
 
SPI 支持时钟频率: 
表 2 SPI 支持时钟频率 
 
 
 
I2C 支持时钟频率: 
表 3 I2C 支持时钟频率 
 
 
 
 
 
1.1.3 硬件资源 
1. USB 转接板 《AT32-USBHS-Adaptor》 
2. USB 线缆 
图 4 USB Multi Bridge 图 
 
 
 
 
1.1.4 软件资源 
1) SourceCode\utilities\usb_multi_bridge 
注:示例工程基于keil v5建立,若用户需要在其他编译环境上使用,请参考AT32F403A_407_Firmware_Library_V2. 
x.x\project\at_start_f403a\templates中各种编译环境(例如IAR6/7/8,keil 4/5, eclipse_gcc)进行对应修改即可。 
1.2 USB 转接 demo 使用 
1) 打开usb_multi_bridge工程源程序,选择对应需要转接的外设,通过调用 
usb_multi_bridge_set_type(USB_TO_USART)来设置当前转接外设,编译后下载到转接板. 
2) 连接USB线到PC,可在PC设备管理器看看到一个虚拟COM设备。可通过上位机虚拟串口工具 
调试。 
 
图 5 使用连接图 
 
 
 
2 USB 转 USART 
USB 转USART 桥接,USB 端实现一个虚拟串口设备,转接板通过USB 与PC 上位机通信,然后通 
过USART 与下位机进行通信,实现USB 与USART 数据的透传功能。注意转接板的USART 波特率 
与下位机的USART 波特率要配置相同。 
2.1 USART 转接线连接 
通过USB Multi Bridge 进行转接,需要将转接板上的RX,TX 和目标板上的TX, RX 连接,如下是连 
接图: 
 
图 6 USART 连接图 
 
 
 
数据格式支持如下: 
 
 
波特率和数据修改参照1.1.2 节。 
 
3 USB 转CAN 桥接 
USB 转CAN 桥接,USB 端实现一个虚拟串口设备,转接板通过USB 与PC 上位机通信,然后通过 
CAN 与下位机进行通信,实现USB 与CAN 数据的透传功能。注意转接板的CAN 波特率与下位机的 
CAN 波特率要配置相同,CAN 默认波特率500Kbit。 
3.1 CAN 转接线连接 
通过USB Multi Bridge 进行转接,需要将转接板上的CANH,CANL 和目标板上的CANH, CANL 连 
接,如下是连接图: 
 
图 7 CAN 连接图 
 
 
 
3.2 USB CAN 数据转发 
USB 转CAN 桥接按照CAN 协议进行封装,封装格式: 
 
 
 
帧ID:支持11 位的标准帧ID,和29 位扩展帧ID,按照LSB 顺序传输。 
ID 类型:0 表示标准ID(此时帧ID 低11 位有效),1 表示扩展ID(此时帧ID 低29 位有效) 
帧类型:0 表示数据帧,1 表示远程帧 
帧长:按照CAN2.0 的标准,帧长小于等于8 
数据:帧数据 
CAN 波特率支持参考1.1.2 章节。 
USB 数据转到CAN 总线: 
USB 到CAN 按照一包USB 数据转成一帧CAN 数据。 
收到一包USB 数据如:0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x11 0x22 
前4 个字节0x00 0x00 0x00 0x01:表示帧ID(MSB) 
第5 个字节0x00:表示是一个标准帧ID,低11 位位标准帧ID 
第6 个字节0x00: 表示是一个数据帧 
第7 个字节0x02:表示此数据帧长度 
第8,9 字节0x11,0x22:表示具体帧数据 
转换成CAN 帧后: 
标准帧ID=0x0001 
DLC=0x02 
DATA0=0x11 
DATA1=0x22 
 
 
CAN 总线数据转到USB: 
CAN 同样按照一帧数据转换成一包USB 数据: 
收到一帧标准数据帧:ID=0x02,DLC=0x03, DATA0=0x11, DATA0=0x22 ,DATA0=0x33 
转换成USB 包之后:0x00 0x00 0x00 0x02 0x00 0x00 0x03 0x11,0x22,0x33 
前4 个字节0x00 0x00 0x00 0x02:表示标准帧ID 
第5 个字节0x00:表示是一个标准帧ID 
第6 个字节0x00: 表示是一个数据帧 
第7 个字节0x03:表示此数据帧长度 
第8,9,10 字节0x11,0x22 0x33:表示具体帧数据 
 
 
4 USB 转SPI 桥接 
USB 转SPI 桥接USB 端实现一个虚拟串口设备,转接板通过USB 与PC 上位机通信,然后通过 
SPI 与下位机进行通信,实现USB 与SPI 数据的透传功能,转接板的SPI 作为主机。 
SPI 主机配置: 
 SPI 主模式 
 全双工模式 
 8 bit MSB 
 Polarity: CPOL High, CPHA low, NSS software 
4.1 SPI 转接线连接 
通过USB Multi Bridge 进行转接,需要将转接板上的MOSI,MISO,SCK,CS 和目标板上的 
MOSI,MISO,SCK,CS 连接,如下是连接图: 
 
图 8 SPI 连接图 
 
 
 
4.2 USB SPI 数据转发 
SPI 使用全双工进行收发数据,一包数据最大512 字节,如果需要大于512,则需要拆包发送。 
上位机数据发送: 
示例:上位机需要透传8 个数据给目标板,对应数据:0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 
1. 上位机直接发送8 个字节 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 
2. 上位机需要再读取8 个字节的dummy data 
上位机数据读取: 
示例:上位机需要从目标板读取8 个数据 
1. 上位机发送8 个字节的dummy data 
2. 上位机读取8 个字节的目标板数据 
SPI 支持时钟频率参考1.1.2 章节。 
 
 
5 USB 转I2C 桥接 
USB 转I2C 桥接USB 端实现一个虚拟串口设备,转接板通过USB 与PC 上位机通信,然后通过 
I2C 与下位机进行通信,实现USB 与I2C 数据的透传功能,转接板的I2C 作为主机。I2C 主机地址 
0Xc0. 
I2C 配置: 
 I2C 主机模式 
 地址0x0C 
5.1 I2C 转接线连接 
通过USB Multi Bridge 进行转接,需要将转接板上的SCL,SDA 和目标板上的SCL,SDA 连接,如下是 
连接图: 
图 9 I2C 连接图 
 
 
 
 
5.2 USB I2C 数据转发 
使用I2C 收发数据,一包数据最大512 字节,如果需要大于512,则需要拆包发送。 
USB 转I2C 数据封装格式: 
 
 
 
方向:0x55 表示发送I2C 数据到目标板,0XAA 表示从目标板读取I2C 数据 
地址:2 字节目标板地址(MSB) 
数据长度:发送或者读取的数据长度,长度需要小于等于507(MSB) 
数据:发送或者读取的数据 
I2C 支持时钟频率参考1.1.2 章节。 
上位机数据发送: 
示例:上位机需要透传8 个数据给地址为0xA0 的目标板,对应数据:0x01 0x02 0x03 0x04 0x05 
0x06 0x07 0x08 
上位机发送数据包: 0x55 0x00 0xA0 0x00 0x08 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 
上位机数据读取: 
示例:上位机需要从地址为0x2C 的目标板读取8 个数据 
1. 上位机发送0xAA 0x00 0xA0 0x00 0x08 表示要读取8 个数据 
2. 上位机再读取USB 返回数据进行解析:0xAA 0x00 0xA0 0x00 0x08 0x01 0x02 0x03 0x04 0x05 
0x06 0x07 0x08 
 
 
6 USB 转RS485 桥接 
USB 转485 桥接USB 端实现一个虚拟串口设备,转接板通过USB 与PC 上位机通信,然后通过 
485 与下位机进行通信,实现USB 与485 数据的透传功能. 
6.1 RS485 转接线连接 
通过USB Multi Bridge 进行转接,需要将转接板上的RS485-A, RS485-B 和目标板上的A,B 连接,如 
下是连接图: 
图 10 RS485 连接图 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 |   
     
评论
  
 |