ImageVerifierCode 换一换
格式:DOCX , 页数:63 ,大小:960.03KB ,
资源ID:19258620      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19258620.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(手把手教你从零开始学ZigBeeWord格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

手把手教你从零开始学ZigBeeWord格式.docx

1、!第二步:Z-Stack 用户指导这个文档的更新时间为:2007年12月21日-应该还是比较新的版本。4、产品安装过程4.1、安装Z-Stack这个也就是安装ZStack-CC2430-1.4.3.exe的过程。4.2、IAR安装一般来说安装选择默认路径,但是自定义路径也不会出问题的。注意IAR版本7.30B及以上版本才可以运行1.4.3协议。4.3、设备IEEE地址每个 CC2430DB, CC2430EM,和 CC2431EM都已经排列了一个唯一的64位物理地址(IEEE地址),这个地址已经写到了CC2430内部FLASH里面,在CC2430DB, CC2430EM,和 CC2431EM板

2、的底部有这个地址标签。这个地址被写入到FLASH的0x1FFF8地址中,注意这个地址也可以更改的,通过些FLASH软件,一般0xFFFFFFFFFFFFFFFF地址被认为是无效地址。5、配置并试用Z-Stack5.1、配置Z-Stack这个详见5.3节。5.2、逻辑类型这里主要是介绍了ZIGBEE协议中的三种设备类型:?ZigBee 协调者(ZC):这个设备被配置为初始化并建立一个PAN网络ZigBee 路由器(ZR):该设备被配置为加入一个存在的网络,可以加入一个协调求或路由器,然后允许其他设备加入它,在网络中路有数据信息。ZigBee 终端节点 (ZED):该设备被配置为加入一个存在的网络

3、,可以加入一个协调求或路由器。5.3、建立样品应用设备:SampleApp基本上就是采用SampleApp应用中的Demo例子来演示整个流程,就是采用一个协调器和一个或多个路由器来形成一个ZigBee网络演示。在该例子中主要通过SmartRF04EB板上的某些跳线来完成设备类型的选型,当然这个方法在程序中是需要判断哪个按键被拉低或拉高,对于做个设计的来说应该是相当好理解的。的硬件系统。5.4、建立一个SampleLight协调器设备至于提到的硬件连接这里一律省略。无疑:首先要打开对应工程,如图1-4所示:图1-4在工作窗口中选择DemoEB,如图1-5所示:图1-5然后选择工程菜单(Proje

4、ct)下的全部编译(Rebuild All)选项,如图1-6所示:图1-6然后选择工程菜单(Project)下的调试(Debug)选项,如图1-7所示:图1-7下载完之后就可以退出调试状态,通过选中调试菜单下的停止调试选项,如图1-8所示:图1-8按照此种方法下载至少两个CC2430EM模块,就可以进行Demo演示了。6、 Z-Stack 示范略至于详细的示范流程,这里先不说了,因为本人采用的硬件与原装有点差异,即使按照这个方法下载仍然不能演示,因为我这个不能用跳线来选择设备类型。所以我必须进入程序把跳线判断程序进行简单必要的修改才能演示。该文档介绍的演示结果及现象都是基于CHIPCON原厂评

5、估板。7. PanID 和通道(Channel)选择ZigBee协议规范规定,一个14位的个域网标志符(PAN ID)来标识唯一的一个网络。Z-Stack可以用两种方式由用户自己选择其PAN ID,当ZDAPP_CONFIG_PAN_ID值设置不为0xFFFF时,那么设备建立或加入网络的PAN ID由ZDAPP_CONFIG_PAN_ID指定;如果设置ZDAPP_CONFIG_PAN_ID为0xFFFF;那么设备就将建立或加入它发现网络中的“最好”的网络。关于这里提到的“最好”的网络,我觉得可能是有些参数评估,只不过这里没有详细的介绍,在后续文档中应该有介绍的。在2.4G频段上,IEEE 80

6、2.15.4/ZIGBEE规范规定了16各频道。用户可以通过选择DEFAULT_CHANLIST不同的值可以选择不同的频道,其频道如图1-9所示。改协议默认频道为0xB及0x00000800。图1-9DEFAULT_CHANLIST 和 ZDAPP_CONFIG_PAN_ID都作为IAR IDE中的编译选项可以进行设置,在应用文件中的ProjectsToolsCC2430DB目录下的f8wConfig.cfg文件中有相应设置,如图1-10所示。图1-10从零开始学习Zstack之2-Sample例子演示上节基本上初步认识了Zstack的一些情况,今天继续我的学习,打开Sample例子看看,究竟

7、ZIGBEE是怎么回事。毫无疑问:如果是第一次打开这个例子工程,肯定很迷糊,因为此时我迷糊了。对图2-1我简直是相当迷糊。图2-1这么多文件夹,打开之后又有那么多文件,从何看起?不要着急,特别是有些人拿到之后,啥都不知道的人第一个问题就是:我要实现XXX,在哪修改或者在哪添加我的函数呢?凡是我遇到这样的客户,我就可以肯定他技术部咋的。就连我这个外行都知道,不把这些弄明白,就是实现XXX只需要修改一个字母,那也不知道在哪改啊?所以我不急,但是我也理解很多客户,因为有时候项目催的比较急,毕竟老板都是外行嘛!两条路:1就是先看主函数,2就是看看TI提供例子说明文档没有。我这里先看看主函数再说哈!因为

8、我就知道从主函数看起.没办法大概每个文件夹找啊,主函数的特征还是比较明明显的,见图2-2所示:图2-2下面把主函数复制过来简单看下:ZSEG int main( void ) / Turn off interrupts-关闭中断 osal_int_disable( INTS_ALL ); / Initialize HAL-初始化HAL,关于HAL是什么我想后面会有介绍的。 HAL_BOARD_INIT(); / Make sure supply voltage is high enough to run-电压检测,最好是能保证芯片能正常工作的电压 zmain_vdd_check(); / In

9、itialize stack memory-初始化stack存储区 zmain_ram_init(); / Initialize board I/O-初始化板载IO InitBoard( OB_COLD ); / Initialze HAL drivers-初始化HAL驱动 HalDriverInit(); / Initialize NV System-初始化NV系统,NV是什么后面我想也会有介绍的 osal_nv_init( NULL ); / Determine the extended address-确定扩展地址(64位IEEE/物理地址) zmain_ext_addr(); / In

10、itialize basic NV items-初始化基本NV条目 zgInit(); / Initialize the MAC-初始化MAC ZMacInit();#ifndef NONWK / Since the AF isnt a task, call its initialization routine afInit();#endif / Initialize the operating system-初始化操作系统,看样子这里面还有OS,麻烦了.! osal_init_system(); / Allow interrupts-允许中断 osal_int_enable( INTS_AL

11、L ); / Final board initialization-最后的版在初始化 InitBoard( OB_READY ); / Display information about this device-显示设备信息 zmain_dev_info(); /* Display the device info on the LCD */-液晶支持显示#ifdef LCD_SUPPORTED zmain_lcd_init(); osal_start_system(); / No Return from here-这里没有返回,大概是进入OS了。 / main()可以看到基本上都是初始化函数,

