mac日记

发布时间:2017-01-27 来源: 日记大全 点击:

mac日记篇一:Zigbee读书日记(八)

Zigbee读书日记(八)

--freakz移植之物理层

Freakz是什么?Contiki又是什么?这和我们现在学习的Zigbee有什么关系?也许看到这篇文章的读者有不少对此还一无所知。如果您在学习Zigbee,相信对TI的CC系列IC应该有所了解吧,那您肯定听过ZStack和OSAL这两个词,ZStack是TI公司按照Zigbee标准实现的一个Zigbee协议栈,而OSAL则为ZStack所使用的“操作系统”。如果这两个概念搞得清楚,相信freakz和contiki就不难理解了。其实,freakz也是一个zigbee协议栈,相应的contiki则为freakz所使用的操作系统。

[注:本文源自“飞比”Zigbee论坛,为尊重劳动者成果,如需转载请保留此行,并通知作者]

那我们为什么不直接用ZStack+OSAL,而费这么大的劲用freakz+contiki呢?其实原因很简单,不同于ZStack的“应用层开源”,freakz是一个彻底的开源zigbee协议,而contiki也是一个彻底的开源操作系统,而且这个操作系统短小精悍,非常适合“物联网”时代的MINI型设备,同时,这套系统在全球已经拥有了众多的支持与使用者,已经开发了非常多的应用,甚至有像IPV6这么强大而且的应用,可以在其官方网站上下载到全套的代码!

相对于另外一个开源的WSN(Wireless Sensor Networking,无线传感网)操作系统TinyOS来讲,contiki的代码全部为C语言写成,用GCC进行编译,对广大应用C语言多年的开发者来说,减少了学习另外一种语言与编译平台所带来的时间花费。同时,我们考虑到很多开发者,尤其是初学者,对Linux+GCC的平台也并不熟悉,所以,我们选用了IAR这个极其稳定、易用的编译平台,对contiki进行移植。您可以在其官方网站上下载试用版进行学习,对于商业用途的开发,请您购买正版。

至于我们为什么最终选择了freakz而不是别的开源协议,主要是因为这是目前我们找得到的相对最完整的,也是代码写得比较规范的一套协议。不过,为什么我们总得用别人的?这个问题确实值得思考!!

不扯远了,回到主题上来。目前这个项目,断断续续已经做了将近两个月了,采用的思路是,从操作系统的核心到周边,再到基本的物理层和MAC层通讯一点点地进行修改和编译,理解一点就修改一点,成功后再继续下一步。到现在为止,已经实现了节点1应用层发送一个字符串“feibit”,MAC层按照协议规范进行编码,由物理层发送出去;节点2收到信息后,完成上述的反过程,直至收到字符串“feibit”,而且整个过程是在contiki系统框架内完成的。

这个时候,我在犹豫一个问题。实际上,freakz已经用“软件模拟器”实现了MAC层以上的协议内容,并且在一个基于AVR的硬件平台上进行了移植。理论上讲,现在我们已经在FB2530EB的平台上基本实现了CC2530的MAC层通讯,与上层对接后实现协议栈的基本功能应该不是太难了。但反复考虑后,我觉得这不是一个好的方法。也许现在一股脑地把

所有的代码都加进来,解决一些warning与error后,我可以骄傲地跟人讲,我实现了开源zigbee移植。但这并不是我的目的。我希望论坛有一个“开放”跟“踏实”的氛围,也希望自己跟论坛里的每一位学习者有一个不急功近利的心态。我们学习的目的不是跟随,而是创造!

在freakz移植的过程中,我有一个感受,虽然我们做的只是“移植”而不是原创,但这种学习方式比由上而下的方式来得有效,并且深入得多。当然,让一个完全对zigbee的基本概念与功能完全不懂的初学者来说,这可能也不是个最好的方法。所以,我觉得这两种方式应该结合起来,“what”与“how”这两个问题采用由上而下的方式,而“why”这个问题,就采用由下而上,从零搭建的方式,当然前提要是开源!而且我希望后面的事情,不是由我来写,大家来读,而是希望有更多的人能参与进来。哪怕我把整个协议栈重新写了一遍,对于读者来讲,并不一定能对其中的重点内容有深刻的体会。而且,如果能有更多的人参与,大家共同讨论,共同进步,这样的学习效率是单兵作战所无法比拟的!

