基于S3C2440的nRF2401驅動設計
通信頻率為2.4GHz 的ISM 頻段,由于其免許可證、波長較短、天線的尺寸小、外圍器件少等優點,適合于近距離無線通信。將ARM9 與nRF24E1 結合, 可以縮小設備體積, 降低系統功耗, 減少設備間連線困難等問題。針對ARM9 芯片S3C2440 的特點設計了對nFR24E1 的接口電路和驅動程序。對于在狹小空間中,有設備之間的數據共享要求的系統是一種有效解決途徑。
本文引用地址:http://www.j9360.com/article/154218.htm2.4GHz 無線設備的使用,免去了系統之間連線的煩惱。一方面可以降低設備的成本,另一方面就是可以簡化設備的安裝。
特別是對于一些運動部件的實時測量,借助兩個無線傳輸設備,可以將一部分測量設備做到運動部件上,另一部分安裝在附近,就可以將運動部件的實時數據傳輸出來, 供設計人員對設備實時工作的性能進行詳細分析和改進。本文著重介紹nRF24E1 與S3C2440 的硬件連接以及在Linux 操作系統下的驅動設計。無線設備采用基于NF2401AG 芯片。
1 硬件結構
nFR2401A 是Nordic 公司的一款單片2.4GHz 無線傳輸芯片。該芯片由一個完全集成的頻率合成器,一個功率放大器,晶體振蕩器和調制器組成, 輸出功率和頻率可以通過3 線接口編程設置。
1.1 nFR2401 的通信協議與工作模式
nFR2401 之間的無線收發是以數據包的形式發送和接收的。其數據包格式如下:
其中,前緩沖是硬件自動添加,地址由用戶設定。為32~40位;循環冗余校驗由內置CRC 糾檢錯硬件電路自動添加。可設為0、8 或6 位。所有的數據總共長度為256 位。
nFR2401 的工作模式有配置模式、工作模式、待機模式、掉電模式四種。模式由主控芯片通過軟件設置。芯片上電后,S3C2440 通過接口將配置數據送入芯片,設置收發模式、收發頻率、接收地址、發射功率、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 系統框圖。
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″);
評論