12、因为函数名称都基本上带了init字样的,呵呵,个人觉得TI的变成习惯比我好,一看名称就知道大概功能了。所以这里也奉劝各位像我这样菜鸟级的初学者,一开始一定就要养成规范化编程的习惯,说这样维护以及以后升级或者移植兼容性都比较好。我就先不管各个初始化函数是怎么实现的,我先看看各个功能是什么,现掌握整体功能在细化,我觉得这样的学习方法比较好,因为代码是在太多了,从一开始就逐句看,我敢保证没几个人有耐心看完看明白!幸好每个初始化函数都有一句说明,虽然是英文的,但是理解起来一点都不难的。关于每个函数的功能我就直接写在上面的程序里面,节省纸张哈!.一句话:主函数的功能就是初始化!主函数看完了又开始模糊了,

13、又从何看起呢?在无从下手之际,只有去寻求TI说明文档的帮助了。上节不是漏掉了内容,是关于演示结果的,这里做上补充,怕因为缺调一点后面遇到什么不理解的就惨了!Sample例子演示演示现象:1、认识硬件-按键和LED上节提到了 EM和DB两个板子,其硬件是不一样的。按键EM就有5各SW1SW5,而DB只有1各方向键,但是他们有个对应关系,如图2-3所示.图2-3LED数量和颜色也不一样,EM有四个LED,如图2-4;而DB只有两个,如图2-5。如图2-4如图2-5关于上面几个图2-4/5中出现的LEDx实际上是程序中出现的关键字。2、初始化64位IEEE地址实际上在主函数中有这么个初始化函数的:z