所以,在FB2530EB开发板发行之前,移植的工作准备暂时告一段落。我会把这几天物理层与MAC层移植的相关内容,以笔记的形式写出来,作为一个起点。有兴趣的朋友可以在此基础上继续一点点地理解,一点点地移植。同时也希望我们能有组织、有规划地去实现一个共同的目标!

在前面的笔记(五)中,我们已经对物理层的基本概念做了详细的介绍。本篇可作为其理论知识的实践篇,从一个基本的字符串“feibit”的发送与接收来学习CC2530的物理层收发功能,看看这个物理层“小弟”到底是怎么干活的。

另外,要说明一点,zigbee本身是一个很复杂的协议,其中任何一层,如果要将每一个细节都讲清楚,都会是很庞大的工作。本文的侧重点在于基本概念的理解,对于IC与Zigbee协议的细节请参考其规格书。

[注:本文源自--“飞比”Zigbee论坛,为尊重劳动者成果,如需转载请保留此行,并通知作者]

IC的应用并不是一件简单的事情,因为涉及到了很多IC的细节,如果没有详细的说明及应用例程,这些细节有时甚至是无从得知的。还好,相比其他家的无线IC,TI的资料与例程相对丰富,这也是我们选择TI作为开始的主要原因之一。本文中涉及到CC2530的应用部分,有很多是源于TI提供的BasicRF平台的,因为这也是一个开源的平台,方便我们进行移植。

要实现数据的收和发,最早想到的自然是IC的收发机制与相应寄存器的设置。走个捷径,我们从BasicRF的代码入手,了解CC2530的RADIO部分的初始化与读取代码。

首先是初始化的过程,这是保证IC在我们所需要的状态下正常工作的前提。从BasicRF的per_test例程中,我们可以看到,这部分工作主要在以下两个函数中进行,halRfInit与basicRfInit。我们总结下其中与硬件相关的初始化工作如下:

1、设置MCU的晶振频率,BasicRF下所用的函数:halMcuInit

这个工作在开始的时候容易被忽视,设置如果不对,发送的数据包可能是乱的,也可能

会有些莫名其妙的问题。

2、设置数据数据传输所使用的频道,halRfSetChannel

这里我们选择频道11,则为2.405G

3、设备的PANID号,halRfSetPanId,我们指定为0x2007

4、设备的短地址,halRfSetShortAddr

由于我们暂时先不涉及网络层组网及地址安排等问题,仿照BasicRF,发送与接收端分别指定如下:

#define TX_ADDR 0x2520

#define RX_ADDR 0xBEEF

5、对于发送端来说,需要增加一个发射功率的设置,halRfSetTxPower

我们按照无PA模式的最大功率4dB进行设置,其实际值为2。

在系统的初始化阶段,执行以上过程,则将CC2530置于准备状态下,随时可用于收发。首先我们来看下数据的发送:

从BasicRF的basicRfSendPacket函数中,我们可以总结出如下的发送流程:

?

?

?

?

?

?

?

?

? halRfReceiveOn(); // Wait until the transceiver is idle halRfWaitTransceiverReady(); // Turn off RX frame done interru(转载于:wwW.zHaoQt.NEt 蒲 公 英 文 摘:mac日记)pt to avoid interference on the SPI interface halRfDisableRxInterrupt(); // write frame to buffer halRfWriteTxBuf(buf->dptr, buf->len); // Turn on RX frame done interrupt for ACK reception halRfEnableRxInterrupt();

?? // Send frame with CCA. return FAILED if not successful

?? while (halRfTransmit() != SUCCESS);

?? halRfReceiveOff();

注:为突出基本原理的理解,我会经常把一段代码中的关键部分提取出来进行分析,因为我希望把复杂的事情变得简单,而不是相反!

