毕业设计基于PIC单片机的WIFI控制系统设计_第1页
毕业设计基于PIC单片机的WIFI控制系统设计_第2页
毕业设计基于PIC单片机的WIFI控制系统设计_第3页
毕业设计基于PIC单片机的WIFI控制系统设计_第4页
毕业设计基于PIC单片机的WIFI控制系统设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 本 科 毕 业 设 计 第 52 页 共 52 页1 引言随着移动技术的不断发展,整个世界在走向移动化。现阶段,通信技术正面临一场深刻的变革,传统的有线网络已不能满足日益增长的通信需要。无线通信技术越来越受到关注,人们需要一种不受约束的通信技术,能够随时随地的获取信息。随着互联网越来越深入的走进人们的生活,用户对能够随时随地上网的需求越来越迫切,wifi 无线通信技术也得到了迅速发展。wifi(wireless fidelity)是无线局域网(wlan)技术ieee 802.11系列标准的商用名称。ieee 802.11系列标准主要包括ieee 802.11a/b/g/n 5种。wifi是由

2、ap ( access point)和无线网卡组成的无线网络。ap一般称为网络桥接器或接入点, 它是当作传统的有线局域网络与无线局域网络之间的桥梁, 因此任何一台装有无线网卡的pc均可透过ap去分享有线局域网络甚至广域网络的资源。wifi主要技术优点是无线接入、高速传输以及传输距离远 其中, 802.11n可以将wlan的传输速率由目前802.11a及802.11g提供的54mbps,提高到300mbps甚至高达600mbps。在开放性区域通讯距离可达305m, 在封闭性区域通讯距离76 122m,方便与现有的有线以太网整合,组网的成本更低。wifi 设备使用的频段为2.4 2.483 5gh

3、z的免许可频段, 在频率资源上不存在限制, 因此使用成本低廉也成为了wifi技术的又一大优势。现阶段的wifi控制方案一般基于pc机或是高性能的arm嵌入系统,并且目前价格便宜的wifi无线网卡一般都定位于pc机,接口一般为pci接口或是usb接口。诚然,以上两种方案的优势明显,主要体现在传输速度高,软件编制容易等方面,缺点是单个节点造价较高。在一些工业控制系统中,有时仅需要wifi网络节点传送少量的数据,此时对传输性能要求并不高,当我们需要大量的这种节点时,选用pc机或是arm的控制方案显然成本会很高。在这种情况下,需寻找一种可替代的方案,要求是对性能要求不高,但是单个节点的成本要低。随着单

4、片机技术的发展,现阶段一些单片机的资源已经足够驾驭802.11协议和tcp/ip协议,并且我们也可以对802.11和tcp/ip协议进行适当的精简,只保留基本数据传输部分,以此实现低成本低性能的wifi控制系统。2 总体设计方案2.1 系统概述wifi控制系统主要由两部分构成,主控部分和无线通信部分。主控部分主要完成如下的控制功能:a) 数据采集和处理。此部分是整个系统的核心功能,数据采集和处理的方式决定了系统的总体功能。b) 通信协议控制。此部分控制无线通信的具体过程,具体来说就是建立无线连接,传送采集和处理后的数据。无线通信部分主要完成如下功能:a) 无线数据帧的封装,数据的加密解密等基带

5、处理。b) 无线数据从媒介控制层到物理层的映射,完成实际的数据收发。图2.1 wifi控制系统整体框图2.2 控制核心的选择:由于802.11通信的速度较高,而且较高的通信速率又是802.11无线网络主要特点,故需选择一款数据处理能力强的mcu,同时802.11无线通信协议是一种比较复杂的通信协议,如果还需实现tcp/ip的通信则系统的开销会更大,所以选择的mcu应该具有比较大的片上ram和程序存储空间。基于以上的考虑,课题最终选择了pic32mx440这款单片机作为核心控制mcu。pic32mx 单片机(mcu)是一款基于 mips technologies 的 m4k 内核的复杂片上系统,

6、m4k是最新型的 32 位低功耗risc 处理器内核,采用了增强型 mips32 release 2 指令集构。本节概述pic32mx系列单片机的cpu 特性和系统架构。主要特性:a) 最高可达到1.5 dmips/mhz 的性能 b) 可编程预取高速缓存存储器,以增强闪存中的执行效率 c) 16 位指令模式(mips16e),用于紧凑型代码d) 带有63个优先级的向量中断控制器e) 可编程的用户和内核工作模式f) 可对外设寄存器执行原子级位操作(单周期)g) 乘法/除法单元,最高指令发出速率为每个时钟一条3216乘法指令h) 高速microchip icd端口,具有基于硬件的非侵入式数据监视

7、和应用程序数据流功能i) ejtag调试端口,支持广泛的第三方调试、编程和测试工具j) 指令控制的功耗管理模式k) 5 级流水线指令执行 l) 内部代码保护,以帮助保护知识产权m) pic32mx440系列单片机具有usb-host外设,可以方便的和具有usb接口的wifi无线网卡连接。片上usb-host外设具有如下特性:1.作为主机和设备的usb 全速支持;2. 低速主机支持;3. usb on-the-go(otg)支持;4. 集成信号传输电阻;5. 用于vbus 监视的集成模拟比较器;6. 集成usb 收发器;7. 硬件执行的事务握手;8. 可在系统ram 中任意位置进行端点缓冲;9.

