今天终于发了第一篇跟CC2430无线电有关的文章了,哈哈。其实无线单片机还是挺简单的,只要把相关的东西配置好,然后按部就班的发送接收就OK了。对于包的处理无非就是封包和解包,怎么封就怎么解好了。
CC2430的无线电提供了灵活的配置,可以兼容IEEE802.15.4,也可以自己写一个协议,当然我们一般是用它来做ZigBee的,当然是采取兼容IEEE802.15.4罗!手册中有CC2430的无线电控制状态图,我觉得还是应该好好看看的,其实把那个图搞明白了,无线电的控制就没有问题了,剩下的就是按标准封包解包和功率控制的问题了。我看了下官方的例子程序,再加入自己的与开发板相关的代码,烧录进去就能够很好的运行了。其中一个开发板按键,对应于另一个开发板显示相应的控制,当然只能点对点的,没有加入路由的东西在里面,也没有加入安全控制。不过TI的例子程序里面是有简单的路由和安全控制的,感兴趣的朋友们可以自己加上,关于CC2430的无线电有几点自己觉得应该记下来的:
1、数据的发送首先是每字节分为两个符号,然后每个符号映射为32个芯片(其实一个芯片就是1bit),然后芯片以2MChips/s的速度发送,且低位在前。
2、RF的控制多数是通过CSP命令选通来实现的,而CSP指令的实现,其实就是对RFST寄存器写入不同的值来实现的。对其他寄存器的操作一般是配置RF传输参数。
3、SFD中断用来监测帧,FIFO中断可以用来监测数据是否读完。
下面我们来看一看无线电控制状态图
首先是打开模拟稳压器对无线电的供电,只要把RFPWR.RREG_RADIO_PD位清零即可,然后等待稳压器的稳定,当稳压器稳定后会发送CPU中断,所以可以通过检测中断标志RFIF.IRQ_RREG_ON是否设置来判断稳压器是否稳定。然后就是设置使用32Mhz的高速晶体振荡器,因为要使用无线电的话就必须使用32MHz的晶体振荡器,一直等到晶体振荡器稳定工作,可以通过检测SLEEP.XOSC_STB位是否设置来实现。当然前面的部分不拘泥于先后顺序,有可能在使用无线电之前就使用的是32Mhz的晶振了。
在空闲或者接收状态时通过发送STXON或者STXONCCA后8~12个符号周期后就可以进入发送状态,TX_CALIBRATE下面的数字好像说到是每个状态在整个图中的顺序,然后就是发送帧前导和帧首界定符,这些都是自动加在帧前发送的,只要在相关的寄存器中设置好就可以。然后就是发送FIFO中的数据,这里要注意FIFO的数据一般是整个MPDU+帧长度域。发送完成后可以进入空闲模式也可以进入接收模式。
通过SRXON命令选通进入接收状态,然后CC2430会自动查找帧首界定符,当找到就进入帧接收状态,如果FSMTC1.RX2RX_TIME_OFF为1,即不发送应答,或者地址识别失败或者应答发送失败,则重新进入帧首界定符查找状态。帧接收完成后进入发送应答帧状态,在12~30个符号周期后发送应答帧首,然后发送应答帧。
这就是关于控制状态图的一些概要分析了。总的看来只要设置好各个控制寄存器然后通过发送CSP指令就可以完成无线电传送了。
用户347456 2011-6-1 17:02