有兴趣的读者,可以将以上的函数逐一展开,参照CC2530 datasheet进行详细了解。此处我们只关注其数据的发送函数halRfWriteTxBuf

?? /*************************************************************************

?? * @fn halRfWriteTxBuf

?? *

?? * @brief Write to TX buffer

?? *

?? * @param uint8* pData - buffer to write

?? * uint8 length - number of bytes

?? *

?? * @return none

?? */

?? void halRfWriteTxBuf(uint8* pData, uint8 length)

?? {

?? uint8 i;

??

?? ISFLUSHTX(); // Making sure that the TX FIFO is empty.

??

?? RFIRQF1 = ~IRQ_TXDONE; // Clear TX done interrupt

??

?? // Insert data

?? for(i=0;i<length;i++){

?? RFD = pData[ i ];

?? }

?? }

从中我们可以明显地看出,要发送的数据pData,在此函数中,通过逐个写进RFD的方式发送出去了。这不正是我们苦苦寻找的物理层“小弟”吗?不就是他一个一个字节地让“比特”飞翔了起来??

按照我们现在的理解试试能不能把数据发送出去:

??uint8 test_str[6]="feibit";

??halRfWriteTxBuf(test_str, 6);

难道就这么简单?小心翼翼地编译、下载,在IAR下单步进行跟踪,程序顺利地执行了halRfWriteTxBuf(test_str, 6);这一句。但不要高兴地太早,程序在执行到下面,halRfTransmit()这个函数的时候,进了死循环,一直出不来了。这是怎么回事?

我们看一下到底这个函数在做什么?

?? /************************************************************************

?? * @fn halRfTransmit

?? *

?? * @brief Transmit frame with Clear Channel Assessment.

?? *

?? * @param none

?? *

?? * @return uint8 - SUCCESS or FAILED

?? */

?? uint8 halRfTransmit(void)

?? {

?? uint8 status;

??

?? ISTXON(); // Sending

??

?? // Waiting for transmission to finish

?? while(!(RFIRQF1 & IRQ_TXDONE) );

??

?? RFIRQF1 = ~IRQ_TXDONE;

?? status= SUCCESS;

??

?? return status;

?? }

程序明显死在了while(!(RFIRQF1 & IRQ_TXDONE) ),这句话是在等什么呢?看datasheet!

mac日记篇二:奥特曼Zigbee读书日记(五)

[注:本文源自“飞比”Zigbee论坛,如需转载请保留此行]

[原创]奥特曼Zigbee读书日记(五)-- “葵花

宝典”第三章第一层(物理层)

我们在“设备对话”专题中,了解了如何用Zstack协议完成一个基本的“老王,吃了没?”的通信,但就这样一句话,是如何变成一连串的“0”和“1”,并变成电波在空气中传播,最终到达目的地呢?――插句广老规矩,还是先上图:

这个图含的信息量可能需要贯穿在我们的整个学习过程中了,此处先不详解,只是先作为“上方宝剑”挂出来,这个是整个这一章的脉络。不过,还是要来认识 下这里面的几位关键“人物”的:第一位叫“PHY”――物理层,他是最底层的员工,最终把这些“0”和“1”送到空气中的活就是他干的;第二位叫 “MAC”――介质读取控制层(这个家伙肯定是老外,连个像样的中文名都没有);第三位叫“NWK”――网络层,这是个中层干部,属于实干家型(就是公司里电话最多的那种领导);第四位叫“APL”――应用层,有同学问了,这层里面怎么这么复杂?说实话,我也还没弄明白呢,不过按常理来说,高层复杂是应该的,到我们的政府机关看看就知道啦~~~

另外,下面两层是由IEEE 802.15.4来定义的,而中层领导上的就是由Zigbee组织来定义的,那什么是我们定义的呢?就是这个“协议栈”上面的,那就是最高最高的领导啦~~~

第三章,第一层――“PHY”――物理层

3.1 频率安排

