當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]基于ARM智能家居控制器設計與實現(xiàn)

摘  要: 如何將家庭里相對獨立的設備連接成一個系統(tǒng),從而方便進行本地和遠程控制?本文通過采用ARM構成智能家居控制器來實現(xiàn)這個目標。智能家居控制器使用S3C2410、SIM100-E等元件來組成硬件平臺,再將Linux系統(tǒng)移植到硬件平臺上,然后設計好相應的驅動程序和應用程序,最后將軟件下載到硬件平臺來對家電進行本地和遠程控制。
關鍵詞: ARM;GPRS;嵌入式

0 前言

    隨著數(shù)字化家用電器的飛速發(fā)展,如何對家庭中相對獨立的家用電器進行智能化管理和操作?這是人們非常關心的一個問題。智能家居控制器能夠將許多相對獨立的家用電器構成一個統(tǒng)一的系統(tǒng),從而方便對家用電器進行本地操作,也可通過互聯(lián)網(wǎng)或GPRS系統(tǒng)對家用電器實現(xiàn)遠程控制等等。本文主要討論智能家居控制的設計和實現(xiàn)。

1 智能家居控制器的硬件設計

    在設計智能家居控制器時,考慮到系統(tǒng)的穩(wěn)定性和擴展性,因此將控制器硬件設計成核心板和控制板2部分。核心板主要用來構成一臺嵌入式計算機系統(tǒng),控制板主要是一些外圍接口。系統(tǒng)硬件如圖1所示。

圖1 智能家居硬件結構圖

    核心板采用三星公司生產(chǎn)的S3C2410微處理器。ROM采用SAMSUNG K9F1208芯片構成64M NAND FLASH,將FLASH芯片連接到系統(tǒng)的nGCS0,所以它的起始地址為:0x00000000。RAM采用2片HY57V561620AT-H構成64M ,將它連接到系統(tǒng)nGCS6,所以它的起始地址為:0x03000000。為了讓系統(tǒng)從NAND FLASH啟動,要將S3C2410的OM0和OM1引腳都接地。最后將S3C2410處理器的串口控制信號、USB主機控制信號、LCD控制信號、觸摸屏信號、數(shù)據(jù)總線、地址總線、控制總線、外部中斷等信號全部連接到核心板上的200芯插座上。

    GPRS模塊采用SIMCOM公司生產(chǎn)的SIM100-E芯片。通過第三個串口信號線TXD2和RXD2和處理器相連接。

    LCD直接由CPU來控制,不過要增加驅動電路。

    觸摸屏采用4線電阻式,直接將它和CPU的nYPON、YMON、nXPON、XMON相連。

    傳感器接口的輸出信號連接到CPU的EINT9外部中斷引腳上,當傳感器接收到某個信號時,就可以通過外部中斷引腳向CPU申請服務。

     家電控制接口的輸入控制信號連接到CPU的GPIO端口,當要對某個家電進行控制時,只需向指定的端口寫入0或1,然后再由家電控制接口發(fā)遙控信號去控制相應的家電。

智能家居控制器操作系統(tǒng)的移植及裁剪

    考慮到成本,以及系統(tǒng)對實時性的要求不高等因素,所以決定選用Linux操作系統(tǒng)。目前發(fā)行的Linux操作系統(tǒng)都能支持ARM機的體系結構,所以只要根據(jù)平臺的具體結構進行移植。移植主要包括建立交叉編譯環(huán)境、修改內(nèi)核源碼、內(nèi)核裁剪和內(nèi)核編譯4等個環(huán)節(jié)。

2.1 建立交叉編譯環(huán)境

    交叉編譯是指利用運行在某臺計算機上的編譯器編譯某個源程序生成在另一種結構計算機上運行的目標代碼的過程。編譯器的生成依賴于相應的函數(shù)庫,而這些函數(shù)庫又得依靠編譯器來編譯。建立交叉編譯環(huán)境就是將ARM使用的編譯器(如:arm-linux-gcc)和函數(shù)庫(如:glibc)安裝到指定目錄,并使用configure配置好Makefile文件。

