1669|5

2937

帖子

4

TA的资源

五彩晶圆(中级)

楼主
 

【RTT&英飞凌PSoC6评估板】USB CDC串口测试 [复制链接]

测试英飞凌的单片机不测试USB设备有点可惜,当年Cypress可是USB设备行业的领导者,从51内核的USB MCU到今天的USB 3.0设备,其协议栈和规范都很不错,下面的测试就是使用MCU模拟一个USB CDC设备(虚拟串口) ,首先是创建项目,启动项目创建工具

 选择emUSB Device CDC echo模板,这次还是使用keil软件,创建完成后,打开配置工具Device-configurator。

 使用工具,工具板子情况修改时钟和SWD项目,将SWO的相关项目去掉,

 修改时钟设置,去掉WCO项目,修改CLK-LF源

 设置好以后就可以了,将UART引脚和CYBSP_USER_LED1, CYBSP_USER_LED,也相应修改

 记得存盘,save生成驱动代码。打开keil项目

 可以看到核心的代码非常的简洁,也符合单片机的程序习惯。

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中。

 启动程序,出现USB新设备

 出现了一个新的串口设备,而且windows 10系统不需要驱动程序就可以工作,

 利用串口助手输入hello\n可以发现MCU反回了字符串,这注意波特率随意,多少都可以。

 我测试过多种波特率都没有问题。

总结:

可以发现程序使用USB接收和发送都很方便,其它厂家的软件通常都是使用状态机,做一个case检测,发现对应的通道有接收了,在从revice缓冲中读取数据,发送也很麻烦,先把需要发送的数据传入write缓冲,在修改发送状态请求通过0通道发送出去,等待设备发送状态标记。但是英飞凌的HDL封装的比较好,没有这么麻烦。这种通过状态机的方法,曾经让我很困惑需要知道USB通道的状态,不能像UART一样。

最新回复

但是英飞凌的HDL封装的比较好,没有这么麻烦。我感觉英飞凌的IDE学起来有点费劲。   详情 回复 发表于 2023-7-3 08:50
点赞 关注

回复
举报

6500

帖子

10

TA的资源

版主

沙发
 

USB接口测试用的软件是哪一个?串口助手能测试USB?

点评

就是普通的串口软件。不过这个软件是我写的,我放在论坛网站上了,需要可以下载。计划有时间了准备在用C++重写一版,想加入Modbus和终端功能。  详情 回复 发表于 2023-6-26 10:29
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 

回复

2937

帖子

4

TA的资源

五彩晶圆(中级)

板凳
 
秦天qintian0303 发表于 2023-6-26 10:25 USB接口测试用的软件是哪一个?串口助手能测试USB?

就是普通的串口软件。不过这个软件是我写的,我放在论坛网站上了,需要可以下载。计划有时间了准备在用C++重写一版,想加入Modbus和终端功能。

点评

相当强,测试软件都是自己写的    详情 回复 发表于 2023-6-26 10:33
 
 
 

回复

6500

帖子

10

TA的资源

版主

4
 
bigbat 发表于 2023-6-26 10:29 就是普通的串口软件。不过这个软件是我写的,我放在论坛网站上了,需要可以下载。计划有时间了准备在用C+ ...

相当强,测试软件都是自己写的  

 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复

6995

帖子

11

TA的资源

版主

5
 

但是英飞凌的HDL封装的比较好,没有这么麻烦。我感觉英飞凌的IDE学起来有点费劲。

点评

你可以不用它的IDE,使用project-creator就可以了  详情 回复 发表于 2023-7-3 09:01
 
 
 

回复

2937

帖子

4

TA的资源

五彩晶圆(中级)

6
 
lugl4313820 发表于 2023-7-3 08:50 但是英飞凌的HDL封装的比较好,没有这么麻烦。我感觉英飞凌的IDE学起来有点费劲。

你可以不用它的IDE,使用project-creator就可以了

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表