14、main_ext_addr()。这里说如果地址复位为0xFFFFFFFFFFFFFFFF的话,64味那么就会不停的闪烁LED1,一直等到按键SW5按下后程序才能继续运行,意思就是说按下SW5后就把无效的地址初始化为有效地物理地址了,这个应该是程序上实现的,那么就来看看对应的程序zmain_ext_addr。/* fn zmain_ext_addr* brief Makes extended address if none exists.确定扩展地址是有效的* return none*/static ZSEG void zmain_ext_addr( void ) uint8 i; uint8

15、led; uint8 tmp; uint8 *xad; uint16 AtoD; / Initialize extended address in NV初始化NV里的扩载地址 osal_nv_item_init( ZCD_NV_EXTADDR, Z_EXTADDR_LEN, NULL ); osal_nv_read( ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, &aExtendedAddress ); / Check for uninitialized value (erased EEPROM = 0xFF)检查是否为无效值(地址) xad = (uint8*)&aEx

16、tendedAddress; for ( i = 0; i Z_EXTADDR_LEN; i+ ) if ( *xad+ != 0xFF ) return;-如果有一个字节不为0xFF,那么该地址有效返回#ifdef ZDO_COORDINATOR tmp = 0x10;#elsetmp = 0x20; / Initialize with a simple pattern-简单初始化扩展地址 *xad+ = tmp+; / Flash LED1 until user hits SW5 -闪烁LED1直到SW5按下 led = HAL_LED_MODE_OFF; while ( HAL_KEY_

17、SW_5 != HalKeyRead() )-SW5循环检测 MicroWait( 62500 ); HalLedSet( HAL_LED_1, led=HAL_LED_MODE_ON ); / Toggle the LED HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF ); / Plug AtoD data into lower bytes AtoD = HalAdcRead (HAL_ADC_CHANNEL_7, HAL_ADC_RESOLUTION_10); *xad+ = LO_UINT16( AtoD ); *xad = HI_UINT16( AtoD

18、 );#if !defined( ZTOOL_PORT ) | defined( ZPORT ) | defined( NV_RESTORE ) / If no support for Z-Tool serial I/O, / Write temporary 64-bit address to NV些临时的64位物理地址进入NV osal_nv_write( ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, &从程序中可以看出,一开始就检测FLASH中的物理地址,因为这个地址在FLASH中是固定的存储空间,一旦为有效地址就退出函数,一旦为无效地址(0xFFFFFFFFFFFF

19、FFFF),那么就对其物理地址进行简单的初始化并检测SW5按键。还是比较好理解的!3、运行例子在这里提到了跳线,由于本人采用的非TI原装硬件,没有该跳线,所以必须对程序进行修改,否则检测不到跳线,连ZIGBEE的设备类型都不能确定,肯定不能正常运行了。所以这里就先暂时不说了,这里要说的是一切都正常的情况下,例子的验尸结果。小小跳跃一下。不然学习一直没有进展很麻烦的!协调器:上电运行,地址检测如上面介绍的情况,通过之后呢-就进行通道扫描,此时LED1闪烁,一旦协调器成功建立网络,此时LED1停止闪烁,而LED3被点亮。路由器:上电运行,仍然是地址检测在前。之后就是通道扫描寻求是否又存在的网络,此

20、时LED1闪烁,一旦检测到存在网络并成功加入该网络,LED1将停止闪烁,被替换的是LED3别点亮,也就表明路由器成功加入了网络。那么此时能进行的操作控制是什么呢,也是最简单的表现手法-按键无线控制LED:周期(5S)发送信息到网络中每个设备SW1按下,发送一个信息到组1的设备SW2按下,退出/加入组1这个我是经过验证的。如:按下协调器SW1,路由器的LED1狂闪几下;按下路由器的SW1,那么协调器的LED1也就狂闪几下;当然我是只有两个节点。如果按1下协调器的SW2,在按下路由器的SW1,此时协调器就没有反应,表明协调器已经退出组1;但是再按下协调器SW2在按路由器的SW1就与上一步类似了。路

