0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

让开发板畅游网络:RT-Thread CherryUSB 驱动 RNDIS 模块详解 | 技术集结

RT-Thread官方账号 ? 2025-07-02 17:04 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文通过在 RT-Thread 操作系统上,使用CherryUSB 软件包作为USB Host 协议栈,驱动AIR780E 4G Cat.1 模块 的 RNDIS 功能,并成功接入lwIP 网络协议栈,最终在开发板上实现了通过 4G 模块上网的功能,以STM32F429为例。


目录


新建工程


配置cubemx


配置cherryusb


main.c添加代码


完成

1 新建工程


8809de64-5723-11f0-9cf1-92fbcf53809c.png


2 配置cubemx


四大件不过多赘述

881e3cf6-5723-11f0-9cf1-92fbcf53809c.png882e97fe-5723-11f0-9cf1-92fbcf53809c.png88664190-5723-11f0-9cf1-92fbcf53809c.png887c74ba-5723-11f0-9cf1-92fbcf53809c.png

打开USB HOST功能

888f5b20-5723-11f0-9cf1-92fbcf53809c.png

打开USB HOST中断

889d7d7c-5723-11f0-9cf1-92fbcf53809c.png

cubemx配置到此结束,点击生成工程,关闭cubemx


3 配置cherryusb


先编译一下工程,发现会有个报错:

88ba483a-5723-11f0-9cf1-92fbcf53809c.png

把RT_WEAK删掉重新编译就不会报错了

88d3e6aa-5723-11f0-9cf1-92fbcf53809c.png

然后打开RT-Thread Settings,添加软件包

88ea05ca-5723-11f0-9cf1-92fbcf53809c.png

配置cherryusb

890c30dc-5723-11f0-9cf1-92fbcf53809c.png

其实这里可以只打开rndis,不打开CDC ACM也能驱动air780实现LWIP上网,但是终端会一大堆报红提示不支持CDC ACM,强迫症难受所以干脆打开


这时候保存,编译会有一大堆报错,不慌,一个一个解决:

1

usb_config.h报错

8920f6fc-5723-11f0-9cf1-92fbcf53809c.png

解决办法,在applications文件夹下添加usb_config.h代码内容如下:

