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

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

3天内不再提示

使用i.MX RT1060连接USB 4G module(RNDIS模式)

恩智浦MCU加油站 来源:恩智浦MCU加油站 2023-05-04 10:45 次阅读

NXPSDK里面有一个例程evkbmimxrt1060_lwip_dhcp_usb_bm,该例程可以实现连接3款不同的支持RNDIS的手机,实现USB 4G上网功能。但是如果客户实际使用的上网终端是4G模块,而不是这三款手机,这个例程就有可能不能直接跑起来,需要我们去做适配。

本文就将介绍,当上网的终端更改为Quectel的4G LTE模块C200A-CN时(支持RNDIS模式),如何来做响应的适配,并实现上网的功能。

一、基础知识

1.1 什么是RNDIS

RNDIS = Remote Network Driver Interface Specification,即远程网络驱动接口规范。这是微软定义的一套基于USB的通信协议。基于该协议的USB设备,可以免驱直接接入windows系统,在windows操作系统上显示为一个网卡。

1.2网络层次模型

使用RT1060连接USB 4G module上网的网络层次模型如下:

f85057ea-e6b2-11ed-ab56-dac502259ad0.png

从便于理解的角度上,我们可以把RNDIS看成是一个特殊的PHY,完成MAC的传输。

1.3 RNDIS上网接口/端点分析

在SDK原例程中,使用了2个接口,3个端点,见下图。

f85dcb82-e6b2-11ed-ab56-dac502259ad0.png

其中数据接口就是用来传输以太包的,每个方向有一个端点。RNDIS接口主要是用来查询设备状态。

1.4 C200A接口/端点分析

C200A的实现了5个接口,其中包含了上述接口:

f868c884-e6b2-11ed-ab56-dac502259ad0.png

额外需要使用到的接口是AT接口,见下图。

f874fae6-e6b2-11ed-ab56-dac502259ad0.png

AT接口的功能是拨号,这里面包括了对模块的状态查询和控制等。我们需要在这里向4G模块查询相关的状态,并且发送联网命令,这样模块才能接入互联网,这样后面发送的IP包才能和互联网进行通信。使能AT接口以及在AT接口上拨号,是我们使能/适配新的4G module需要做的主要工作。 4G模块其他定义的接口,我们这里并不需要使用到,所以本文在此不做介绍。

1.5关于NXP SDK USB HOST的一些基础知识

1)SDK会自动解析配置描述符,这里会识别出配置描述符中所有的接口和端点。参见USB_HostParseDeviceConfigurationDescriptor(),这个函数在/evkbmimxrt1060_lwip_dhcp_usb_bm_c200a/usb/host/usb_host_devices.c。

f8814198-e6b2-11ed-ab56-dac502259ad0.png

2)Event回调,参见USB_HostEvent(),此函数在/evkbmimxrt1060_lwip_dhcp_usb_bm_c200a/lwip/port/usb_ethernetif_bm.c。

f88e0cd4-e6b2-11ed-ab56-dac502259ad0.png

3)为每个接口open pipe。

参见USB_HostCdcOpenDataInterfac(),USB_HostCdcOpenControlInterface(), in usb_host_cdc.c。

f89ee6ee-e6b2-11ed-ab56-dac502259ad0.png

4)状态机维护

状态机的维护请参见USB_HosCdcRndisTask(),以及 USB_HostCdcRndisControlCallback() in /evkbmimxrt1060_lwip_dhcp_usb_bm_c200a/lwip/port/usb_ethernetif_bm.c 下图展示的是默认的状态机,我们需要做一些调整来使能4G模块的AT接口以及在AT接口上拨号。

f8adfd28-e6b2-11ed-ab56-dac502259ad0.png  

二、实现细节

基于前面介绍的基础知识,本章节主要介绍适配到C200A的实现细节,这里更侧重于代码更改来讲述。代码的更新主要集中于usb_ethernet_bm.c和usb_ethernet.h。

增加AT接口对应的数据结构

f8bc1e76-e6b2-11ed-ab56-dac502259ad0.png

更新状态机

f8c45be0-e6b2-11ed-ab56-dac502259ad0.png

增加对应的API和callback,具体细节请参见本文相关的代码,下面列出了关键的API。

USB_HostCdcRndisATInCallback();
USB_HostCdcRndisATOutCallback();
dial_tx(); // Send command on AT interface
dial_rx(); // Receive message from AT interface
lte_dial(); // Dial, then USB 4G module can connect to internet
USB_HostCdcRndisC200ACallback();
ep0_communicate(); // API used for AT interface enablement, to send/receive command/message to/from EP0
init_c200a(); // Initiate C200A, then AT interface communication is available

支持的最大接口数。

这个最大接口数在连接不同的USB 4G Module的时候,可能需要更改。比如对于LE910C1-EU,需要更改为8。对于本文中使用到的C200A,默认的5就可以工作。

#define USB_HOST_CONFIG_CONFIGURATION_MAX_INTERFACE (8U)

更新状态机,主要代码变动在evkbmimxrt1060_lwip_dhcp_usb_bmlwipportusb_ethernetif_bm.c中的USB_HostCdcRndisControlCallback()以及USB_HosCdcRndisTask()中,具体细节请参见本文相关的代码。

