在uC/OS-ii环境下实现Nos-Wlan模块的移植操作

描述

引言

目前,在无线监控、工业控制、视频传输等行业应用中,嵌入式无线系统主要采用以NORDIC解决方案为代表的无操作系统环境,该方案由“CPU+无线数传模块”构成,能够实现短距离低带宽无线通信。为满足这种需求,北京中电华大电子设计有限责任公司(以下简称华大电子)适时的推出了不依赖于任何操作系统的Nos-Wlan模块以加速现有产品的无线功能的升级,模块支持国内(WAPI)/国际(802.11i)安全标准。本文主要介绍了华大电子Nos-Wlan模块在基于ARM7核处理器LPC2478的uC/OS-ii环境下的移植。

Nos-Wlan模块介绍

Nos-Wlan系列模块产品是为了满足工业应用、安防监控等领域中,现有产品的无线功能升级的需要而研发的,其最大的特点在于:它提供了一个不基于任何操作系统的驱动软件,可以集成到任何的系统平台中运行,并实现高速的数据传输,使得没有操作系统也能使用Wi-Fi进行视频传输成为可能。Nos-Wlan产品硬件如图1所示:

图1:TLG09UB09。

Nos-Wlan其驱动软件结构如图2所示:

处理器

图2:Nos-Wlan驱动结构。

Nos-Wlan模块集成到主机系统中的位置如图3所示:

处理器

图3:Nos-Wlan在主机系统的位置。

LPC2478处理器uC/OS-ii系统框图

该系统以NXP的LPC2478处理器为核心,外围集成了FLASH,SDRAM,UART模块,以太网接口模块,USB OTG接口模块,LCD液晶屏和触摸屏模块,以及以FPGA为核心的视频采集模块以及华大电子的Nos-Wlan模块,该系统主要应用于视频监控领域,其系统硬件框架如图4所示:

处理器

图4:系统硬件框架。

Nos-Wlan模块软件移植

根据华大电子Nos-Wlan软件用户手册,Nos-Wlan模块软件移植所调用的模块内部接口函数有:hedrv_Init,hedrv_UsbPlugIn,hedrv_UsbPullOut,hedrv_UsbRx,hedrv_UsbTxDone,hedrv_UsbControlDone,hedrv_TickFunction,所需要实现的模块内部回调函数有:hosts_UsbHostReset,hosts_UsbTx,hosts_UsbControl,Nos-Wlan 模块软件移植代码部分主要实现模块内部的初始化,模块内部所使用源时钟注册,USB控制帧及批量传输帧的发送和接收。其中,系统USB HOST(OHCI)驱动是基于周立功公司所提供的基于U盘的OHCI驱动修改而来,以适应USB无线网卡的需求。

·模块初始化

模块初始化函数aq3_usb_init,完成整个模块的初始化,包括Nos Wi-Fi模块内部内存池的初始化(调用模块接口函数hedrv_Init)、USB传输部分主数据结构的初始化、USB传输主线程的创建、模块内部源时钟的初始化及网卡的初始化(调用模块接口函数hedrv_UsbPlugIn),网卡初始化完成后模块内部会调用用户注册的初始化完成回调函数 (DevInitDone,用户实现),该函数由网卡初始化函数hedrv_UsbPlugIn的参数传入。

·模块的卸载

模块卸载函数aq3_usb_exit,完成整个模块的卸载,包块模块主源时钟的释放、Nos Wi-Fi模块的卸载(调用模块接口函数hedrv_UsbPullOut)及所申请资源的释放等。

Nos-Wlan模块临界保护的实现

由于ucos-ii是实时的多任务嵌入式操作系统,模块需要对相关数据结构进行临界保护,其实现只需要使用ucos-ii提供的临界保护函数即可:

void hosts_EnterCritical (void)

{

OS_ENTER_CRITICAL();

}

void hosts_LeaveCritical (void)

