无线传感器网络底层平台的深层研究

来源:华强电子网 作者:------ 时间:2014-07-16 11:18

  1.5 CC2520驱动

  MCU通过SPI接口控制CC2520启动、关闭、收发数据等。SPI接口由SI、SO、CSn和SCLK 四个引脚构成。在MCU和CC2520通信过程中,CC2520为SPI接口从设备,接收MCU发来的时钟信号和片选信号,并在MCU的控制下执行发送数据、接收数据等操作;STM32为接口主设备,可以通过SPI接口访问CC2520内部存储区和寄存器。CC2520通过FIFO、FIFOP、SFD和CCA四个引脚来表示工作状态。MCU可以通过读取这些引脚的数据来获得CC2520收发数据的状态。SFD信号表示刚接收到或者刚发送完帧开始信号;FIFO信号表示一个或者多个字节在接收缓冲区;FIFOP信号表示接收缓冲区中的字节数超出设置的门限或者接收到至少一帧完整的数据;CCA信号表示信道空闲。

  CC2520大概工作流程:首先是准备工作。上层应用程序中使用halRfInit()函数完成CC2520的一些初始化工作,如复位CC2520,关闭电压调整器,根据CC2520数据手册需要延时1100 μs。延时完成后,开启电压调整器,再延时200 μs,然后使能CC2520,完成后,申请SPI资源并初始化。开启振荡器,然后通过SPI接口配置CC2520中一些寄存器的默认值,如TXPOWER、CCACTRL0、MAMCTRL0、MAMCTRL1等寄存器的值。然后对MCU和CC2520相连的引脚进行初始配置,比如把RSTN、VREN和CSN配置为输出模式,把FIFO、FIFOP、CCA和SFD配置为输入模式。

  上层应用程序中使用basicRfInit()函数完成对信道、短地址和网络ID的设置,并配置接收中断处理函数,用于接收到数据产生中断时处理接收数据。

  应用程序执行发送命令时,按照协议栈从上层一层层封装好数据后,最终把数据交给basicRfSendPacket()函数处理。具体发送过程如图2所示。

  

图2 CC2520发送数据流程图

  图中封装的格式按照协议要求,内容主要包括数据长度、帧控制域(FCF)、目的地址、源地址、目的网络ID、源网络ID、发送数据、CRC(Cyclic Redundancy Check)校验码等。当采用的是硬件CRC检验时,不需要用户计算添加CRC检验码,也不需要CRC检验数据写入TXFIFO(CC2520发送缓冲区)中,有专门的寄存器存储CRC检验数据,由硬件完成检验和发送。当采用软件CRC检验时,需要用户自己计算CRC检验数据,并填写在帧的最后两字节中,随帧中其他数据一起写入TXFIFO。

  封装好后把数据写入TXFIFO中,注意CC2520发送缓冲区为128 字节,不能超出这个范围,否则会引发TX_OVERFLOW异常。然后,打开接收数据中断后才能调用发送命令发送数据,在这里可以对发送过程进行完全的控制,比如在发送数据的过程中,可以通过捕获SFD引脚的上升沿信号来对发送准确计时。发送数据后等待接收方回复ACK,如果在规定时间内没有收到ACK,则判定重传次数是否超过最大重传次数,没有的话则按照一定策略退避一段时间后再重新发送这个数据包,如果超过最大重传次数则丢弃这个包,并设置发送失败标志供上层程序参考。如果在规定时间内收到ACK,则会触发RX_FRM_DONE中断,会调用basicRfRxFrmDoneIsr()接收数据中断处理程序对收到的ACK包进行分析,如果是对刚发送包的正确回复,则表示发送成功,更新相应信息,例如发送序列号加1,更新发送状态,清除TX_FRM_DONE异常等。

  接收过程和发送过程类似,具体接收流程如图3所示。

  

图3 CC2520接收数据流程图

资讯排行榜

  • 每日排行
  • 每周排行
  • 每月排行

华强资讯微信号

关注方法:
· 使用微信扫一扫二维码
· 搜索微信号:华强微电子