首先,我们从干活的这个小兄弟开始认识。他要把一个比特送到空中,是有几条航线可以选的,就这是所谓的“频道”,每一个频道对应一个频率,而每一个频道又有几种调制方式,我们可以理解为坐不同的“飞机”。下图是IEEE 802.15.4中对频道的安排:

对于这里面的“频道页”的定义,不是太清楚为什么要这样定义,不过我觉得用前面说的“飞机”的概念,更容易理解些。有三种不同的飞机,每种飞机都可以 走0-26,共27条航线,这就是“物理层”在送数据的时候要做出的选择。其中,0号航线的频率是868MHZ,915M上有10条航线,其频率可以通过 下面公式计算:

中心频率(MHz) = 906 + 2 × ( 频道号 – 1)

同样,2.4G波段上的频率值为:

中心频率(MHz) = 2405 + 5 × ( 频道号 – 1)

3.2 能量检测――ED

就像航空公司一样,“比特”想要“飞”起来,也是有“航空管制”的,在起飞前要确认下航道有没有被占用,这可不能像开车,塞车了就等会,飞机要在空中 停了,那不得掉下来(我小时候总这么想~)。能量检测就是用来实现这个目的的,当然,这只是个“能量”检测,它不会去区分到底是谁在占用“航道”,它只检 测有或者没有。

当然,这也是物理层的上级――MAC层给他的任务之一,不过允许他不用百分百准确,允许10db的误差,结果会以一个8比特的字节向上报告。

3.3 载波检测――CS

载波检测也是检测当前频道能不能用的,但与ED不同,上面说了ED不会去区分到底是谁在占用“航道”,但是CS会的,它会根据载波的特征去判断当前占 用“航道”的是不是与自己一样的IEEE 802.15.4物理层信号,如果是,那不管ED值是多少,都会返回一个“频道忙”的信息。

3.4 连接质量指示――LQI

还记得电脑的WIFI指示吧,我也不了解WIFI协议,但我想这应该是相同的东西吧。在802.15.4中,有两种检测连接质量的方法,一个是检测 “接收信号强度”――RSS,另外一个是检测“信噪比”――SNR。RSS值是通过检测接收到的信号的全部能量情况来判断的。

又有人举手了?这位同学有什么问题?――什么,这是怎么做到的?

呃、、、这个我真不懂,不过我知道肯定有个寄存器来读的。至于这个值是怎么来的,你还是问下做IC的人,或者你找个不是那么忙的教授,说不定他知 道~~~不过这位小同学啊,看你问这个问题,我得多说你几句了。你这么“叫真”不好,倒不是打击你,我知道你说不定能成个人物,不过,学习是要讲“深度” 和“广度”并举的,如果什么事情都一头钻进去,你会迷路的。。。

我们继续,那“信噪比”SNR,顾名思义,就是信号除以噪声的比率了。当然,值越大表示信号质量越好。

每一个接收到的数据包都会做一个LQI的测量,它至少有八个等级。这个测量是物理层很重要的一个任务,因为这个值不但他的直属领导-MAC层要用到, 他的上几层领导-网络层和应用层都用得到。比如说网络层(NWK)在选择路由的时候,LQI就是一个很重要的指标,LQI值高的路径当然要优先考虑,当 然,这也只是一个因素,比如说这个LQI高的路径里的设备都是电池供电的,那么在频繁选择这个路径的同时,必然会导致这些设备电池寿命缩短。所以,一定要 多方面权衡――这就体现了“领导”的作用。。。

3.5 空闲频道评估――CCA

(注:本教程里的中文名称可能不符合标准,只是方便笔者说明问题,如对名称有异议,欢迎在本教程论坛-中讨论)

这里有一个很重要的名词叫“CSMA-CA”,听起来就像高科技,不知道和CDMA有没什么关系(做通讯的朋友开始扔砖头了~~~)

它有一个不太帅的中文名字叫“载波侦听多点接入/冲突检测”,笔者现在还无法对这个概念做个定义,不过倒是可以用“白话”翻译一下。在上文中我们看 到,当我们的“PHY层”小弟要发送一个比特的时候,