8、 集成用于访问系统ram 和闪存的总线主控;10. usb 模块工作时不需要使用pic32 dma模块。2.3 无线wifi模块的选择:无线模块的选择主要基于成本,本课题主要的研究方向即实现一种低成本的wifi控制方案,所以成本成为了选择wifi模块的主要依据。同时,wifi模块还应该易于mcu控制,软件复杂程度也是重要的考虑方面。wifi网卡一般的接口为pci接口或usb接口,比如雷凌公司的rt73、rt2070和rt3070等,这些都是和pc机上的接口相对应的。也有一些适合单片机接口的wifi模块比如具有sdio接口的marvell8686和spi接口的mrf24wb0mb芯片,不过接口虽

9、然贴近单片机但是价格一般偏贵,不符合本次设计的要求,此次设计采用了雷凌公司的rt73无线模块。该模块具有以下特点:a) 采用rt2571作为核心基带处理芯片,rt2571是一款高度集成的mac/baseband 处理器,它支持ieee802.11a/b/g标准。b) 采用usb接口作为和主mcu通信的接口,rt2571芯片集成了一个usb设备控制器,它拥有一个控制0端点,和一进一出两个批量传输端点,usb接口支持usb1.1和usb2.0控制协议。c) 支持64/124位的wep加密和wpa和aes加密认证方式。d) 支持6,9,12,18,24,36,48,54mbps的通信速率。2.4 w

10、ifi控制系统基本原理和特点2.4.1 硬件部分:wifi控制系统核心由mcu控制模块和wifi通信模块构成。两个核心模块之间由usb总线连接,mcu是usb主机端,负责各种传输事务的发起和usb设备的连接枚举操作。rt73无线模组同样支持usb1.1协议,故usb总线采用全速传输的方式,传输速率为12mbps。2.4.2 软件部分:mcu作为usb主机,它所有发起的事务(不论控制或是bulk传输)都采用唯一的端点0进行传输。rt73使用到3个usb端点:控制端点0,bulk out 端点1,bulk in 端点1。rt73模块需要在上电后进行初始化配置,配置通过usb控制传输来进行。同时,m

11、cu端读取rt73基本配置信息,比如mac地址等重要的信息。当rt73模块完成配置后,随即转为正常的收发工作模式,此时mcu需要和rt73的两个bulk端点进行通信,如果mcu需要发送ieee802.11帧,则将发起bulk out传输事务。mcu不断间隔一定的时间发起bulk in 事务传输,轮询是否有数据到达rt73模块。可以想到检测是否有数据到达会耗费较多的cpu时间,所以合理的软件设计就成了关键。mcu对收发的802.11数据帧进行处理,负责无线通信连接的建立和断开和实际的数据传送。在802.11无线协议上层一般还会有tcp/ip协议。mcu通过对802.11层的数据包解析,获取有效的

12、tcp/ip数据包,并将tcp/ip数据包传入tcp/ip层进一步的处理。综合以上分析,方案的硬件设计并不复杂,主要是系统的供电设计以及pic32单片机最小系统设计;usb接口的设计等。软件部分相对复杂,对于实现一个wifi控制系统核心而言,需要如下软件模块:1. 高效而稳定的usb-host协议栈;2. ieee802.11协议栈;3. 小巧而稳定的tcp/ip协议栈。以上的三个软件组件联系紧密:首先,处于最底层的是usb协议栈,此部分负责mcu和usb无线网卡之间的802.11帧通信,usb总线是一种主从轮询式总线,所以相对于pci或其他同步总线来说耗费cpu时间较多,尤其是在接收数据时,

13、不能采用中断的方式通知cpu,而只能采用不断试探轮询的方法来确认有数据到达,所以此usb部分的通信效率就比较重要;第二,在usb上层是802.11无线通信协议栈,802.11帧通过usb总线进行传输,802.11协议栈解析802.11帧数据并作出响应的响应;第三,最上层为tcp/ip协议栈,此部分接收tcp/ip帧进行处理。tcp/ip完整协议栈比较大,所以此部分需要对tcp/ip协议栈的合理裁剪就显得尤为重要。3 系统硬件设计3.1 系统供电电路图3.1 系统电源设计如图3.1为系统的供电电路,系统采用9v的电源适配器电源输入,由于pic32mx440单片机需要3.3v供电,故需要三端稳压器

14、提供3.3v电压,之所以采用两路3.3v供电电路,主要9v的输入电压较高,所以实际1117输出的电流会比较小,所以一路供电支mcu,另一路可以提供给其它的功率较大的设备。3.2 pic32最小系统设计图3.2 pic32mx440最小系统如上图3.2为pic32最小系统,此电路较为简单,和一般的mcu一样,同样有复位电路和供电电路,单片机选用了外部晶振,晶振频率为8mhz。4 系统软件设计4.1 usb协议栈移植4.1.1 usb协议介绍usb(universal serial bus)通用串行总线,最早由intel和微软倡导发起,时至今日已成为最流行的桌面设备总线,现已发展到usb3.0。u