适配4G模块的RNDIS接口和AT接口,这里的AT接口序号是通过USB协议分析仪抓出的log反向推导出来的。我们需要把协议栈解析出来的接口绑定到g_RndisInstance.atInterfaceHandle上。以下代码位于evkbmimxrt1060_lwip_dhcp_usb_bmlwipportusb_ethernetif_bm.c 中的

USB_HostCdcRndisEvent();。该代码直接将协议栈解析好的interface[3](通过usb分析仪抓包解析得出)付给对应的接口handle。

f8ce5cee-e6b2-11ed-ab56-dac502259ad0.png

三、注意事项

由于4G模块比较耗电,在本例中i.MX RT1060模块需要使用电源适配器外接供电。否则如果供电不足会导致4G模块重复复位。

f8d9cf98-e6b2-11ed-ab56-dac502259ad0.jpg

四、小结

在万物互联的时代,越来越多的嵌入式设备会有接入互联网的需求。本文阐述了通过USB去连接4G模块去实现上网的相关基础知识和实现细节。希望这些内容能在读者在碰到相关的应用时能有所帮助。

审核编辑:汤梓红

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

    关注

    60

    文章

    1278

    浏览量

    184061
  • 接口
    +关注

    关注

    33

    文章

    8577

    浏览量

    151025
  • usb
    usb
    +关注

    关注

    60

    文章

    7938

    浏览量

    264490
  • Module
    +关注

    关注

    0

    文章

    68

    浏览量

    12851
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1035

    浏览量

    45905

原文标题:使用i.MX RT1060连接USB 4G module(RNDIS模式)

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    i.MX RT1060i.MX RT1064的迁移手册

    i.MX RT1060i.MX RT1064的迁移指南
    发表于 12-12 07:21

    i.MX RT1060跨界处理器产品数据手册

    i.MX RT1060跨界处理器(消费级)数据手册
    发表于 12-12 08:08

    i.MX RT1060功耗和测量资料分享

    i.MX RT1060的功耗和测量
    发表于 12-12 08:08

    i.MX RT1060产品使用寿命的估计方法

    i.MX RT1060产品使用寿命估计
    发表于 12-12 07:16

    i.MX RT1060的加强功能介绍

    i.MX RT1060的加强功能
    发表于 12-12 06:10

    i.MX RT1060跨界处理器产品数据手册

    i.MX RT 1060跨界处理器(工业级)数据手册
    发表于 12-12 07:14

    如何在RT1060/1061上运行LAN 8720的低功耗模式

    各位,根据测试,我们需要验证 LAN 8720 在 RT1060/RT1061 MCU 上的低功耗模式。有没有源代码可以分享给我们在RT1060/R
    发表于 04-06 06:19

    AzureWave AW-AM510-uSD和i.MX RT1060 EVK一直收到SDIO驱动程序初始化失败怎么解决?

    我正在使用 AzureWave AW-AM510-uSD 和 i.MX RT1060 EVK 板来试用 evkmimxrt1060_wifi_cli SDK 示例项目。我已经转到“/source
    发表于 04-28 07:35

    i.MX RT系列(例如 RT1050/1060)有多少个PWM通道?

    i.MX RT 系列(例如 RT1050/1060)有多少个 PWM 通道? 我可以像在 KV58 MCU(两个 flexPWM 模块)上做同样的事情吗?
    发表于 05-18 07:07

    i.MX RT开发笔记-08 | i.MX RT1062嵌套中断向量控制器NVIC(按键中断检测)

    系列文章目录i.MX RT开发笔记-01 | 初识 i.MX RT1062 跨界MCUi.MX RT
    发表于 12-01 13:51 2次下载
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>开发笔记-08 | <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1062嵌套中断向量控制器NVIC(按键中断检测)

    RT-Thread & NXP 发布 i.MX RT 系列 BSP 新框架

    前言i.MX RT 是 NXP 推出的跨界处理器系列。该系列下又包括 i.MX RT1020、i.MX
    发表于 12-07 13:06 2次下载
    <b class='flag-5'>RT</b>-Thread & NXP 发布 <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b> 系列 BSP 新框架

    i.MX RT超低功耗模式捉虫记

    SNVS模式i.MX RT10XX和i.MX RT11XX系列MCU中功耗最低的状态,其标志性特点是除SNVS电源域保持供电,其余的电源域
    发表于 02-08 15:14 0次下载
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>超低功耗<b class='flag-5'>模式</b>捉虫记

    i.MX RT的FlexRAM配置问题

    i.MX RT的FlexRAM配置问题
    的头像 发表于 10-24 15:46 805次阅读
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的FlexRAM配置问题

    恩智浦i.MX RT1060/1010上串行NOR Flash冗余程序启动设计

    恩智浦i.MX RT1060/1010上串行NOR Flash冗余程序启动设计
    的头像 发表于 09-26 16:53 737次阅读
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1060</b>/1010上串行NOR Flash冗余程序启动设计

    基于 NXP i.MX RT1060 + IW416 的 Matter Thermostat 智慧温控器应用方案之 Apple 生态系统

    NXP i.MX RT1060 是一款搭载 Arm Cortex-M7 的跨界微控制器,具有强大的处理能力和低功耗特性,而 IW416 则是一款高度集成的 Wi-Fi 4 和 Bluetooth 5.2 系统单芯片(SoC),提
    的头像 发表于 03-28 15:54 701次阅读
    基于 NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>RT1060</b> + IW416 的 Matter Thermostat 智慧温控器应用方案之 Apple 生态系统