/** Copyright (c) 2022, sakumisu** SPDX-License-Identifier: Apache-2.0*/#ifndefCHERRYUSB_CONFIG_H#defineCHERRYUSB_CONFIG_H/* ================ USB common Configuration ================ */#defineCONFIG_USB_PRINTF(...) printf(__VA_ARGS__)#ifndefCONFIG_USB_DBG_LEVEL#defineCONFIG_USB_DBG_LEVEL USB_DBG_INFO#endif/* Enable print with color */#defineCONFIG_USB_PRINTF_COLOR_ENABLE/* data align size when use dma */#ifndefCONFIG_USB_ALIGN_SIZE#defineCONFIG_USB_ALIGN_SIZE 4#endif/* attribute data into no cache ram */#defineUSB_NOCACHE_RAM_SECTION __attribute__((section(".noncacheable")))/* ================= USB Device Stack Configuration ================ *//* Ep0 in and out transfer buffer */#ifndefCONFIG_USBDEV_REQUEST_BUFFER_LEN#defineCONFIG_USBDEV_REQUEST_BUFFER_LEN 512#endif/* Setup packet log for debug */// #define CONFIG_USBDEV_SETUP_LOG_PRINT/* Check if the input descriptor is correct */// #define CONFIG_USBDEV_DESC_CHECK/* Enable test mode */// #define CONFIG_USBDEV_TEST_MODE#ifndefCONFIG_USBDEV_MSC_MAX_LUN#defineCONFIG_USBDEV_MSC_MAX_LUN 1#endif#ifndefCONFIG_USBDEV_MSC_MAX_BUFSIZE#defineCONFIG_USBDEV_MSC_MAX_BUFSIZE 512#endif#ifndefCONFIG_USBDEV_MSC_MANUFACTURER_STRING#defineCONFIG_USBDEV_MSC_MANUFACTURER_STRING""#endif#ifndefCONFIG_USBDEV_MSC_PRODUCT_STRING#defineCONFIG_USBDEV_MSC_PRODUCT_STRING""#endif#ifndefCONFIG_USBDEV_MSC_VERSION_STRING#defineCONFIG_USBDEV_MSC_VERSION_STRING"0.01"#endif// #define CONFIG_USBDEV_MSC_THREAD#ifndefCONFIG_USBDEV_MSC_PRIO#defineCONFIG_USBDEV_MSC_PRIO 4#endif#ifndefCONFIG_USBDEV_MSC_STACKSIZE#defineCONFIG_USBDEV_MSC_STACKSIZE 2048#endif#ifndefCONFIG_USBDEV_RNDIS_RESP_BUFFER_SIZE#defineCONFIG_USBDEV_RNDIS_RESP_BUFFER_SIZE 156#endif#ifndefCONFIG_USBDEV_RNDIS_ETH_MAX_FRAME_SIZE#defineCONFIG_USBDEV_RNDIS_ETH_MAX_FRAME_SIZE 2048#endif#ifndefCONFIG_USBDEV_RNDIS_VENDOR_ID#defineCONFIG_USBDEV_RNDIS_VENDOR_ID 0x0000ffff#endif#ifndefCONFIG_USBDEV_RNDIS_VENDOR_DESC#defineCONFIG_USBDEV_RNDIS_VENDOR_DESC"CherryUSB"#endif#defineCONFIG_USBDEV_RNDIS_USING_LWIP/* ================ USB HOST Stack Configuration ================== */#defineCONFIG_USBHOST_MAX_RHPORTS 1#defineCONFIG_USBHOST_MAX_EXTHUBS 1#defineCONFIG_USBHOST_MAX_EHPORTS 4#defineCONFIG_USBHOST_MAX_INTERFACES 8#defineCONFIG_USBHOST_MAX_INTF_ALTSETTINGS 8#defineCONFIG_USBHOST_MAX_ENDPOINTS 4#defineCONFIG_USBHOST_MAX_CDC_ACM_CLASS 4#defineCONFIG_USBHOST_MAX_HID_CLASS 4#defineCONFIG_USBHOST_MAX_MSC_CLASS 2#defineCONFIG_USBHOST_MAX_AUDIO_CLASS 1#defineCONFIG_USBHOST_MAX_VIDEO_CLASS 1#defineCONFIG_USBHOST_DEV_NAMELEN 16#ifndefCONFIG_USBHOST_PSC_PRIO#defineCONFIG_USBHOST_PSC_PRIO 0#endif#ifndefCONFIG_USBHOST_PSC_STACKSIZE#defineCONFIG_USBHOST_PSC_STACKSIZE 2048#endif//#define CONFIG_USBHOST_GET_STRING_DESC// #define CONFIG_USBHOST_MSOS_ENABLE#ifndefCONFIG_USBHOST_MSOS_VENDOR_CODE#defineCONFIG_USBHOST_MSOS_VENDOR_CODE 0x00#endif/* Ep0 max transfer buffer */#ifndefCONFIG_USBHOST_REQUEST_BUFFER_LEN#defineCONFIG_USBHOST_REQUEST_BUFFER_LEN 2048#endif#ifndefCONFIG_USBHOST_CONTROL_TRANSFER_TIMEOUT#defineCONFIG_USBHOST_CONTROL_TRANSFER_TIMEOUT 500#endif#ifndefCONFIG_USBHOST_MSC_TIMEOUT#defineCONFIG_USBHOST_MSC_TIMEOUT 5000#endif/* This parameter affects usb performance, and depends on (TCP_WND)tcp eceive windows size,* you can change with 2K,4K,8K,16K,default is 2K to get one TCP_MSS*/#ifndefCONFIG_USBHOST_RNDIS_ETH_MAX_RX_SIZE#defineCONFIG_USBHOST_RNDIS_ETH_MAX_RX_SIZE (2048)#endif#ifndefCONFIG_USBHOST_RNDIS_ETH_MAX_TX_SIZE#defineCONFIG_USBHOST_RNDIS_ETH_MAX_TX_SIZE (2048)#endif/* This parameter affects usb performance, and depends on (TCP_WND)tcp eceive windows size,* you can change with 2K,4K,8K,16K,default is 2K to get one TCP_MSS*/#ifndefCONFIG_USBHOST_CDC_NCM_ETH_MAX_RX_SIZE#defineCONFIG_USBHOST_CDC_NCM_ETH_MAX_RX_SIZE (2048)#endif#ifndefCONFIG_USBHOST_CDC_NCM_ETH_MAX_TX_SIZE#defineCONFIG_USBHOST_CDC_NCM_ETH_MAX_TX_SIZE (2048)#endif/* This parameter affects usb performance, and depends on (TCP_WND)tcp eceive windows size,* you can change to 2K ~ 16K and must be larger than TCP RX windows size in order to avoid being overflow.*/#ifndefCONFIG_USBHOST_ASIX_ETH_MAX_RX_SIZE#defineCONFIG_USBHOST_ASIX_ETH_MAX_RX_SIZE (2048)#endif/* Because lwip do not support multi pbuf at a time, so increasing this variable has no performance improvement */#ifndefCONFIG_USBHOST_ASIX_ETH_MAX_TX_SIZE#defineCONFIG_USBHOST_ASIX_ETH_MAX_TX_SIZE (2048)#endif/* This parameter affects usb performance, and depends on (TCP_WND)tcp eceive windows size,* you can change to 2K ~ 16K and must be larger than TCP RX windows size in order to avoid being overflow.*/#ifndefCONFIG_USBHOST_RTL8152_ETH_MAX_RX_SIZE#defineCONFIG_USBHOST_RTL8152_ETH_MAX_RX_SIZE (2048)#endif/* Because lwip do not support multi pbuf at a time, so increasing this variable has no performance improvement */#ifndefCONFIG_USBHOST_RTL8152_ETH_MAX_TX_SIZE#defineCONFIG_USBHOST_RTL8152_ETH_MAX_TX_SIZE (2048)#endif#defineCONFIG_USBHOST_BLUETOOTH_HCI_H4// #define CONFIG_USBHOST_BLUETOOTH_HCI_LOG#ifndefCONFIG_USBHOST_BLUETOOTH_TX_SIZE#defineCONFIG_USBHOST_BLUETOOTH_TX_SIZE 2048#endif#ifndefCONFIG_USBHOST_BLUETOOTH_RX_SIZE#defineCONFIG_USBHOST_BLUETOOTH_RX_SIZE 2048#endif/* ================ USB Device Port Configuration ================*/#ifndefCONFIG_USBDEV_MAX_BUS#defineCONFIG_USBDEV_MAX_BUS 1// for now, bus num must be 1 except hpm ip#endif#ifndefCONFIG_USBDEV_EP_NUM#defineCONFIG_USBDEV_EP_NUM 6#endif/* ---------------- FSDEV Configuration ---------------- *///#define CONFIG_USBDEV_FSDEV_PMA_ACCESS 2 // maybe 1 or 2, many chips may have a difference/* ---------------- DWC2 Configuration ---------------- */// #define CONFIG_USB_DWC2_RXALL_FIFO_SIZE (320)// #define CONFIG_USB_DWC2_TX0_FIFO_SIZE (64 / 4)// #define CONFIG_USB_DWC2_TX1_FIFO_SIZE (512 / 4)// #define CONFIG_USB_DWC2_TX2_FIFO_SIZE (64 / 4)// #define CONFIG_USB_DWC2_TX3_FIFO_SIZE (64 / 4)// #define CONFIG_USB_DWC2_TX4_FIFO_SIZE (0 / 4)// #define CONFIG_USB_DWC2_TX5_FIFO_SIZE (0 / 4)// #define CONFIG_USB_DWC2_TX6_FIFO_SIZE (0 / 4)// #define CONFIG_USB_DWC2_TX7_FIFO_SIZE (0 / 4)// #define CONFIG_USB_DWC2_TX8_FIFO_SIZE (0 / 4)/* ---------------- MUSB Configuration ---------------- */// #define CONFIG_USB_MUSB_SUNXI/* ================ USB Host Port Configuration ==================*/#ifndefCONFIG_USBHOST_MAX_BUS#defineCONFIG_USBHOST_MAX_BUS 1#endif#ifndefCONFIG_USBHOST_PIPE_NUM#defineCONFIG_USBHOST_PIPE_NUM 12#endif/* ---------------- EHCI Configuration ---------------- */#defineCONFIG_USB_EHCI_HCCR_OFFSET (0x0)#defineCONFIG_USB_EHCI_FRAME_LIST_SIZE 1024#defineCONFIG_USB_EHCI_QH_NUM CONFIG_USBHOST_PIPE_NUM#defineCONFIG_USB_EHCI_QTD_NUM 3#defineCONFIG_USB_EHCI_ITD_NUM 20// #define CONFIG_USB_EHCI_HCOR_RESERVED_DISABLE// #define CONFIG_USB_EHCI_CONFIGFLAG// #define CONFIG_USB_EHCI_ISO// #define CONFIG_USB_EHCI_WITH_OHCI/* ---------------- OHCI Configuration ---------------- */#defineCONFIG_USB_OHCI_HCOR_OFFSET (0x0)/* ---------------- XHCI Configuration ---------------- */#defineCONFIG_USB_XHCI_HCCR_OFFSET (0x0)/* ---------------- DWC2 Configuration ---------------- *//* largest non-periodic USB packet used / 4 */#defineCONFIG_USB_DWC2_NPTX_FIFO_SIZE (512 / 4)/* largest periodic USB packet used / 4 */#defineCONFIG_USB_DWC2_PTX_FIFO_SIZE (1024 / 4)/** (largest USB packet used / 4) + 1 for status information + 1 transfer complete +* 1 location each for Bulk/Control endpoint for handling NAK/NYET scenario*/#defineCONFIG_USB_DWC2_RX_FIFO_SIZE ((1012 - CONFIG_USB_DWC2_NPTX_FIFO_SIZE - CONFIG_USB_DWC2_PTX_FIFO_SIZE))/* ---------------- MUSB Configuration ---------------- */// #define CONFIG_USB_MUSB_SUNXI#endif