15、sb的基本通信方式为主从模式,其中主机是一个提供usb接口及接口管理能力的硬件、软件及固件的复合体,可以是pc,也可以是otg设备。usb采用轮询广播的方式传输数据,每一个usb设备都有其自身的地址,所有的数据传输均由usb主机发起,任何时刻整个usb传输系统中只允许一个数据包进行传输。usb事务处理是usb主机和usb设备间进行数据传输的基本单位,基本事务传输由一系列特定格式的信息包组成,一般而言,一次事务传输分为三个阶段:令牌阶段,数据阶段和握手阶段。其中,令牌阶段表示事务处理的开始,并定义了传输类型;数据阶段负责传输相关的数据;握手阶段用于报告事务处理的状态,以表明数据接收是否成功。信息

16、包是usb数据传输的最小单位,usb信息包分为:令牌包,数据包,握手包等信息包,在一次典型的usb通信过程中,主机首先发送令牌包以表明本次usb传输的目的地址,令牌包中一般会包括usb设备地址和端点地址。usb设备会根据收到的令牌包来决定是否和主机进行配合来完成本次事务传输;数据包中包含了本次事务传输中的真正有效数据;握手包,处于事务传输的末尾,一般用来确认传输是否已成功。usb规范了四种基本的传输模式:a) 控制传输:主要用于在设备连接时对设备进行枚举以及其他因设备而已的特定操作b) 中断传输:用于对延迟要求严格、小量数据的可靠传输,如键盘、游戏手柄等。 c) 批量传输:用于对延迟要求宽松,

17、大量数据的可靠传输,如u盘等。 d) 同步传输:用于对可靠性要求不高的实时数据传输,如摄像头、usb 音响等。usb主机除负责基本的数据传输外,还对设备的热插拔进行了支持,每当一个设备插入usb接口后,usb主机检测到外部信号线上电平的变化,由此判断有设备插入,此时usb主机随即对外设进行枚举并分配地址,具体的枚举过程如下:a) 连接了设备的 hub 在 host 查询其状态改变端点 状态改变端点 状态改变端点 状态改变端点时返回对应的 bitmap,告知host 某个port状态发生了改变。 b) 主机向 hub 查询该port的状态,得知有设备连接,并知道了该设备的基本特性。 c) 主机等

18、待(至少 100ms)设备上电稳定,然后向 hub 发送请求,复位并使能该d) port。 e) hub执行port复位操作,复位完成后该port就使能了。现在设备进入到defalut状态,可以从vbus获取不超过 100ma 的电流。主机可以通过 0地址与其通讯。 f) 主机通过0地址向该设备发送get_device_descriptor标准请求,获取设备描述符。 g) 主机再次向 hub 发送请求,复位该port。 h) 主机通过标准请求 set_address给设备分配地址。 i) 主机通过新地址向设备发送get_device_descriptor标准请求,获取设备的描述符。 j) 主机

19、通过新地址向设备发送其他get_configuration请求,获取设备的配置描述符。 k) 根据配置信息,主机选择合适配置,通过set_configuration请求对设备进行配置。设备枚举过程相当设备自身的初始化过程经过了枚举的设备此时才能在整个usb总线中进行数据传输。由于课题中mcu是usb主机,以上简单的介绍了usb总线中的基本概念和设备枚举过程,对这些过程的了解能够对后边理解和移植usb-host协议栈起到积极作用。4.1.2 pic32mx440单片机usb外设pic32的通用串行总线(universal serial bus,usb)模块包含模拟和数字元件, 使用最少量的外部元

20、件即可实现usb2.0 全速和低速嵌入式主机、全速设备或otg操作。 在主机模式下,此模块旨在用作嵌入式主机,因此并未实现 uhci或ohci 控制器。usb 模块由时钟发生器、usb 电压比较器、收发器、串行接口引擎(serial interface engine,sie)、专用usb-dma 控制器、上拉和下拉电阻以及寄存器接口组成。usb dma 控制器在ram 和 sie 的数据缓冲区之间传输数据。集成的上拉和下拉电阻省去了对外部信号传输元件的需要。寄存器接口使 cpu 可以配置模块并与模块进行通信。4.1.3 pic单片机usb-host协议栈usb 嵌入式主机栈按实现逻辑分为三层,

21、分别为应用程序层,usb客户机驱动程序层,usb主机层。usb主机层是microchip公司提供的主机栈,是整个usb软件协议的最低成和核心,负责pic32-usb外设的直接控制,同时对上层的usb事务直接控制;usb客户机驱动程序层是针对于特定的usb外设的软件层,比如u盘,usb-serial线,usb网卡等设备,它们具体的usb事务传输时不同的,但它们都可以利用同一usb主机层软件,应用程序层利用下面两层提供的api和一些服务程序进行操作,是用户实现的具体功能。在有些情况下usb客户机驱动程序层和应用程序层可以合并为一层,虽然牺牲了层次和可维护性但是能够提高不少效率,在课题中,以上两层就