要面临那么多选择,走哪个航线,选什么样的飞机等等,那这么复杂的决策,“小弟”能搞得定吗?要两个 “小弟”都在争一个位置,打架了怎么办?按社会常理来看,这应该不是哪个人决定的,而是有个“制度”,这样说,能理解不?

当然,制度也是要人来执行的,一个最底层的工作叫“空闲频道评估”――CCA,这个也是由我们的小弟“物理层”来做的。他要告诉MAC层,当前频率有没有被其它设备占用。而且这个工作不能只做一次就汇报,要检测8个符号周期。

在IEEE 802.15.4物理层协议中,有三种CCA模式:

1. 只检测ED值。只要ED值高于一个门限就认为当前频道被占用。这个门限值可以由设计者来定义。

2. 只由CS结果来决定。只要CS的检测结果为,当前频道被IEEE 802.15.4定义的设备占用,则返回频道忙。

3. 由上述两个值的“与”或者“或”逻辑来决定。也说是说

●ED值高于门限“并且”有802.15.4设备占用,则认为频道忙

●ED值高于门限“或者”有802.15.4设备占用,则认为频道忙

那究竟采用哪种CCA模式呢?这个可以通过PHY属性值phyCCAMode来设置。这个值也是PHY-PIB值的一部分,下面的章节会对这个概念进行介绍。

3.6 物理层常量和属性

首先说明一下“常量”和“属性”这两个词,所谓的常量就是说在“编译”好之后不能变的量;而属性则是可以改变的。在Zigbee协议栈中,每一层都有自己的常量和属性。

如表3.2所示,物理层中只有两个常量,aMaxPHYPacketSize指示“物理层服务数据单元”――PSDU不能超过127字节;而 aTurnaroundTime说明一个设备由接收状态转为发送状态的最大时间,也就是说一个接收器必须在12个符号周期内完成接收任务。

同时要说明的一点是,PHY和MAC层的所有常量都有一个前缀“a”,这是Zigbee协议的规定,NWK和APL层分别以前缀“nwkc”和“apsc”开始。

物理层的“属性”包含在“物理层PAN信息基准表”――PHY-PIB中,这个表是专门用来管理物理层服务的,详细信息在表3.3中,其中有(+)标 志的为只读属性,上层只可以对此类属性进行“读”操作,只有物理层自己才能“写”;而有(*)标志的属性,其个别指定位为“只读”;其余的属性则可读可 写。后面章节会对每个属性详细阐述。

3.7 物理层服务

我们研究了半天物理层是怎么工作的,下面看下我们到底怎么“吩咐”他,他到底提供了哪些“服务”。

物理层提供了两种类型的服务,一种是数据服务,一种叫物理层管理服务。顾名思义,数据服务通过无线电波对“物理协议层数据单元”――PPDU进行发送 和接收,说简单点就是收发数据;另外,物理层中包含了一个叫“物理层管理实体”――PLME的一个管理单元,如下图所示,数据服务是通过PD-SAP实现 的,而物理层管理服务是通过PLME-SAP来实现的,其中PLME也包含上文所述的PHY-PIB。

3.7.1 物理层数据服务

mac日记篇三:复习重点(底分)

论述题:

请简述电子商务安全的六个安全要素,举例说明其保护的内容、面对的威胁和防范措施 答案:电子商务的六个安全要素是可用性、机密性、完整性、不可否认性、真实性、访问控制(0.5*6=3分)

可用性(Avaliablity)是指确保及时可靠地访问和使用信息(0.5)。例如用户可以访问自己的邮箱、网站主页等(0.5)。主要的威胁是阻断,例如物理线路破坏、恶意软件或者DOS攻击等(0.5)。防范措施包括物理防护、安装防毒软件、IDS和使用DDOS防火墙(0.5)。(共2分,下同)

机密性(Confidenticality)是指确保隐私或机密信息不被非授权的个人利用,或被泄露给非授权的个人。例如用户登录邮箱时使用的密码,或者存放在电脑上的个人日记等。主要的威胁是窃听、破解以及系统入侵等。防范的措施主要是加密,包括对称加密和非对称加密;以及使用具有加密功能的安全协议,例如IPSec、SSL、kerberos和SSH等。