然后再次编译,报错少了很多

893aa6ba-5723-11f0-9cf1-92fbcf53809c.png

2

RT_TIMER_THREAD_STACK_SIZE问题

89551ebe-5723-11f0-9cf1-92fbcf53809c.png

解决办法

89622ffa-5723-11f0-9cf1-92fbcf53809c.png

注意,也要将空闲线程栈调大

8977e9c6-5723-11f0-9cf1-92fbcf53809c.png

3

lwip版本问题

898ef314-5723-11f0-9cf1-92fbcf53809c.png

解决办法,使用lwip2.1.2

89aaefc4-5723-11f0-9cf1-92fbcf53809c.png89c294a8-5723-11f0-9cf1-92fbcf53809c.png

4

lwip接收线程问题

89da898c-5723-11f0-9cf1-92fbcf53809c.png

解决办法,关闭lwip接收线程

89f68fa6-5723-11f0-9cf1-92fbcf53809c.png

5

lwip线程堆栈问题

8a0be414-5723-11f0-9cf1-92fbcf53809c.png

解决办法增大线程堆栈

8a202884-5723-11f0-9cf1-92fbcf53809c.png

6

链接脚本问题

8a36ac80-5723-11f0-9cf1-92fbcf53809c.png

解决办法,在链接脚本里增加代码

