新闻中心

EEPW首页 > 手机与无线通信 > 设计应用 > 基于S3C2440的nRF2401驱动设计

基于S3C2440的nRF2401驱动设计

作者:时间:2012-08-03来源:网络收藏

 通信频率为2.4GHz 的ISM 频段,由于其免许可证、波长较短、天线的尺寸小、外围器件少等优点,适合于近距离无线通信。将ARM9 与nRF24E1 结合, 可以缩小设备体积, 降低系统功耗, 减少设备间连线困难等问题。针对ARM9 芯片 的特点了对nFR24E1 的接口电路和程序。对于在狭小空间中,有设备之间的数据共享要求的系统是一种有效解决途径。

本文引用地址:http://www.eepw.com.cn/article/154218.htm

  2.4GHz 无线设备的使用,免去了系统之间连线的烦恼。一方面可以降低设备的成本,另一方面就是可以简化设备的安装。

  特别是对于一些运动部件的实时测量,借助两个无线传输设备,可以将一部分测量设备做到运动部件上,另一部分安装在附近,就可以将运动部件的实时数据传输出来, 供人员对设备实时工作的性能进行详细分析和改进。本文着重介绍nRF24E1 与 的硬件连接以及在Linux 操作系统下的。无线设备采用NF2401AG 芯片。

  1 硬件结构

  nFR2401A 是Nordic 公司的一款单片2.4GHz 无线传输芯片。该芯片由一个完全集成的频率合成器,一个功率放大器,晶体振荡器和调制器组成, 输出功率和频率可以通过3 线接口编程设置。

  1.1 nFR2401 的通信协议与工作模式

  nFR2401 之间的无线收发是以数据包的形式发送和接收的。其数据包格式如下:

  数据包格式

  其中,前缓冲是硬件自动添加,地址由用户设定。为32~40位;循环冗余校验由内置CRC 纠检错硬件电路自动添加。可设为0、8 或6 位。所有的数据总共长度为256 位。

  nFR2401 的工作模式有配置模式、工作模式、待机模式、掉电模式四种。模式由主控芯片通过软件设置。芯片上电后, 通过接口将配置数据送入芯片,设置收发模式、收发频率、接收地址、发射功率、CRC 校验和的长度、有效数据的长度等。传输中,只有地址,校验和匹配的数据包才能被进一步处理, 产生中断信号。这时,S3C2440 读取数据。在同一时刻nFR2401 只能处于接收或发送模式中的一种, 一般以接收模式为待机状态。

  1.2 nFR2401 与S3C2440 的接口设计

  nFR2401 与S3C2440 的接口设计如图1 所示。通过将S3C2440 芯片的GPD 口与nFR2401 连接。S3C2440 的GPD口为多功能口,主要是LCD 屏的接口。由于系统没有显示部分,所以将该口用作了nFR2401 的接口。系统工作时,无线通信一直处于工作状态,所以将PWR_UP 引脚直接与VDD 相连。系统采用通道1,S3C2440 对nFR2401 采用查询模式, 接收到上位机工作命令后, 只要nFR2401 的DR1 指示接收到数据,S3C2440 就通过CS、CE、DATA、CLK 读取数据,并以文件的形式进行存储,然后通过网络将数据发送给上位机。

  图1 系统框图。

  图1 系统框图。

  2 软件设计

  系统以Linux 作为操作系统。以S3C2440 为平台使用Linux 操作系统,主要有U-boot 的移植,Linux 的移值,文件系统的编译烧写等几个步骤。U-boot 用于基本硬件的初始化和检测、加载引导内核和文件系统的启动。下载U-boot-1.1.1 后,对相关文件进行添加修改。配置其运行环境在S3C2440 核心板上, 然后编译得到u-boot.bin 和内核映像封装工具tools /mkimage. 引导程序boot.bin、U-boot 映像u-boot.ing 及其gzip 压缩文件u-boot.gz 三个文件构成的完整的启动加载程序。内核的设置主要是裁减和添加, 裁减不用的程序和外设,添加需要的驱动。

  在Linux 操作系统下编程,分为用户层和驱动层。用户层即为应用程序。应用程序负责数据的存储和发送;驱动程序负责对nFR2401 的连接引脚进行操作。应用程序与驱动程序通过库和内核相连解决数据的传递和共享。

 2.1 nFR2401 驱动软件设计

  设备驱动程序即设备管理, 其目标是对所有外接设备进行良好的读、写、控制等操作。对硬件的使用留给应用程序。所以对设备进行操作的系统调用和对文件的操作类似,主要包括open()、close()、read()、write()、ioctl()等。应用程序发出系统调用指令以后,会从用户态转换到内核态,通过内核将open()这样的系统调用转换成对物理设备的操作。

  驱动程序任务包括自动配置和初始化子程序和服务于I /O请求的子程序。针对不同的设备,驱动程序分为:字符设备驱动,块设备驱动,网络接口驱动。

  字符设备以字节流访问设备,以字节为单位对其读写。字符设备的驱动程序实现了系统调运。应用程序以设备文件访问字符设备。通过register_chrdev()或unregister_chrdev()对字符设备进行注册和注销。中断申请用request_irq()函数,释放中断用free_irq () 驱动程序中包含的结构和函数有:nf24_table 和nf24_cfg_table,定义的结构主要应用于对引脚的定义和功能的设置。函数有:

  static int tq2440_nf24_open(struct inode *inode,struct file *file)

  static int tq2440_nf24_read (struct file *filp,char __user *buf,

  size_t len, loff_t *offp)

  static int tq2440_nf24_ioctl( struct inode *inode, struct file

  *file, unsigned int cmd, unsigned long arg)

  module_init(tq2440_nf24_init);

  module_exit(tq2440_nf24_exit);

  MODULE_AUTHOR(″cgq″);

  MODULE_LICENSE(″GPL″);


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