22、合并为一层。图4.1 usb-host协议栈总体框图a) 应用程序层应用程序层是实现设备期望行为所必需的固件。它是由用户设计和实现的代码,应用程序层可以通过一个或多个usb客户机驱动程序,并在需要时使用系统中任何其他固件,与usb设备进行通信。在wifi控制系统中,ieee802.11协议栈作为应用程序层,它可以直接调用usb主机层的api进行数据帧的传输。b) usb客户机驱动程序层每个 usb 外部设备实现一个具体的功能,有些设备可能有多重功能。usb 客户机驱动程序使嵌入式主机的应用固件能够控制与主机相连的 usb 外部设备的单个功能。多功能设备通常将由多客户机驱动程序来控制。客户机驱动

23、程序应该以一种抽象的方式对功能建模,从而让主机应用不需要了解设备的工作细节。在此层中,主要完成rt73模块的初始化,以及802.11协议栈和usb主机之间的接口函数。c) usb主机层主机层是usb 的抽象,提供下列服务:进行设备标识,进行设备枚举,管理客户机驱动程序,提供与usb 外部设备进行通信的简单接口。设备第一次连接到总线时,主机层将从设备读取描述符,以确定设备类型以及支持的功能。然后,主机层将检查tpl 来判断是否支持该设备。如果是支持的设备,主机层将初始化相应的客户机驱动程序usb主机层主要维护了一个usb主机状态机,负责完成设备上电枚举时的状态迁移,以及各种usb外设事件的处理。

24、usbhosttasks() 此函数执行主机任务的各种操作,它必须被在一定时间内轮询执行,主要实现的功能是usb设备的枚举,但并不执行usb数据传输功能。除了维护一个usb状态机任务外,usb主机层还提供了一些可供驱动层和应用层调用的api,这部分包含一系列的数据传输函数,上层usb主机设备驱动可以直接调用此部分的api函数。以下为重要的api传输控制函数:a) usbhostread() 此函数初始化一次in事务传输,注意仅仅为为初始化,真正的read事务传输开始是在usb中断进行的,因为此时usb外设有可能正在进行usb信息包的传输,所以不能立即开始,此函数仅仅在端点描述符链表中查找指定的

25、端点并设置其状态为需要usb事务传输。b) usbhostwrite()函数进行一次out事务传输,基本原理和usbhostread()函数相同。c) usbhosttransferiscomplete() 此函数判断指定端点的usb事务传输是否结束,并将端点状态返回。d) usbhostsetnaktimeout() 此函数设置指定端点的nak的超时次数,也就是说如果主机连续得到了超过指定次数的nak握手包,则指定端点会返回一个错误状态。此外,usb外设中断处理程序也是主机栈重要的组成部分,此部分处理usb外设发生的所有中断,基本的事务传输也是在中断处理程序中控制的。所有的usb中断共用一个

26、中断号,所以中断处理程序中需要判断中断的类型并合理处理。中断类型由如下几种:1. usb设备连接中断。2. usb设备断开中断。 3.usb数据传输中断(当一次usb数据传输结束后触发)。 4. sof帧中断,正常情况下,usb主机会每隔1ms发送sof帧,此时会产生中断。4.1.3 移植总结针对于rt73模块的usb主机栈的移植主要有以下要点:a) 增加针对rt73模块的usb客户驱动程序初始化函数和时间处理函数,并将函数指针加入client_driver_table,这样一旦rt73模块连接到usb外设,usb主机栈就会调用相应的初始化函数,当有usb事件发生时,会调用相应的时间处理函数。

27、b) 将rt73模块的厂商id和产品id加入usb_tpl(目标外设表)中,这样当rt73枚举初始化时,会根据的得到设备描述符和usb_tpl中的信息进行比对以确定是否连接的是rt73设备。c) 将802.11的事件处理函数标利用宏定义#define usb_host_app_event_handler标识到usb主机栈中,当rt73连接后,会调用802.11层的事件处理函数,此时802.11层会进行一些初始化操作。d) usb主机栈需要调用usbinitialize()函数进行初始化,并且usbtasks()函数需要定期调用,以对设备进行枚举和初始化操作,这里可以选择多种方式来定期调用,比如

28、放在大循环中或是利用中断定时调用。4.2 rt73 wifi 无线网卡驱动的编写本节主要介绍rt73无线模块的驱动程序,由于rt2571主控芯片的详细芯片资料没有公开,所以此部分的驱动程序主要来自于linux驱动程序的精简和改写,为了完成驱动程序的编写,需要完成三项主要工作:一是对ieee802.11规范的了解和学习;二是完成对rt73无线网卡linux驱动程序的分析和理解,明确rt73无线网卡的工作流程;三是完成对rt73无线网卡linux驱动的裁剪和改写。4.2.1 ieee802.11协议规范介绍ieee802家族是由一系列局域网技术规范所组成的。802.11是其中的成员之一。802.1