2.2 修改內(nèi)核源代碼

    修改內(nèi)核源代碼主要包括啟動代碼的修改、內(nèi)核的鏈接及裝入、參數(shù)傳遞和內(nèi)核引導幾個部分。Linux內(nèi)核分為體系結構相關部分和體系結構無關部分。在Linux啟動的第一階段,內(nèi)核與體系結構相關部分首先執(zhí)行,它會完成硬件寄存器設置,內(nèi)存映射等初始化工作。然后把控制權轉給內(nèi)核中與系統(tǒng)體系結構無關的部分。在移植工作中要修改的代碼主要集中在與體系結構相關的部分。ARM芯片的體系結構在arch/arm目錄下。首先根據(jù)芯片手冊修改boot/init.S文件中的:片選組基地址寄存器、DRAM存儲配置寄存器、DRAM片選寄存器、中斷屏蔽寄存器等。然后修改內(nèi)核的鏈接及裝入ELF。最后將系統(tǒng)中可用頁面的數(shù)目、文件系統(tǒng)大小等信息以參數(shù)形式從啟動代碼傳給內(nèi)核,完成設置陷阱,初始化中斷,初始化計時器,初始化控制臺等一系列操作而使內(nèi)核正常啟動。

2.3 內(nèi)核裁剪和編譯

    內(nèi)核裁剪是根據(jù)控制系統(tǒng)的要求將不需要的模塊從內(nèi)核中裁剪了,Linux內(nèi)核的裁剪有好幾個版本,可以使用命令make menuconfig對系統(tǒng)進行裁剪。

    內(nèi)核裁剪之后,最后要進行交叉編譯生成內(nèi)核映象文件zImage。具體命令如下:

make clean   //清理編譯環(huán)境

make dep    //編譯依賴文件

make zImage  //編譯內(nèi)核

3 驅動程序的設計

    智能家居控制器要多個設備驅動程序,有的驅動程序可以采用標準的驅動程序,有的要專門設計。芯片SIM100-E是通過第三個串口與S3C2410相連的,所以可以直接使用標準的串口驅動程序。傳感器接口和家電控制接口要設計專用的驅動程序。控制器的處理器通過外部中斷來檢測傳感器,通過GPIO端口來控制家電,雖然它們的工作原理有所不同,但驅動程序設計的方法沒有很大差別,因為在嵌入式Linux系統(tǒng)中設備驅動程序有一個標準的框架,設計驅動程序的大部分工作就是根據(jù)硬件結構來“填寫”框架中的函數(shù)。主要的函數(shù)包括open()、read()、write()、ioctl()、release()、module_init()和module_exit()等等。

    下面以傳感器接口驅動程序設計為例,簡介驅動程序的“填寫”過程。

3.1 設備初始化模塊和退出模塊

    設備初始化模塊的主要功能是:設置和申請中斷、向內(nèi)核注冊設備等。設備退出模塊的主要功能是:釋放設備所占用的資源。具體函數(shù)如下:

int __init s3c2410_int_init(void)

{┅

       set_external_irq(IRQ_EINT9, ┅);//設置外部中斷

       request_irq(IRQ_EINT9,demo_int_handler, ┅);//申請外部中斷

       ret = register_chrdev(0, DEVICE_NAME, &s3c2410_exio_fops); //申請主設備號

       devfs_int_demo= devfs_register(NULL, "int_demo", ┅); //注冊設備文件

┅}

void __exit s3c2410_int_exit(void)

{┅

       free_irq(IRQ_EINT9,NULL);//釋放中斷

       devfs_unregister(devfs_int_demo); //刪除設備文件

       unregister_chrdev(exioMajor, DEVICE_NAME); //釋放主設備號

┅}

3.2 打開模塊和釋放模塊

    打開模塊的主要功能是:初始化一些變量。具體實現(xiàn)函數(shù)如下:

static int s3c2410_int_open(struct inode *inode, struct file *filp)

{     init_MUTEX(&demodev.lock);//初始化自旋鎖

       init_waitqueue_head(&(demodev.wait));初始化隊列

       MOD_INC_USE_COUNT;//使用計數(shù)加1

┅}

static int s3c2410_int_release(struct inode *inode, struct file *filp)

{     MOD_DEC_USE_COUNT; //使用計數(shù)減1

┅}

