谷谷小师妹 发表于 2023-9-22 20:53:22

先楫单片机在RT-Thread如此简单搞起多网卡(以太网+USB 4G)

先楫单片机在RT-Thread如此简单搞起多网卡(以太网+USB 4G)个



一、背景
    在跟一些开发者的沟通当中,楼主遇到一些感兴趣在先楫开发的应用,在与其开发的过程中,感觉有必要记录一个关于先楫一些应用的系列文章,以便后续开发者可以以此参考,于是便有了这次的开篇。
    应用篇不做太多技术问题复现和解决,只关注应用本身。需要知道细节的可以参考公众号的《玩转先楫系列》文章。
    本篇应用主要是针对一个开发者的需求:rtthread的rtos平台中,使用hpm6750搭建双网卡,一个网卡是以太网内网通信,一个是使用USB HOST连接air780e 4G模块进行外网通信。这个应用刚好前阵子玩了usb host rndis通信air780e,可以配合先楫官方的rtt bsp的以太网通信工程进行整合。
    本文以HPM6750EVK2开发板作为示例验证。
二、开发流程
    众所周知,rtthread受欢迎有部分得益于它的丰富的组件,特别是开发者贡献的组件,还有对应的rtthread studio,在搭建的过程中,可以流水线得进行阐述开发过程。
(一)cherryusb组件介绍
    cherryusb协议栈是国内开发者开发的一款USB协议栈,其优秀的性能效率已经深得一些开发者的心,特别是高速USB外设上。在这里希望看到的开发者可以打开cherryusb的github仓库,点个star,支持下cherryusb开发者。仓库: https://github.com/cherry-embedded/CherryUSB.git
    cherryusb本人也一直在维护此协议栈。
    USB与4G模块通信的协议是RNDID,这个协议本文不做阐述,需要了解的可以参考本文-《先楫hpm6000系列USB使用rndis模式连接4G模块》
    rndis协议,cherryusb协议栈已经做了class支持。        在rtos适配上,cherryusb目前适配了三款,其中就包括了rtthread。        在rtthread中使用 rndis通信air780e,cherryusb同样也适配了。需要注意的是:虽然命名是rtthread4.1.1,但是在rtthread5.0照样也是可以用的,不过需要区分下lwip版本。在使用lwip版本为lwip2.0.2的时候,需要使用rndis_host.c文件在使用lwip版本为lwip2.1.2的时候,需要使用rndis_host_lwip2.1.2.c
(二)在rtthread studio搭建环境
    注意点: 在搭建之前,rtthread studio务必使用2.2.7版本,对应的hpm bsp包必须为v1.2。    详情介绍可以看该文-《持续优化|RT-Thread BSP v1.2.0 发布啦!更新要点一文速览,干货满满!》
1、做好相关准备之后,开始新建工程,该工程最好基于实例工程的ehernet_demo,能保证以太网的通信正常。使用其他demo,比如模板工程也行,但需要参考ehernet_demo的配置。
    新建完毕之后,打开RT-Thread Settings,看到Lwip版本为1.1.2,保持lwip的相关配置不变。
    但需要把硬件校验功能禁止了。
2、硬件使能USB,下面子项不需要勾选。
3、选择软件包和配置CherryUSB
(1)软件包选择cherryusb,并添加到工程中。
(2)、配置cherryusb右键选择配置项
使能USB HOST mode,IP选择EHCI,厂家选择HPM,如下:
4、配置完毕,CTRL+S保存setting。等待配置应用到工程。
5、修改加减代码在配置完毕之后,需要在main文件中需要包含一些头文件,并加入以下cherryusb适配初始化函数:#include "board.h"
#include "usbh_core.h"

void lowlevel_usb_init(void)
{
    board_init_usb_pins();
    usbh_initialize();
}
    之后需要在packages文件夹中,以此找到cherryusb->third_party->rt-thread-4.1.1->rndis_host,    里面根据上述说明,这里的lwip版本为2.1.2,所以选择以下文件到application文件夹中,        然后需要在hpm_sdk中,在cherryusb的sample当中,拷贝config文件的usb_config.h,这里主要是为了方便,当然这个配置文件也可以开发者自行配置新建。
    以上整合,application文件夹就以下的样子:
    添加完毕之后,点击工程刷新
    添加的文件就出现在工程中
    如果提示了以下错误,说没有配置HPM_USB的基地址,需要在usb_config.h添加该宏。
    usb_config.h添加以下:如果使用的是USB0那么就是USB0的基地址和中断向量号,如果是USB1则换为USB1的基地址和中断向量号
    在开头加入hpm_soc.h头文件。/* ================ USB Host Port Configuration ==================*/

#define CONFIG_USBHOST_PIPE_NUM 10
#ifndef CONFIG_HPM_USBH_BASE
#define CONFIG_HPM_USBH_BASE    HPM_USB0_BASE
#endif
#ifndef CONFIG_HPM_USBH_IRQn
#define CONFIG_HPM_USBH_IRQn    IRQn_USB0
#endif

/* ================ EHCI Configuration ================ */
#define CONFIG_USB_EHCI_HPMICRO   (1)

    之后需要在对应的Linker文件当中加入USB INFO的相关段放在flash当中,这里的以太网示例用的Linker是flash_rtt_enet.ld,是针对以太网优化过的Linker文件,我们在大概170行左右添加一个section。如下:/* section information
for
usbh
class */
.usbh_class_info : {
      . = ALIGN(
4
);
      __usbh_class_info_start_
_
= .;
      KEEP(*(.usbh_class_info))
      __usbh_class_info_end_
_
= .;
      . = ALIGN(
8
);
} > XPI
0

    再次编译后不报错,点击烧录按钮下载。
三、运行现象
    开启了DHCP之后,会分配以太网和USB 4G模块的IP    ET代表以太网网卡,u0代表USB 4G模块网卡。    分别ping百度,都可以成功到。
四、总结
1、先楫单片机在rtthread开发比较简单快速,bsp包当中有基本针对外设的开发示例,开发者可以基于此示例进行开发工程添加自己的应用。
2、bsp驱动上大多对接了rtthread,大多可以无缝对接rttread相关软件包和组件,提升开发进度。
3、再次提醒:rtthread studio务必使用2.2.7版本,对应的hpm bsp包必须为v1.2。

页: [1]
查看完整版本: 先楫单片机在RT-Thread如此简单搞起多网卡(以太网+USB 4G)