29、1规范该主要定义了无线网络物理层和介质访问控制子层(mac)的协议规范。rt73无线网卡实现了802.11物理层和mac层,通过usb总线提交数据是已经处理好的数据帧,数据帧的帧头包括rt73无线网卡的控制信息和802.11协议帧头,所以802.11帧的格式是了解的重点。a) ieee802.11网络类型802.11无线网络分为了两种类型:一类是独立型网络(independent bss,简称ibss)。在ibss中,工作站之间可以直接通信,一般是为了特定的目的而组成的临时性的网络;一类是基础结构型网络,这是一种最常用的组网方式,在基础结构型网络里,工作站必须先与接入点建立关联,才能取得网络服

30、务,也就是说,各工作之间是由接入点数据转发而建立通信的,无线接入点是基础结构型网络的核心。方案采用了第二种组网方式,这种方式组网方便,程序编写较容易。b) 802.11媒介访问控制层802.11标准以无线媒介在工作站之间传递帧,为了使多个工作站能在同一信道上同时进行无线通信,尽量减少数据的传输碰撞和重试发送,防止各站点无序地争用信道,无线局域网中采用了与以太网csma/cd相类似的csma/ca(载波监听多路访问/冲突避免)协议。802.11标准具备两种载波监听功能:物理载波监听和虚拟载波监听。考虑到成本问题,802.11芯片组厂家一般采用的是虚拟载波监听技术,虚拟载波监听使用网络分配矢量(n

31、etwork allocation vector,简称 nav )实现。nav的实质是一个定时器,它作为一个字段包含在802.11帧头中,用来预定媒介使用的时间。c) 802.11mac层帧结构图4.2 802.11mac帧结构以下详述各字段的含义:1) frame control 字段此字段为帧控制字段,2个字节,这个字段包含了一些帧收发时候的控制信息。2) duration/id 字段持续时间/标志,2个字节。在大多数情况下,该字段被用来设定nav。3) address 字段地址字段包含不同类型的mac地址,地址的类型取决于发送帧的类型。这些地址有如下不同的类型:a) 基本服务集标识(bs

32、sid)b) 来源地址(sa:发送数据包的mac实体的地址)c) 目的地址(da:数据报的最终地址)d) 接收地址(ra:接收帧的ap地址)e) 发送地址(ta:发送帧的ap地址)在frame control中的tods和fromds的位域标识了地址字段的具体含义,如表4.1:表4.1 tods,fromds功能表功能todsfromdsaddress1address2address3address4ibss00dasabssidn/atoap10bssidsadan/afromap01dabssidsan/awds11ratadasa注:802.11帧字段一般包括三个地址段,wds只是在有w

33、ds扩展功能的ap上使用,da,代表目的地址;sa,代表源地址。4) sequence control 字段顺序控制字段,2字节,由4位的片段编号(fragment number)和12位的顺序编号(sequence number)组成,原来重组帧片段以及丢弃重复帧。5) frame body 字段此部分为帧主体,该字段内容封装的是上层的数据单元,长度从0-2312个字节,从此可以看出,802.11最大帧长度为2346个字节。一些加密信息也包含在了帧主体中。d) ieee802.11帧的分类ieee802.11帧主要有三种类型,分别为数据帧,控制帧和管理帧。下面详述各种帧的结构和用途。1) 数

34、据帧数据帧负责最主要的数据传送工作,负责将上层协议放置在帧主体中加以传递。2) 控制帧控制帧主要用于协助数据帧的传递,所有控制帧都使用相同的frame control 字段。3) 管理帧管理帧负责在工作站和ap之间建立初始的通信,提供认证和连接服务,包括了连接请求/响应、轮询请求/响应、beacon帧等。几种重要的管理帧:a) beacon(信标)帧:beacon帧主要来声明网络的存在。定期传送的信标可让移动式工作站得知该网络的存在, 从而调整加入该网络所必需的参数。基础结构网络中,接入点负责传送beacon帧。ibss网络中,工作站轮流送出beacon帧。b) probe request 帧

35、:工作站通过probe request 帧来扫描所在区域内的802.11网络。c) probe response 帧:若probe request 帧探查的网络与之兼容,该网络就会回复probe response 帧给予响应。d) disassociation 帧与deauthentication 帧:disassociation (取消关联)帧用来终结一段关联关系,而deauthentication(解除身份验证)帧则用来终结一段认证关系。e) association request 帧:一旦工作站找到兼容网络并且通过身份验证,便会发送association request(关联请求) 帧以

36、试图加入网络。f) reassociation request 帧:位于相同ess中,当在不同的bss之间移动的工作站若要再次使用分布式系统(ds),必需与网络重新关联,区别于关联请求帧的是:它包含工作站当前所关联的接入点地址。g) association response 帧与reassociation response 帧:当工作站试图连接接入点时,接入点会回复一个association response 帧或reassociation response 帧,响应过程中,接入点会指定一个association id(关联标识符)。h) authentication 帧:工作站通过共享密钥以