{

OS_EXIT_CRITICAL();

}

·模块源时钟

模块的源时钟时由系统tick定时器产生的,驱动向系统tick服务程序注册定时器超时回调函数,该函调函数进行计时,当10ms定时时间到时,该函数调用模块定时器超时处理回调函数hedrv_TickFunction。

·USB控制帧、Bulkin帧、Bulkout帧传输

本系统中USB帧的发送都是统一在USB传输主线程里处理的,USB相关帧的传输接口函数只需要完成相关发送数据结构的初始化后将其提交给USB传输处理主线程即可。USB控制帧传输函数hosts_UsbControl只需完成USB标准请求数据结构USB_DEV_REQ的初始化,USB BULKOUT帧传输函数hosts_UsbTx只需要完成USB请求数据结构urb的初始化,USB BULKIN帧传输函数usb_bulkin也是只需要完成USB请求数据结构urb的初始化。USB传输主线程 usb_transfer_thread,主要处理USB控制帧和批量传输帧的发送及其USB传输完成后的处理,其中USB控制传输采用同步的通信方式,批量传输采用异步的方式,提交urb后即返回,等到传输完成后USB HOST驱动调用提交urb时注册的回调函数,该回调函数发送消息给USB传输主线程,由主线程完成对传输完成后的后续处理。USB传输完成后,主线程将根据完成帧的类型分别调用模块控制帧回调函数hedrv_UsbControlDone或者BULKOUT帧回调函数hedrv_UsbTxDone通知模块本次传输完成,后模块判断内部缓存队列是否为空,若不为空,则模块调用控制帧或者BULKOUT帧传输回调函数 (hosts_UsbControl,hosts_UsbTx)继续发送。BULKIN帧传输完成后,传输完成回调函数将调用模块内部接口函数 hedrv_UsbRx将接收到的数据帧提交模块处理后继续提交BULKIN帧以接受网卡上行数据。

· Nos-Wlan网络协议栈接口

该部分移植代码涉及的模块回调函数有:hedrv_AllocateNetBuf,hedrv_NetSendNetBuf及hedrv_NetSend,需要用户实现的模块回调函数是hosts_NetRecv。其中hedrv_NetSend是hedrv_AllocateNetBuf和 hedrv_NetSendNetBuf的综合,hedrv_AllocateNetBuf用于向模块申请发送内存,hedrv_NetSendNetBuf进行发送操作,而hedrv_NetSend函数则是将用户数据拷贝到模块内部所申请的动态内存里进行相关处理及发送。用户实现hosts_NetRecv回调函数用于处理网卡接收的数据帧,其中数据帧是以以太网包的形式由模块内部调用该函数以提交给用户进行处理的。

调用模块MAC帧发送函数需要用户将需要发送的数据包打包成以太网数据包后提交模块发送,调用函数 hedrv_NetSend,用户只需将打包的以太网数据包和长度传给该函数即可,模块内部将完成缓存空间的申请和释放,用户也可以调用函数 hedrv_AllocateNetBuf自行申请缓存空间并将以太网数据包拷贝至空间后调用函数hedrv_NetSendNetBuf进行发送,申请的空间不需要用户进行释放操作,模块内部将会在发送成功后自行释放。

当网卡接收到MAC数据帧时,模块将调用回调函数hosts_NetRecv提交用户处理,该函数由用户实现,提交该函数的MAC数据模块将其打包成以太网数据包,用户只需要按以太网数据包处理即可。

本文小结

本文详细介绍了华大电子Nos-Wlan模块在LPC2478处理器uC/OS-ii系统上的移植,整个项目周期为2周,其中系统CPU主频为 40MHz,Nos-Wlan模块在该平台下吞吐可达4Mbps,稳定通信可达72小时不断网。通过该系统的移植,证明了华大电子Nos-Wlan模块能够加速客户产品无线功能的升级。

责任编辑:gt


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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分