谷动谷力

 找回密码
 立即注册
查看: 2044|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
发表于 2023-9-22 20:53:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
先楫单片机在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开发者。

    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。

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适配初始化函数:
  1. #include "board.h"
  2. #include "usbh_core.h"

  3. void lowlevel_usb_init(void)
  4. {
  5.     board_init_usb_pins();
  6.     usbh_initialize();
  7. }
复制代码

    之后需要在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头文件。
  1. /* ================ USB Host Port Configuration ==================*/

  2. #define CONFIG_USBHOST_PIPE_NUM 10
  3. #ifndef CONFIG_HPM_USBH_BASE
  4. #define CONFIG_HPM_USBH_BASE    HPM_USB0_BASE
  5. #endif
  6. #ifndef CONFIG_HPM_USBH_IRQn
  7. #define CONFIG_HPM_USBH_IRQn    IRQn_USB0
  8. #endif

  9. /* ================ EHCI Configuration ================ */
  10. #define CONFIG_USB_EHCI_HPMICRO     (1)
复制代码


    之后需要在对应的Linker文件当中加入USB INFO的相关段放在flash当中,这里的以太网示例用的Linker是flash_rtt_enet.ld,是针对以太网优化过的Linker文件,我们在大概170行左右添加一个section。如下:
  1. /* section information
  2. for
  3. usbh
  4. class */
  5.   .usbh_class_info : {
  6.       . = ALIGN(
  7. 4
  8. );
  9.       __usbh_class_info_start_
  10. _
  11. = .;
  12.       KEEP(*(.usbh_class_info))
  13.       __usbh_class_info_end_
  14. _
  15. = .;
  16.       . = ALIGN(
  17. 8
  18. );
  19. } > XPI
  20. 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。


+10
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-11-15 13:36 , Processed in 0.256953 second(s), 42 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表