|
经常有网友问我这个问题,一直想整理点东西,能给大家点有益的参考。但几次提笔,又几次放下。学习方法的事情确实很难一概而论,而且每个人的起点参差不齐,学习的目的也千差万别,再者适合一个人的方法,不一定适合其他人。所以,本文标题增加了“抛砖引玉”一词,希望大家也把自己的经验分享一下,共同探讨、共同进步。
[注:本文源自www.feibit.com--“飞比”Zigbee论坛,为尊重劳动者成果,如需转载请保留此行]
学习zigbee要具备的基础知识,我觉得最重要的就是单片机和C语言的基础了。如果这两点还没入门的话,暂时可以先不看zigbee了。先把谭浩强老师的C语言的书拿来读一读,在电脑上跑跑C语言的程序。然后弄个单片机开发板再来学学单片机,不过值得一提的是,zigbee开发系统本身就是一个单片机系统,所以如果这样的话,倒也不必另外再去买单片机的开发板了,选好一套zigbee的开发板,先当成单片机来用就可以了。
本文的重点是针对像我自己这样,有过几年单片机开发经验,现在想了解无线射频跟zigbee协议栈应用的朋友。结合自己学习的过程,谈下经历和感受。实际上,我前面写的几篇读书笔记也大概记录了一下自己的学习过程,只是最近很长时间忙于项目,没太有时间去更新。不过,为了不辜负大家的厚爱,我尽量争取以后每个周都能写点东西出来。具体的内容,我会再开一个贴来征求一下大家的意见。
言归正传,对zigbee的学习(其它的学习我也经常是用这种思路的),归纳起来,就三个阶段:是什么、怎么样和为什么。
具体来说:
一、是什么?
zigbee是什么?zigbee系统包括些什么?它能做些什么事情?它有什么优缺点等等这一系列的问题。当然,从个人来说,学习zigbee的目的是什么?这些问题不搞清楚,学习又从何谈起?或者只能是徒劳无功!这个时候需要泛读一些相关资料,对它的现状,过去与未来有个纵向的了解。另外,对比蓝牙、wifi、z-wave等等一些技术来说,它的优缺点在哪里?它到底适不适合我的应用,或者说应不应该放精力在这上面。
当然,也许有很多人是不需要考虑这些问题的,或者说别人已经考虑好的了。那就只有一条路--go ahead!
接下来就会涉及到zigbee本身的一些东西了。比如说zigbee网络有哪些设备,他们之间的功能与区别是什么?网络的结构是怎么样的?网络性能与传输质量是通过哪些参数来衡量的,意义是什么?对一个单个的zigbee设备来说,软件分哪些层次,每层的功能是什么?等等这一类的问题,我想是必须在开始学习前有个大概的了解的。当然,也只能是“大概”。但一层层深入这个过程是必须的!就像画一幅画,先要把轮廓描绘出来,然后再画细节一样。
遗憾的是,国内鲜有这样的书籍有这样的耐心教大家一笔笔把这幅画画出来。这里还是要再推荐下那本“葵花宝典”--Newnes.ZigBee.Wireless.Networks.and.Transceivers. 这本书的前两章基本都是在讲我前面说的这些问题,简要,但是重点突出。当时看这本书觉得一见如故就是因为这个,我想到哪里,它就在讲哪里。如果不是迫于生计,真想把这本书好好翻译下。第三章以后的内容越来越深入,倒不是特别建议死去啃它。而是直接进入第二个问题:
二、怎么样?
在开始这一部分内容之前,我想是时候买一套开发板了。当然也可以通过PC仿真的形式去学习网络层的知识,不过对我个人来说,论文给我带来不了什么东西,哪怕是一点成就感~我对实实在在的产品更感兴趣。理论还是应用到实践中更好玩些~~~
至于选什么样的开发板,这个因人而异。也许你已经有一套前端的系统了,只要搭配射频收发就可以了;也许你对AVR的单片机特别在行;也许Jennic的技术总监刚好是你大伯的外甥,开发板都不用花钱买的。。。不过,不管是什么开发板,除了硬件功能外,技术资料与支持都是最重要的。顺便为TI打个广告,他们的资料、代码和产品性能来说,都是值得推荐的,尤其是最新的CC2530。
开发板拿到手了,接下来就是“怎么样”的部分了。就是怎么样去实现第一部分里的内容。当然,一个好的学习方法是从宏观到微观都适用的,在这一部分里,仍然可以从“是什么”、“怎么样”和“为什么”三个方面来下手。首先,看下各个例程都”是什么“,它们各自完成了些什么功能?通过读代码了解”怎么样“完成的。然后通过”猜测“这么做的原因,试着修改下代码,看看是不是按自己的想法来的,进而了解”为什么“。TI提供的协议栈例程非常丰富,大多在本论坛中都有些中文资料可以参考来学习。置顶贴中有个“中文资料总索引”,读者可自行了解。
值得一提的是前文说的这个”猜测“。不错,zigbee协议不像科学界的难题一定要“猜想”。但它的复杂程度,足以让我们这样学习者以“探索”来形容学习的过程。所以,不能太想一下子深入到细节去,而是先在表象上按照自己掌握的知识,推测一下可能性。改下代码,做个验证。这种方法屡试不爽~
另外,所谓“工欲利其事,必先利其器“,有些工具的掌握,也是这部分的重点。比如说“packet sniffer",有人翻译为协议分析仪或者抓包器,也有人在网上专门卖这个工具。实际上TI的开发板smartRF05EB与仿真器cc debugger连到一起就是一个packet sniffer了。为避免广告之嫌,就不介绍我们的产品了 这个工具非常有用!zigbee是什么?归纳起来可以这样讲:zigbee就是把一堆数据送到一个网络中指定的地方的一种“协议”。不管是组网、绑定等网络指令数据,还是实际的"payload",其实都是一组有特殊意义的数据而已。packet sniffer就是把空中的这组数据“抓”到电脑里,把意义给你分析出来的一种工具。充分地利用了这个工具,会让你的学习事半功倍的!
还有一个工具叫z-tool,实际上准确地讲,这个和我们用的“串口调试助手”没有本质的区别。只是,它发送、接收的那些数据是有特殊意义的,pc对zigbee设备的赋值指令、zigbee设备的运行状态反馈等等。详情的使用可以参见:ZStack Monitor and Test(MT)功能简介与Z-tool使用介绍
当然,更重要的一个工具就是cc debugger了,单步跟踪,观察变量状态,不再赘述了,玩单片机的都知道这个有多重要。
三、为什么?
也许不是很多人对这个问题感兴趣,不过我恰恰是一个从小就对这个问题痴迷的人。这一部分我也讲不了太多,也没有太多人愿意听。不过,先抛开兴趣不谈,更不要谈什么振兴中国电子产业,光是开发产品,我觉得这一点,对一个好的工程师来说也是很重要的。从毕业到现在,一直在做开发相关的工作,八年抗战都差不多要打到胜利了。以我自己开发过程中的经验,诚然一个好的人机交互界面,丰富的应用功能对产品来说非常重要,但最终决定成败的往往是产品的性能,而决定性能的经常是硬件和底层软件。虽然这个工作现在慢慢在转向原厂,对产品工程师的要求不高,但相信很多人都并不甘于这种现状吧?难道你的产品有解决不了的问题,能做的只是请别人吃饭??
好了,这部分也不继续写了,我的读书笔记后面几篇多少有些探讨。也希望有兴趣的朋友能主动联系我,我们一起把这部分完善了!
-- by outman 2010.12.20 23:58 |
|