21、由器与此类似可以通过SW2退出/加入组1.终于把演示弄完了,接下来就来看看程序。在此之前还是来看看TI提供的Sample指导文档。这个文档个人觉得写的不错,要是没看之前就看程序的却很郁闷的!但是本人英文很差,所以需要慢慢看,等点时间放上来!从零开始学Z-Stack之3-Sample Application分析(上)1、Z-Stack CC2430DB and CC2430EB Sample Application1.1、介绍该文档时介绍TI协议入门的一个例子SampleApp的,适用EM和DB开发板。1.1.1、描述这个例子是非常简单的演示,每个设备都可以发送和接收两个信息周期信息-加入该网络

22、的所有设备每隔10S(可能会加上一个随机数的mS)都发送一个周期信息,该信息的数据载荷为发送信息次数的计数。闪烁控制信息-通过按下SW1可以发送一个控制灯闪烁的广播信息,该广播信息只针对组1的所有设备。所有设备初始化为加入组1,所以网络一旦成功建立/加入就可以进行闪烁控制。可以通过按下设备的SW2退出组1,所以可以通过退出组1可以不接受闪灯信息。通过按下SW2也可以让不在组1的设备加入近组1,从而又可以接受闪灯信息了。这个理解应该不困难的,反正我理解没有什么障碍!1.1.1.1、按键SW1:发送闪烁信息到组1所有设备SW2:转换推出/加入组1状态1.1.2、用户应用开发这里我基本上能看明白是什

23、么,但是我不打算写出来,因为涉及到一些ZIGBEE的关键术语,不是很明白。大概就是简单介绍了下用户怎么利用例子做自己的应用,但是实用价值不高,说的太笼统,全是概念性的说明。1.2、OSAL任务1.2.1、初始化因为Z-Stack是在OS下运行的,所以在之前必须调用osalAddTasks()初始化任务。1.2.2、组织关于OS的API函数介绍请看文档:Z-Stack OSAL API (F8W-2003-0002),应该说协议栈的每层或者说每部分都有相关的API说明文档。osalAddTasks()初始化任务, osalTaskAdd()函数添加任务,都可以到API文档或程序中详细分析函数功能

24、。1.2.3、系统服务OSAL和APL系统服务是唯一的,因为比如按键和串口类似事件处罚就只能用唯一的一个任务标识。这两个硬件都留给了用户自己定义使用。1.2.4、应用设计用户可能为每一个应用对象都创建一个任务,或者为所有的应用对象只创建一个任务。当选择上述的设计的时候,下面是一些设计思路:1.2.4.1、为许多应用对象创建一个OSAL任务下面是正面和反面(pros & cons)的一些叙述:- Pro:接受一个互斥任务事件(开关按下或串口)时,动作是单一的。需要堆栈空间保存一些OSAL任务结构。- Con:接收一个AF信息或一个AF数据确认时,动作是复杂的-在一个用户任务上,分支多路处理应用对

25、象的信息事件。通过匹配描述符(如:自动匹配)去发现服务的处理过程更复杂-为了适当的对ZDO_NEW_DSTADDR信息起作用,一个静态标志必须被维持。1.2.4.2、为一个应用对象创建一个OSAL任务:一对一设计的反面和正面(pros & cons)是与上面一对多设计相反的:在应用对象试图自动匹配时,仅仅一个ZDO_NEW_DSTADDR被接收。已经被协议栈下层多元处理后的一个AF输入信息或一个AF数据确认。如果两个或更多应用对象用同一个唯一的资源,接收一个互斥任务事件的动作就更复杂。1.2.5、强制方法任何一个OSAL任务必须用两种方法执行:一个是初始化,另一个是处理任务事件。1.2.5.1

26、、任务初始化在例子中调用如下函数执行任务初始化:“Application Name”_Init(如SAPI_Init)。该任务初始化函数应该完成如下功能:变量或相应应用对象特征初始化,为了使OSAL内存管理更有效,在这里应该分配永久堆栈存储区。在AF层登记相应应用对象(如:afRegister()。登记可用的OSAL或HAL系统服务(如:RegisterForKeys()1.2.5.2、任务事件处理调用如下函数处理任务事件:“Application Name”_ProcessEvent (e.g. SAPI_ProcessEvent().除了强制的事件之外,任一OSAL任务能被定义多达15个任务事件。1.2.6、强制事件一个任务事件SYS_EVENT_MSG (0x8000), 被保留必须通过OSAL任务设计。2.2.6.1、SYS_EVENT_MSG (0x8000)任务事件管理者应该处理如下的系统信息

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1