完整性(Integrity)是指防范不正当的信息修改或破坏。例如用户的订单、发送的明文信息、数据库存放的敏感信息等。主要的威胁是篡改,例如在数据传输过程中被修改后再发往服务器,或者入侵系统后修改敏感信息。防范的措施包括单向哈希函数、消息验证码(MAC)、以及使用具有消息认证功能的安全协议,例如IPSec、SSL等。

不可否认性(Undeniablity)是指用户无法否认自己的行为(发送或接收)和信息的内容。例如用户的合同、交易信息等。主要的威胁是抵赖,合法用户否认已经发生的行为。防范的措施主要是数字签名(RSA或DSA),以及使用具有防抵赖功能的公平协议。

真实性(Authenticity)是指能够被验证和信任的表示真实情况或者正确程度的属性,使得创新、信息和信息源的有效性能够被充分相信。例如用户的身份、信息的来源等。主要的威胁是假冒和伪造,例如伪装成合法用户,或者以他人名义发送信息。防范的措施,用户身份认证包括生物特征认证(例如指纹)、知道什么(例如口令、密码)以及相关协议(例如CHAP、Kerberos)、拥有什么(例如令牌、数字证书)以及相关协议(例如SSL),信息源认证主要通过数字签名。

访问控制(authorization)是指资源的所有者或者控制者准许其他人访问这种资源,防止未授权的访问。例如不同级别的用户可以访问不同密级的信息,或者不同价值的内容。主要的威胁是入侵和特洛伊木马,入侵者通过缓冲区溢出等手段获得超级用户权限,或者诱导所有者执行木马程序把访问权限授予给攻击者。防范的措施是依据最小授权原则制定合理的授权策略,包括减少使用超级用户权限。常见的授权策略包括DAC(自主访问控制),MAC(强制访问控制),RBAC(基于属性的访问控制)和ABAC(基于属性的访问控制)。

计算题

应用RSA算法实现加密和解密,并运用中国剩余定理计算加密结果。其中

1、分布用欧拉法和辗转相除法求出逆元(4分)。//各2分

2、应用RSA实现过程(4分)。// n,fi(n),加密公式,解密公式各1分

3、中国剩余定理(7分)。//求m1,m2各得1分,求y1,y2各得2分,结果1分

示例:

已知,p=13,q=11,e=11;m=25

答案:

n=143,fi(n)=12*10=120=5*3*8

欧拉法:

fi(fi(n))=120*1/2*2/3*4/5=40*4/5=32(1分)

11^(32-1) mod 120=11^31 mod 120=11(1分)

辗转相除法(最好是参照ppt画图):

120=11*10+10(1分)

11=10*1+1

10=1*10+0

a0~an=10,1,n=1为奇数

b-1=1,b0=an=1,b1=10*1+1=11,所以bn即为逆元=11(1分)

C=m^e mod n=25^11 mod 143 =25(25可以不写出来,1分),m=C^d mod n=25^11 mod 143=25(1分)

CRT:

C1=(m mod p)e mod (p-1)=C mod p

C2=(m mod q)emod (q-1)=C mod q

由(25 mod 13)^(11 mod 12) mod 13 = 12^11 mod 13=(12^2) ^5*12 mod 13 =12=c mod 13 得 c=12 mod 13

由(25 mod 11)^(11 mod 10) mod 11=3^1 mod 11=3=c mod 11得 c= 3 mod 11

m1=11,m2=13,且由11*y1=1 mod 13及 13*y2=1 mod 11,可得 y1=6,y2=6(辗转相除法很容易求,过程最好写出来)

由此可得m=(12*11*6+3*13*6) mod 143=(4*3*66+234) mod 143=(4*55 +91) mod 143=(77+91) mod 143=168 mod 143=25

相关热词搜索:日记 mac mac修改器 mac软件

版权所有 蒲公英文摘 www.zhaoqt.net