8a4b807e-5723-11f0-9cf1-92fbcf53809c.png8a6384ee-5723-11f0-9cf1-92fbcf53809c.png

/* section information for USB Host class (CherryUSB) */ . =ALIGN(4); __usbh_class_info_start__ = .; KEEP(*(.usbh_class_info)) __usbh_class_info_end__ = .;

再次编译,没有问题

8a749d10-5723-11f0-9cf1-92fbcf53809c.png


4 main.c添加代码


8a8708d8-5723-11f0-9cf1-92fbcf53809c.png

#include#defineDBG_TAG"main"#defineDBG_LVL DBG_LOG#include#include#include"usbh_core.h"#include"lwip/tcpip.h"intmain(void){ usbh_initialize(0, USB_OTG_HS_PERIPH_BASE);returnRT_EOK;


5 完成


烧录之后终端信息:

8aa5aeaa-5723-11f0-9cf1-92fbcf53809c.png

输入ping命令:

8aafff86-5723-11f0-9cf1-92fbcf53809c.png


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    7173

    浏览量

    125862
  • 开发板
    +关注

    关注

    25

    文章

    5725

    浏览量

    105585
  • RT-Thread
    +关注

    关注

    32

    文章

    1424

    浏览量

    42140
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用RT-Thread Studio创建支持HPM6750开发板RT-Thread项目

    基于RT-Thread系统的项目,以及进行项目的调试、将项目生成的二进制文件烧录到开发板上、使用串口终端和RT-Thread的finsh进行交互式控制台调试。下载和安装RT-Thread
    发表于 06-08 11:22

    【原创精选】RT-Thread征文精选技术文章合集

    RT-Thread自动初始化详解GD32 RISC-V系列 BSP框架制作与移植GD32407V-START开发板的BSP框架制作与移植基于Select/Poll实现并发服务器(一)基于Select
    发表于 07-26 14:56

    RT-Thread开发,如何有效学习RT-Thread的五个步骤

    RT-Thread推出RT-Thread Inside战略开放RT-Thread开发平台授权合作,与硬件十万个为什么合作首次推出第一款RT-
    的头像 发表于 09-25 09:55 ?3.5w次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>开发</b>,如何有效学习<b class='flag-5'>RT-Thread</b>的五个步骤

    RT-Thread Studio驱动SD卡

    总结前言硬件平台:RT-Thread ART-Pi STM32H750XBH6开发板 H750开发板开发软件:RT-Thread Studi
    发表于 12-27 19:13 ?20次下载
    <b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>驱动</b>SD卡

    RT-Thread全球技术大会:RNDIS设备介绍及应用

    RT-Thread全球技术大会上,以RNDIS设备驱动框架为主题,首先介绍了RNDIS设备介绍及应用。
    的头像 发表于 05-28 14:36 ?2615次阅读
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:<b class='flag-5'>RNDIS</b>设备介绍及应用

    RT-Thread全球技术大会:RNDIS通信协议原理及主机驱动框架

    RT-Thread全球技术大会直播上,开发者详细介绍了RNDIS通信协议的原理及主机驱动框架,具体资料如下图:
    的头像 发表于 05-28 14:43 ?3170次阅读
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:<b class='flag-5'>RNDIS</b>通信协议原理及主机<b class='flag-5'>驱动</b>框架

    RT-Thread技术大会:RNDIS主机驱动软件应用说明

    RT-Thread全球技术大会上,开发者详细介绍了RNDIS主机驱动软件的应用说明,据图如下图:
    的头像 发表于 05-28 14:57 ?2123次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>技术</b>大会:<b class='flag-5'>RNDIS</b>主机<b class='flag-5'>驱动</b>软件应用说明

    基于RoboMasterC型开发板RT-Thread使用分享(一)

    假期期间打算开一个坑,和大家分享下基于RoboMaster开发板C型上RT-Thread使用,本系列文章计划是给刚接触STM32和RT-Thread的同学看的,讲的会稍微基础一点。 硬件与开发
    的头像 发表于 01-05 12:10 ?3295次阅读

    RT-Thread文档_其他开发板 上手指南

    RT-Thread文档_其他开发板 上手指南
    发表于 02-22 18:27 ?0次下载
    <b class='flag-5'>RT-Thread</b>文档_其他<b class='flag-5'>开发板</b> 上手指南

    英飞凌联合 RT-Thread 发布 PSoC? 62 with CAPSENSE ? evaluation kit开发板

    近日,RT-Thread 社区团队打造了新品开发板:英飞凌联合 RT-Thread 发布 ?PSoC 62 with CAPSENSE evaluation kit开发板?(以下简称P
    的头像 发表于 04-13 01:35 ?2474次阅读

    基于rt-thread的socket通信设计

    最近再研究 rt-thread 的通信 ,想设计出 eps8266(多个) rt-thread(作为中控) 服务器的通信框架,使用的开发板是 潘多拉
    的头像 发表于 10-13 15:02 ?1719次阅读
    基于<b class='flag-5'>rt-thread</b>的socket通信设计

    rt-studio潘多拉开发板最新rt-thread不能运行解决办法

    rt-studio 上 选择基于开发板的项目,选择潘多拉,rt-thread选择lasted ,如下图
    的头像 发表于 10-16 14:50 ?2001次阅读
    <b class='flag-5'>rt</b>-studio潘多拉<b class='flag-5'>开发板</b>最新<b class='flag-5'>rt-thread</b>不能运行解决办法

    【QEMU系列】不用开发板运行RT-Thread指南-ARM架构

    简介在物联网和嵌入式系统的开发中,RT-Thread操作系统凭借其小巧、高效和灵活的特点,受到了越来越多开发者的青睐。然而,对于很多刚刚接触RT-Thread
    的头像 发表于 08-09 08:35 ?1660次阅读
    【QEMU系列】不用<b class='flag-5'>开发板</b>运行<b class='flag-5'>RT-Thread</b>指南-ARM架构

    RT-Thread USB协议栈-CherryUSB快速上手指南

    的是,CherryUSB已经成为RT-Thread的USB标准对接协议栈实现。这意味着在RT-Thread系统中,开发者可以方便地使用CherryU
    的头像 发表于 11-22 01:09 ?1570次阅读
    <b class='flag-5'>RT-Thread</b> USB协议栈-<b class='flag-5'>CherryUSB</b>快速上手指南

    CherryUSB-HID设备实践 | 技术集结

    本文为大家带来CherryUSB-HID设备实践,以MCXA156为例。开发环境搭建请参考RT-Thread的快速入门,咱们就直入主题,折腾USB去。CherryUSB的移植适配据笔者
    的头像 发表于 04-27 17:46 ?776次阅读
    <b class='flag-5'>CherryUSB</b>-HID设备实践 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>