hpm5361在rtthread轻松搞起USB转换器

2023/11/21 20:08
阅读数 15

一、概述

    在半个月前,先楫发布了rtthread bsp 1.3.0版本,该版本其中一个功能就是加入了hpm5300的支持,对应的板型是hpm5300evk,对应的芯片型号是hpm5361。从先楫官方的数据手册可知,除了丰富的电机外设,也有对应的丰富通讯外设接口。这里只截图了通讯接口部分,其他功能可以详情看对应的数据手册。


    对应的rtthread设备驱动框架中,先楫也做好了不少外设,其中包括了gpio, uart, spi, timer, i2c, usb, canfd等。

    

    本来主要着重于利用rtthread的芯片设备驱动,制作一个USB转换器,USB CDC转换SPI、IIC、CAN这三个设备,方便用户可以简单验证外设功能以及调试需要。

本文的code例子,找到usb_converter 链接:  

https://gitee.com/RCSN/hpmicro_rtthread_demo  


二、开发流程

(一)链接

    1、rtthread的bsp包安装教程详看先楫官方公众号发布的文章:【重磅来袭】RT-Thread BSP v1.3.0 发布


    2、既然是USB转换器,那就需要一个PC端的上位机进行数据简易转换收发,主要实现了USB转SPI/IIC/CAN,使用QT开发,code仓库也提供代码盒可执行文件。



(二)新建工程

    这里使用模板工程进行新建,调试器选择FT2232。


(三)外设驱动加入

    这里使用到了USB、SPI、I2C、CAN,故在硬件的芯片设备驱动中需要选择以下:

    

    组件中,确保CAN、I2C、SPI的设备驱动程序对应使能


(四)添加软件包(cherryusb加入和配置)

    在软件包中搜索cherryusb,进行添加。


    点击右键选择配置项


    分别使能USB device模式,速度选择HS,USB IP选择HPM,并使能usb cdc设备类型。


(五)加入应用

    1、以上配置完成后,进行编译下,发现会报错提示没有usb_config.h这个头文件


    该头文件主要是需要用户自行配置USB相关参数,cherryusb也提供了该模板文件,在仓库的主目录中cherryusb_config_template.h


    2、由此我们可以在工程下右键新建一个文件夹,可叫usb2xxx,里面再新建一个inc和src文件夹,以及再新建个SConscript文件


    SConscript文件中写入添加Inc包含,以及src下的所有文件加入。

    cherryusb_config_template.h改名为usb_config.h,并放在usb2xxx的inc中

    需要注意配置的是,USB的printf和malloc free需要切换为rtthread的对应API


    先楫有自身的usb vid参数,可以在config中加入。


3、USB打开与关闭设备操作流程

    这里以SPI设备作为例子

    USB tools的设备打开和关闭操作主要通过转换cdc的配置参数进行,比如设置波特率、parity和stop位来表示SPI的数据模式和传输模式。    在QT的源码中可以看到:


  下位机中, cherryusb的串口配置同样提供了回调 usbd_cdc_acm_set_line_coding这个API,我们需要把对应的串口配置保存起来,在一个线程里面进行处理判断USB设备的打开和关闭。


    这些串口参数根据上位机进行解析判断打开或者关闭的是哪个设备,比如SPI。


    验证打开下SPI。


    通过msh打印可知道,下位机解析设备完成,同样I2C和CAN也是如此


4、外设收发与初始化

    在设备框架中,rtthread对于设备的操作无非就是open, close, config, write, read等操作,同样先楫也对应做好了适配

(1)SPI

    在rtthread官方文档中

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/spi/spi


    配置SPI设备使用的是rt_spi_configure 这个API


    对于config参数如下解释


    如此一来可以封装如下:


    对于SPI的收发,rtthread同样也提供了对应接口


    同样进行封装


(2)I2C

    在rtthread官方文档中 

 https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/i2c/i2c


  对于I2C的数据收发,提供了rt_i2c_master_send和rt_i2c_master_recv两个API,以此可以进行封装


(3)CAN

 同样rtthread也有对应的文档说明 

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/can/can

    先楫在适配CAN设备的时候,支持了硬件滤波组


    在接收上,可以设置接收回调函数,该函数可以发送一个事件或者信号量通知CAN数据处理线程有数据到达,可以进行接收。


5、USB数据转换

    通过以上的外设数据收发API封装,可以在USB的接收中,也类似做个回调,发送信号量通知处理


三、验证

    在I2C中,另外一块HPM5300EVK烧录hpm_sdk的从机例子,读取地址为0x16,读取8字节,接收消息中可以显示到

    

    在SPI中,另外一块HPM5300EVK烧录hpm_sdk的从机例子,进行数据收发,USB转换器可以正常显示收发


    在CAN中,使用CAN盒进行收发,也可正常显示收发。


四、结论

1、先楫对接rtthread的设备驱动丰富,基本的通讯外设都可以使用rtthread的外设设备框架,保证项目的无缝切换。


2、使用rtthread的设备驱动框架,可以无需太多理解底层,只需关注应用开发,实现快速开发。


3、rtthread的文档相对丰富,从快速上手到内核、设备驱动、组件、软件包等都有对应的说明。


链接:https://www.rt-thread.org/document/site/#/


———————End——————

新生态,创未来 | 2023RT-Thread 开发者大会开启报名


邀请你参加 2023 RT-Thread 开发者大会的大理由

1、刷新RT-Thread最新技术动态和产业服务能力

2、聆听行业大咖分享,洞察产业趋势

3、丰富的技术和产品展示,前沿技术发展和应用

4、绝佳的实践机会:AIOT、MPU、RISC-V...

5、精美伴手礼人手一份开发板盲盒和免费午餐

6、黑科技满点~滴水湖地铁口安排无人车接送至会场


立刻扫码报名吧





👇 点击阅读原文报名

本文分享自微信公众号 - RTThread物联网操作系统(RTThread)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部