文档介绍:在ARM9(S3C2440)上实现ZigBee协议--2420芯片
在ARM9(S3C2440)上实现ZigBee协议--2420芯片
。它在短距离的低速率的数据通信有很大的优势,它的控制范围大概是200m-500m,传输速率也是250Kb/s左右。,在数千个微小的传感器之间相互协调实现通信,这些传感器只需要很少的能量,以接力的方式通过无线电波将数据从一个传感器传到另一个传感器,所以它们的通信效率非常高。采用ZigBee有几个好处:一是采用该技术的设备可以工作在无需获得许可的频带上;第二是它对的功耗达到了最低的限度,基于ZigBee的设备能用单个电池运行长达5年的时间;最后就是基于ZigBee协议组建的网络具有极大的可伸缩性,采用星型拓扑结构的网络的主设备可以支持4万多个节点。因此ZigBeed在短距离的无线控制及传感器网络中向到广泛的应用,2420射频收发器。
外围接口电路
CC2420的应用电路
CC2420模块引脚
2420连接电路
2. 驱动程序设计
CC2420与S3C2440的接口主要是SPI的四线接口,如上图,其实用到就是三个
2420的驱动程序前,先写一个驱动程序的框架,2420操作的代码了。下面是我最先写的一个框架:
struct file_operations这个数据结构提供文件系统的入口点函数,也就是访问设备驱动的函数,包括设备的读写操作,初始化操作等等。file_operations在<linux/>定义。
static struct file_operations spi_fops =
{
.owner = THIS_MODULE,
.open = spi_open,
.read = spi_read,
.write = spi_write,
};
下面是对设备的打开操作,设备文件被打开后,应用程序就会得到一个对应于些设备的句柄。
static int spi_open(struct inode *inode, struct file *filp)
{
printk(KERN_ALERT "spi open");
return 0;
}
下面的两个函数是应用程序对设备进行读写操作时会调用的。由于这里涉及到数据在内核空间与数据空间的数据交换,因此在这里不能直接使用从用户空间传递进来的数据,也不能直接将内核空间的数据缓冲区直接给用户空间引用。Linux内核提供了两个函数可以实现用户空间与内核空间之间的数据拷贝,它们分别为copy_from_user ,copy_to_user。
static ssize_t spi_write(struct file *filp,const char *buf,size_t count,loff_t *f_ops)
{
char pTXBuffer[30];
copy_from_user(pTxBuffer, buf, count);
}
static ssize_t spi_read(struct file *filp, const char *buff, size_t count, loff_t *offp)
{
copy_t