37、及authentication 帧进行身份验证。d) ieee802.11管理操作802.11规范定义了一系列的管理操作用来实现对无线网络的管理,基本上管理操作就是无线网络设备在幕后进行的所有操作,由此,无线网络在连接感觉上就和其他类型的网络没什么两样。以下列出了最基本的管理操作:1) 扫描使用网络之前,必须找出网络的存在,在无线领域中,工作站要加入任何兼容网络之前必须先经过一番识别工作,在所在区域内识别现有网络的过程称为扫描。扫描过程中会用到的几个参数:a) bsstype:指定网络属于ibss、基础结构或是同时搜索两者b) bssid:工作站可以扫描所要加入的特定网络,也可扫描允许它加入的

38、所有网络c) ssid:原来指定某个ess的位字符串,这些字符串通常被设定为人们易于识别的网络名称。d) scantype:主动扫描会主动传送probe request帧以识别该区域的网络e) 被动扫描则是被动聆听beacon帧以节省电力f) channellist:进行扫描时,工作站通过指定所要尝试的信道列表来对某个信道进行探测或聆听g) probedelay:主动探测某个信道时,为了避免一直等不到probe response 帧而设定的延时定时器,以微妙为单位h) minchanneltime与maxchanneltime:指在扫描每个特定信道时所使用的最小与最大的时间量2) 身份验证80

39、2.11规范要求工作站在传送帧之前必须确认身份,以取得网络资源的使用权,当通过了“低级”的身份验证后,才能进行高级的802.1x身份验证。这里所谓的“低级”是指比较初步的身份验证,规范定义了如下几种“低级”身份验证方法:a) 开放系统身份验证,这种验证方案是802.11要求必备的唯一方法,开放系统身份验证,仅仅是一种一问一答的握手过程,所以只是一种网络身份的初步表明。这种认证方法包含了两个管理帧,首先由移动工作站发送authentication(身份验证)的管理帧,它的作用是发出身份验证请求。无线接入点收到此管理帧后,发出同类型的管理帧,回应身份验证的请求。b) 旧式的共享密钥身份验证,此种认

40、证方法,必须使用wep的加密方式,因此只能用于实现了wep的产品上,共享密钥身份验证要求在身份验证之前,必须传递共享密钥给工作站。3) 关联操作一旦完成身份验证,工作站就可以跟接入点进行关联,以便获得网络的完全访问权。关联只限于infrastructure(基础结构型)网络,在逻辑上等同于在有线网络中插入网线,一旦完成此过程,无线工作站就可以通过分布式系统与整个世界连接。和身份验证一样,关联操作是由移动式工作站发起的。关联过程涉及三个步骤:首先移动工作站发送association request(关联请求)帧。然后接入点随后会对关联请求进行处理,最后接入点开始为移动工作站处理帧数据。4.2.2

41、 rt73无线网卡linux驱动分析由于没有rt73无线网卡的详细资料手册,所以需要分析rt73的linux驱动程序来明确rt2571基带处理芯片的初始化过程,和详细的工作流程。代码分析的重点在于网卡的初始化过程和tcp/ip数据包的封装和通过usb的发送过程。a) 网卡初始化代码分析linux驱动以内核模块的方式装载到内核中,rt73网卡驱动也不例外。模块一般由module_init作为入口,module_exit作为出口。module_init将rt73网卡驱动注册到内核中,以下的结构体会被注册到内核中。功能函数也会被内核识别。struct usb_driver rtusb_driver

42、= .name=rt73,/ 网卡驱动标识.probe=usb_rtusb_probe,/ rt73连接时调用的函数.disconnect=usb_rtusb_disconnect,/ rt73断开时调用的函数.id_table=rtusb_usb_id,/ usb驱动支持的设备列表#ifdef config_pm.suspend = rt73_suspend,/ 电源管理相关函数.resume = rt73_resume,#endif;当rt73模块连接后,内核会调用响应的usb_rtusb_probe函数来完成网卡的探测和初始化。usb_rtusb_probe函数会对网卡进行初始化,并将一

43、些网络操作函数注册到内核,所以probe函数是理解网卡工作流程的关键,以下是probe函数的流程图:图 4.3 probe函数流程图vid和pid是usb设备的厂商id和产品id,usb设备进行枚举后得到设备描述符包含有vid和pid,驱动程序会根据vid和pid来判断是否支持当前插入的设备。prtmp_adapter是无线网卡的核心结构,包含了网络驱动层所需要的一切信息,如果需要一些设备信息,只需得到prtmp_adapter的指针即可。网络操作函数注册到内核后,内核就可以使用网络驱动程序提供的一系列的服务,usb_rtusb_sendpkt此函数很重要,当有网络数据包发送时会调用此函数。u

