基于Linux下nRF24L01设备驱动的设计
2012-09-12林丽蓉余红英姜世杰洪永学
林丽蓉, 余红英, 姜世杰, 洪永学
(中北大学 信息与通信工程学院 , 太原 030051)
0 引言
随着测控技术的发展,nRF24L01越来越多的应用于无线传输测控系统。近年来,随着ARM和嵌入式Linux系统的迅速发展,在Linux系统下nRF24L01和ARM的通信也越来越多,但大都都是用ARM的GPIO端口来模拟SPI操作时序来与nRF24L01进行通信,而ARM本身带有可灵活配置的SPI 接口这一功能却被忽视,用ARM的SPI接口和nRF24L01的通信充分利用了这一优势。
1 硬件电路设计
NRF24L01通过SPI接口和外部控制器件进行数据交换,在Linux系统中SPI通信的实现可以通过ARM的SPI接口,也可以通过ARM的GPIO端口软件模拟SPI时序的方式来实现,在本次设计中选用的SPI接口。
设计中ARM芯片选择三星公司生产的S3C2440,S3C2440包括两个SPI接口,每个SPI接口分别有两个8位的数据移位器用于发送和接收数据。在SPI的发送期间,数据同时发送(串行移出)和接收(串行移入)。S3C2440通过外接12 MHz的晶振,经时钟控制逻辑的PLL倍频后将HCLK、HCLK和PCLK设置为200 MHz、100 MHz、50 MHz,其中PCLK将用作SPI的时钟输入,NRF24L01模块与S3C2440的硬件连接电路如1图所示。
2 字符设备驱动设计
在Linux系统中一个完善的设备驱动既要有硬件的支持,同时也要符合硬件设计的驱动模块。结合nRF24L01芯片的特点以及Linux系统下设备类型的不同,可以把它认为是字符设备驱动的一种。本次设计中使用的是2.6.30的内核,根据 Linux 字符驱动的特定架构,本文设计的nRF24l01 芯片驱动由init、exit、 open、close、read 等函数结构组成,以完成不同的功能。本次设计的是nRF24l01一次连续接收4字节数据接收驱动程序,其中open、close函数没做什么工作,只是让其返回个0值。

图1 NRF24L01与S3C2440的连接电路图……p>
