×
单片机 > 单片机程序设计 > 详情

ZigBee 协议移植(ARM+Linux)

发布时间:2020-08-31 发布时间:
|
ZigBee协议栈移植步骤大致如下:1)       详细了解自定义硬件平台与Microchip ZigBee协议栈支持硬件之间的异同。对用户自定义的硬件平台和Microchip ZigBee协议栈支持的硬件平台进行分析比较,了解它们的处理器在I/O端口分配,内存组成及使用、中断处理、堆栈操作等各个方面的异同。另外还要分析两者所采用的ZigBee无线收发器之间的异同,了解它们的操作时序、控制命令、各寄存器的作用等。
2)       详细分析Microchip ZigBee协议栈。对硬件有了清楚的认识之后,需要对协议栈进行详细分析,了解协议栈的组成结构、各部分功能及实现方法等,并懂得针对硬件需要对协议栈做哪些修改,目前已经有哪些功能,没有哪些功能,需要添加哪些功能等。
3)       修改Microchip ZigBee协议栈并使用用户的编译器进行编译。以上步骤完成之后就可以对Microchip ZigBee协议栈进行修改,修改时要注意结合编译器的特性进行,需要对一些宏、常量等进行修改。在修改完成之后需要使用用户的编译器对其进行编译。
4)       编写测试程序对修改的协议栈进行测试。协议栈修改完成之后需要编写相应的测试程序对修改的协议栈进行测试,在编写测试程序时要对协议栈的每一部分功能都进行测试。
5)       开发应用程序。所有功能测试通过之后用户就可以根据自己需求开发应用程序了。

    以LINUX下S3C2410 ARM芯片为例,移植过程中需要进行如下的修改工作:

1.       Microchip 协议栈设计为仅在Microchip PIC18F 系列单片机上运行。协议的移植主要体现在对平台相关部分的改写或重写, 以及在Linux环境下的并发控制及性能优化上。包括:SPI接口、动态内存分配、固态存储、节拍控制等的改写或重写,中断服务(ISR)与底半部(bottom half)的设计。应用程序接口、进程的适时睡眠与唤醒,守护进程等。其中动态内存分配、节拍控制等可以利用Linux操作系统的系统函数,实现较为方便。利用内核的内存分配和回收函数kmalloc和kfree可实现动态内存分配:利用全局节拍变量jiffies(Linux中称为系统“嘀哒”)改写节拍控制模块。SPI接口方面,此处采用S3C2410 ARM芯片,利用它内置的SPI控制器。可以方便地实现SPI功能。同时利用GPIO控制器实现其余I/O口的控制与中断采集。这些IO口包括CC2420的芯片使能Cs、电压调节器使能、RESET控制、CCA (信道空闲)检测、FIFOP中断,FIFO检测(用于判断溢出)、SFD中断。

2.       在MicroChip协议栈中应用程序接口被设计成API函数或宏定义。应用程序只要在代码中包含定义了这些函数或宏的头文件,在编译时就能自动链接形成一个完整的可执行程序。而在基于Linux的程序设计中,代码被分为内核态和用户态,只有内核态代码可以访问中断,因而ZigBee协议或驱动必须运行存内核态,而应用程序则处在用户态。应用程序在编译时不直接与协议提供的接El函数链接。而是通过ioctl系统调用实现访问。在驱动中定义一个Zigbee ioctl函数。在这个函数中具有不同参数的ioctl系统调用被分派到不同的接El函数中,实现不同的功能。例如为使应用程序可以使用发送键值对的接口函数。在zigbee ioctl中就应该有这样的语句

case APLSendKVPDirect:

return APSDE_DATA_request (

(MESSAGE_INFO *)arg

);   

        APSDE_DATA_request即为应用支持层(APS)提供的数据发送接口函数。此时应用程序必须以APLSendKVPDirect为参数进行ioctl系统调用。在zigbee_ioctl函数中还可根据应用的需要增加调用接口,为应用程序的编写提供方便。

3.       ZigBee协议栈中各个子层都有各自的任务函数,它们被设计成必须在应用中尽可能多地调用包括接收数据包、超时处理、数据转发等。这些函数在嵌人式Linux环境下同样被设计成由应用程序通过系统调用来访问。调用他们的应用程序扮演着守护进程的角色,由于这些函数被封装成一次系统调用.因此在单CPU环境下,更需考虑竞态的发生。

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多