测试英飞凌的单片机不测试USB设备有点可惜,当年Cypress可是USB设备行业的领导者,从51内核的USB MCU到今天的USB 3.0设备,其协议栈和规范都很不错,下面的测试就是使用MCU模拟一个USB CDC设备(虚拟串口) ,首先是创建项目,启动项目创建工具
选择emUSB Device CDC echo模板,这次还是使用keil软件,创建完成后,打开配置工具Device-configurator。
使用工具,工具板子情况修改时钟和SWD项目,将SWO的相关项目去掉,
设置好以后就可以了,将UART引脚和CYBSP_USER_LED1, CYBSP_USER_LED,也相应修改
for (;;)
{
/* Wait for configuration */
while ( (USBD_GetState() & USB_STAT_CONFIGURED) != USB_STAT_CONFIGURED)
{
cyhal_system_delay_ms(USB_CONFIG_DELAY);
}
num_bytes_received = USBD_CDC_Receive(usb_cdcHandle, read_buffer, sizeof(read_buffer), 0);
memcpy(write_buffer + num_bytes_to_write, read_buffer, num_bytes_received);
num_bytes_to_write += num_bytes_received;
if ( ( num_bytes_to_write > 0 ) && ( read_buffer[num_bytes_received - 1] == '\n' ) )
{
/* Sending one packet to host */
USBD_CDC_Write(usb_cdcHandle, write_buffer, num_bytes_to_write, 0);
/* Waits for specified number of bytes to be written to host */
USBD_CDC_WaitForTX(usb_cdcHandle, 0);
/* If the last sent packet is exactly the maximum packet
* size, it is followed by a zero-length packet to assure
* that the end of the segment is properly identified by
* the terminal.
*/
if(num_bytes_to_write == sizeof(write_buffer))
{
/* Sending zero-length packet to host */
USBD_CDC_Write(usb_cdcHandle, NULL, 0, 0);
/* Waits for specified number of bytes to be written to host */
USBD_CDC_WaitForTX(usb_cdcHandle, 0);
}
num_bytes_to_write = 0;
}
cyhal_syspm_sleep();
}
程序的功能就是使用USBD_CDC_Receive()函数就收数据,该函数为非阻塞运行,当接收到数据后函数报告接受的数据数量,使用if语句判断数据中是否包含'\n',然后将就收的数据回传到USB中。
出现了一个新的串口设备,而且windows 10系统不需要驱动程序就可以工作,
利用串口助手输入hello\n可以发现MCU反回了字符串,这注意波特率随意,多少都可以。
总结:
可以发现程序使用USB接收和发送都很方便,其它厂家的软件通常都是使用状态机,做一个case检测,发现对应的通道有接收了,在从revice缓冲中读取数据,发送也很麻烦,先把需要发送的数据传入write缓冲,在修改发送状态请求通过0通道发送出去,等待设备发送状态标记。但是英飞凌的HDL封装的比较好,没有这么麻烦。这种通过状态机的方法,曾经让我很困惑需要知道USB通道的状态,不能像UART一样。
引用: 秦天qintian0303 发表于 2023-6-26 10:25 USB接口测试用的软件是哪一个?串口助手能测试USB?
就是普通的串口软件。不过这个软件是我写的,我放在论坛网站上了,需要可以下载。计划有时间了准备在用C++重写一版,想加入Modbus和终端功能。
引用: bigbat 发表于 2023-6-26 10:29 就是普通的串口软件。不过这个软件是我写的,我放在论坛网站上了,需要可以下载。计划有时间了准备在用C+ ...
相当强,测试软件都是自己写的
但是英飞凌的HDL封装的比较好,没有这么麻烦。我感觉英飞凌的IDE学起来有点费劲。
引用: lugl4313820 发表于 2023-7-3 08:50 但是英飞凌的HDL封装的比较好,没有这么麻烦。我感觉英飞凌的IDE学起来有点费劲。
你可以不用它的IDE,使用project-creator就可以了