44、sb_rtusb_init_device函数是rt73模块真正的初始化过程,一些配置信息和核心线程都是在这个函数中实现的。usb_rtusb_init_device函数实现了网卡具体的初始化过程。课题关注的是网卡的初始化过程,网卡的基带芯片是一个8051核的微控制器,为了保证处理速度,网卡的内置程序并没有固化在基带芯片中,而是需要在每一次上电后由usb的control传输下载到基带芯片中的sram中,所以网卡初始化的第一步就是下载固化程序,而基带芯片的工作状态和配置信息都存放在特定的控制寄存器中,所以控制寄存器也是初始化的重点。图4.4 网卡初始化流程图rtusbbulkrxhandle函数处

45、理收到的802.11数据包并进行初步处理,当收到数据包后,随即将此函数作为tasklet被调度,在系统某个特定的安全事件运行在软件中断的执行现场。无线网卡的配置信息一般来自于用户的配置文件,当然也会有一些默认的配置。在网卡初始化时,这些配置信息会被引用。无论是发送和接收网卡驱动都实现了一些数据结构来维护需要发送的数据,这样可以保证数据发送的轻重缓急,更有效的进行数据通信。rt2571硬件初始化部分是关注的重点,当采用mcu驱动无线网卡时,同样需要进行硬件的初始化操作,所以这部分的流程是一样的。mlme线程用于连接路由的操作,本身是一个复杂的状态机,cmd线程是命令队列线程,这个线程会将用户的操

46、作转换为命令发送到mlme线程中,来改变网络运行状态。rt73无线网卡的数据发送和接受流程,如图4.5图4.5 数据发送流程图在usb的probe函数里,会初始化发送和接收相关的数据结构:1.nicinittransmit 2.nicinitrecv。驱动程序实现了几个发送队列,当内核调用网卡的发送函数后,送入的skb网络数据将被传入不同的发送队列,这里的发送函数本身是异步的,是可以被内核重入的,也就是说操作系统中运行的不同函数有可能会“同时”调用发送函数,所以这些由内核发送来的skb数据包就会安放在发送队列里等待发送,由上流程图可以看出,每次skb数据包放入发送队列后,随即调用出列函数rtm

47、pdequeuepacket,此函数除了直接被rtmpsendpacket函数调用外,还会被发送完成的回调函数调用,来检测是否有未发送完的数据。以上是典型的多任务处理机制。这里比较重要的函数是rtusbhardtransmit函数,此函数完成了802.11帧头,和rt73发送描述符的封装,也就是说要搞清楚rt73无线网卡的工作原理,这个函数提供了详细的信息。 rtusbhardtransmit函数会根据上层的信息决定如何封装802.11帧头和发送描述符帧头。_txd_struc结构体说明了rt73发送描述符,rt73发送描述符一共占用6个字节,它处于整个发送帧的最前面。发送描述符描述了此发送帧

48、对rt2571基带芯片具体的发送要求,基带芯片会根据发送描述符改变发送状态,最终将数据帧发送出去,重要的位说明:morefrag位,是否有更多的数据片等待发送,对于超过802.11最大帧长度的数据帧,需要将数据帧分成片。不过一般而言上层的tcp/ip协议可以设置网络包最大长度,所以可以将tcp/ip包最大长度设置为一个802.11数据帧最大长度之内,这样就消除了数据分片的可能性。ack 位,是否需要ack应答,因为无线媒介的不确定性,一般都需要进行应答。databytecnt 域,指明数据帧的长度。cipheralg 域,指明此帧的加密方式,根据加密方式的不同,基带芯片会进行不同的加密处理。接

49、收数据流程:图4.6 接收数据流程图接收过程,采用了tasklet 机制,这是一种比较常见的机制,通常用于减少中断处理的时间,为了最大程度的避免中断处理时间过长而导致中断丢失,有时候内核需要把一些在中断处理中不是非常紧急的任务放在后面执行,而让中断处理程序尽快返回将本应该是在中断服务程序中完成的任务转化成软中断完成。当rt73网卡连接上时,内核调用probe函数时装载了rtusbbulkrxhandle软中断例程,这个软中断会在系统空闲的时候运行,随后rtusbbulkrxhandle接收参数pad,这个指针指向了包含了网卡的信息的关键数据结构prtmp_adapter,由这个数据接收可以获得

50、任何信息,也包括现在正在进行bulk-in的urb的信息,这里可以判断正在进行的urb数据请求已启动,如果已启动这时需调用rtusbbulkrcecive函数进行实际的urb传输,反之,如果urb已完成,则需调用rtusbrxpacket函数进行802.11协议栈的处理,并将处理后的数据包传送到网络系统的上层,通常是tcp/ip层,这里rtusbrxpacket完毕后再调用urb传输。urb传输完毕后,内核会调用rtusbbulkrxcomplete函数,此函数会检测此次urb是否成功,然后重新装载tasklet。由上图可以看出,接收流程图是一个封闭的回路,一旦开始接收例程后,接收操作就不会停

51、止,在接收的上下文中会进行802.11协议栈的处理,所以rtusbrxpacket是重要的处理函数。另外两个核心的内核线程mlmethread和cmdthread主要是完成一些管理操作,这里不去深究,因为课题主要的目标是实现底层的通信移植。4.2.3 rt73无线网卡驱动的裁剪和改写本节进行rt73单片机驱动程序的具体移植,目标如下:a) 实现对rt73无线网卡的初始化操作,进行基本设置并读取mac地址。b) 实现rt73无线网卡基本数据帧的收发操作,对一些重要而根本的802.11帧进行解析。c) 实现rt73模块连接无线ap的功能( ap模式为不需加密,不需802.1x认证)。rt73无线网

