先楫单片机在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本人也一直在维护此协议栈。
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适配初始化函数: - #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。
|