3.3 讀數(shù)據(jù)模塊

    讀數(shù)據(jù)模塊的主要功能是:使線程休眼,然后等待中斷來喚醒。具體實現(xiàn)函數(shù)如下:

static int s3c2410_int_read(struct file *filp,char *buffer,size_t count,loff_t *ppos)

{┅

       copy_to_user(buffer,(char *)&bak,sizeof(bak)); //內(nèi)核態(tài)到用戶態(tài)

       interruptible_sleep_on(&demodev.wait);//進入休眠

┅}

3.4 中斷處理模塊

    中斷處理模塊的主要功能是:喚醒正在休眼的線程。具體實現(xiàn)函數(shù)如下:

static void s3c2410_int_handler(int irq, void *dev_id, struct pt_regs *reg)

{wake_up(&demodev.wait);//中斷喚醒

┅}

    驅動程序設計完成后,再編寫Makefile文件,通過make命令生成目標文件,最后利用insmod命令向內(nèi)核加載驅動程序。

應用程序的設計

    為了提高應用程序的運行速度,以及程序運行的穩(wěn)定性,所以將應用程序設計成多線程結構,如圖2所示。應用程序由7個線程和一個共享數(shù)據(jù)結構組成。

如圖2 應用程序結構框圖

    共享數(shù)據(jù)主要用于存放家電開啟和關閉時間,發(fā)送短信的電話號和短信內(nèi)容等信息。共享數(shù)據(jù)是通過2個設置線程來修改的。家電控制線程主要是根據(jù)控制數(shù)據(jù)、檢測短信線程的內(nèi)容和操作線程的內(nèi)容來進行操作。發(fā)送短信線程主要是根據(jù)控制數(shù)據(jù)、檢測傳感器線程的內(nèi)容和操作線程的內(nèi)容來進行操作。應用程序的具體內(nèi)容如下。

#include<pthread.h>    //線程庫頭文件

int main()

{┅

  pthread_creat(&th_a,NULL,send_msg,0); //創(chuàng)建發(fā)送短信線程

pthread_creat(&th_b,NULL,control_driver,0); //創(chuàng)建家電控制線程

  pthread_join(th_b,&retval); //等待家電控制線程結束

pthread_join(th_a,&retval); //等待發(fā)送短信線程結束

┅}

/*發(fā)送短信線程*/

int send_msg()

{┅

       tty_init();   //初始化串口

       gprs_init();  //初始化GPRS模塊

       tty_writecmd(“at”,strlen(“at”));  //發(fā)送AT命令

       tty_writecmd(“at+cmgf=1”,strlen(“at+cmgf=1”));//發(fā)送修改字符集命令

       tty_write(“at+cmgs=”,strlen(“at+cmgs=”));     //發(fā)送短信命令

       tty_writecmd(msg.send_tel,strlen(msg.send_tel)); //發(fā)送電話號碼

tty_writecmd(msg.send_text,strlen(msg.send_text)); //發(fā)送短信內(nèi)容

      tty_end(); 

      return 0;

}

    其它線程的設計方法有很多相似之處。應用程序設計完成之后,再經(jīng)過交叉編譯就可生成目標文件。

5 結束語

    將移植好的系統(tǒng)、驅動程序和應用程序下載到智能家居控制器上。經(jīng)過測試,系統(tǒng)具有操作方便、可靠性高和抗干擾能力強等優(yōu)點。本文的創(chuàng)新點是:通過智能家居控制器將家電、傳感器、手機等許多獨立的設備連接成為一個系統(tǒng),從而方便本地和遠程控制。

參考文獻:

[1] 朱華生,胡凱利.基于Linux系統(tǒng)的HHARM9電機驅動程序設計[J].南昌工程學院學報.2005,4:51-53.

[2] 嚴厲平.嵌入式智能家庭網(wǎng)關的研究與設計[J].微計算機信息.2005,2:14-16.

[3] 朱華生,劉文軍.基于Linux下實時數(shù)據(jù)備份的研究[J].南昌水專學報.2004,4:57-58.

[4] 朱華生,韓宇貞.計算機故障分析儀的設計[J].南昌水專學報.2003,2:34-36

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