NXP的SDK里面有一个例程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上网的网络层次模型如下:
1.3 RNDIS上网接口/端点分析
1.4 C200A接口/端点分析
额外需要使用到的接口是AT接口,见下图。
1.5关于NXP SDK USB HOST的一些基础知识
增加AT接口对应的数据结构
更新状态机
增加对应的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_bm\lwip\port\usb_ethernetif_bm.c中的USB_HostCdcRndisControlCallback()以及USB_HosCdcRndisTask()中,具体细节请参见本文相关的代码。 适配4G模块的RNDIS接口和AT接口,这里的AT接口序号是通过USB协议分析仪抓出的log反向推导出来的。我们需要把协议栈解析出来的接口绑定到g_RndisInstance.atInterfaceHandle上。以下代码位于\evkbmimxrt1060_lwip_dhcp_usb_bm\lwip\port\usb_ethernetif_bm.c 中的
本文的代码可以从以下链接获取:
恩智浦MCU加油站
这是由恩智浦官方运营的公众号,着重为您推荐恩智浦MCU的产品信息、开发技巧、教程文档、培训课程等内容。
长按二维码,关注我们
END
更多恩智浦AI-IoT市场和产品信息,邀您同时关注“NXP客栈”微信公众号
NXP客栈
恩智浦致力于打造安全的连接和基础设施解决方案,为智慧生活保驾护航。
长按二维码,关注我们
暂无评论哦,快来评论一下吧!