52、卡驱动程序整体结构:整个软件分为底层的usb部分和802.11协议处理部分,usb部分主要处理rt73无线网卡的初始化和bulk数据传输,802.11部分处理和整个协议相关的功能,主要有连接ap和封装数据帧的功能。根据802.11无线网络的工作方式,可以建立如下的状态机模型:enum rt73_s_broken,rt73_s_idle,rt73_s_scan,rt73_s_connecting,rt73_s_connected,rt73_s_master,;默认情况下,刚刚初始化完毕的驱动程序处于idle状态,此时用户发出一个scan指令,此时pic32会发出probe requset帧,无线

53、ap收到probe帧后,会返回probe response帧,当收到需要连接到的ap的response帧后,pic32会发出association request帧,相应的ap会发出association response 帧,pic32收到response帧后转为connected状态。下面分述具体的代码部分:a) rt73无线网卡初始化rt73的初始化如下流程图:图4.7 单片机rt73热插拔流程图rt73初始化在usb任务的中断上下文中进行,usbtask 被系统每隔一段段时间轮询调用,当系统检测到usb连接中断时,会通知usbtask进行设备枚举操作,usbtask会获得usb设备的描

54、述符信息,进行vid和pid比对后,此时确认为rt73无线网卡,然后usbtask会回调rt73驱动程序的初始化例程,开始网卡芯片的初始化。图4.8 单片机网卡初始化流程图rt73setup 进行rt2571基带芯片本身初始化,包括固件下载,这里的固件是被放在一个const型的数组中的,所以直接调用此数组发送到rt2571芯片即可;等待基带芯片正常运行,通过反复检测一个状态寄存器进行;初始化基带芯片控制寄存器为默认值。rt73setupeeprom 进行eeprom中的默认配置的读取,其中就包括了射频芯片信息的读取,每个信道发射功率的配置,mac地址等信息。rt2501_switch_chan

55、nel 进行初步的信道选择,不进行此步骤也可以,这仅仅用来测试。ieee80211_init 802.11协议栈的初始化。b) 802.11帧数据的发送根据802.11帧的类型的不同,可以分为控制帧,管理帧,和数据帧,其中管理帧和数据帧是必须使用到的,所以驱动程序必须实现对管理帧和数据帧的处理。而控制帧主要用来对数据的分片和rts,cts进行处理这部分对于简单的通信来讲是不需要的,所以并没有实现控制帧的处理。802.11数据帧发送的一般流程:图4.9 802.11帧发送过程上层封装好的数据包一般是以太网数据包,因为上层一般是一个tcp/ip协议栈,故这里需要对以太网数据包进行转换,首先需去掉以

56、太网帧头,只保留ip包数据,然后根据此时连接的模式和网络配置进行对802.11帧头的封装,802.11帧头比较重要的有两个域,一是加密模式,因为加密模式的不同会影响许多域的设置,这里只实现了简单的无加密模式的封装方式,二是地址域的装填,addr1装填关联到的路由的mac地址,addr2装填rt73无线网卡的mac地址(源地址),addr3装填以太帧中的目的地址。除装填802.11协议帧头外,还需装填基带处理芯片的发送描述符,对于精简的驱动程序而言,如果选择无加密模式,需要设置的发送描述域较少,而且一些域比较固定。将所有数据装填好后,就可以调用usb发送函数发送数据了,真正的发送过程在中断中启动

57、,并在中断中确认结束,这里可以选用两种方案进行usb发送过程,一种是等待usb发送过程的结束,一种是发送完毕后通知主程序。第一种方案效率比较低,第二种方案的软件编写较复杂,所以后面具体实现时采用了rtos的方法。c) 802.11帧数据的接收和数据帧的发送相比,数据帧的接收比较复杂,因为数据帧的发送本质上是异步的,当有数据帧需要发送时,随即调用发送函数将数据帧发送出去,而数据帧的接收本质是一个中断的过程,而usb总线的特点是主机轮询,所以当有数据帧放入基带芯片的缓冲区中时,基带芯片不能主动通知pic32,而需要pic32主动试探,当没有数据时,基带芯片返回nak握手包,直到有数据才返回数据,这样pic32的轮询频率就是一个关键的变量,轮询的时间间隔不能过小,过小会导致cpu负荷较重,也不能间隔过大,过大会使数据通信延迟变大,综合考虑将bulk-in,传输设置为1ms进行一次,也就是每次sof包后立即进行一次bulk-in传输。当有数据时随即进行读入,当收到nak握手包时,等待下一次sof包后进行bulk-in传输。具体的接收流程如图4.10:图4.10 802.11帧接收过程当经过802.11协议栈处理后,如果是管理帧,则我们直接进行管理帧的封装然后发送出去进行响应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论