呂梓豪 劉鐘 崔旭晶
摘 要:針對智能家居的主控系統和分控系統,實現其有線和無線通信。有線通信應用I2C、SPI總線技術,使用Verilog HDL語言編程,功能時序仿真,最終下載到FPGA芯片上,完成硬件實物可行性測試;無線通信選用CC2530通信芯片,基于ZigBee協議,C語言編程,并下載到硬件實物進行驗證,實現數據的發送和接收功能。實驗結果表明,該系統運行快速穩定,經濟高效,能夠較好地應對普通戶型智能家居的通信需求。
關鍵詞:智能家居;通信;FPGA;I2C;SPI;CC2530
中圖分類號:TN913,TN92文獻標識碼:A文章編號:2095-1302(2019)03-00-02
0 引 言
智能家居是以家庭住宅為平臺,利用自動化技術、視覺識別技術、綜合布局技術、音視頻技術等最新物聯網技術綜合應用于家居生活。目前,隨著互聯網技術和智能產業的發展,家居產業正向著智能化和方便化方向發展,智能家居作為新興行業與傳統行業的結合,具有廣闊的市場前景和創新空間[1]。家居智能化的大趨勢是使用手機APP遠程監控家居,而監控的重點是實現家居之間的互聯通信。
基于目前智能家居通信功率、通信距離及普通住宅房型的要求,短距離通信可使用有線通信技術;對于空間距離較遠,考慮到不易布線及信號衰減等問題,可使用通信無線技術,這樣能夠應對大多數普通戶型家庭的需求,從而實現智能家居之間不同距離、不同通信要求的各終端設備之間的數據通信[2-3]。
本文智能家居的主控系統為FPGA可編程芯片,分控系統由各FPGA芯片及單片機構成,因此需要實現主控系統FPGA芯片與分控系統各FPGA芯片及單片機之間的通信,包括有線和無線通信。有線通信使用Verilog HDL語言、I2C和SPI總線技術實現[4-5],無線通信使用C語言和CC2530芯片及ZigBee通信協議實現[6]。
1 通信功能實現原理
1.1 I2C總線
I2C協議使用雙線輸入輸出,其中一根為時鐘傳輸線,另一根為數據傳輸線。晶振輸入初始50 MHz時鐘信號,并在狀態機模塊中加入對于分頻寄存器的判斷,以確定分頻后時鐘信號所在位置。實現發送和讀取功能的主要模塊為狀態跳轉模塊和執行模塊,狀態跳轉模塊即在現在狀態下,達到滿足跳轉到下一狀態的條件后,自動跳轉到下一狀態,執行模塊是在當前狀態下,通過工作時鐘的觸發執行相應功能,通過對狀態機模塊編程可完成從最初單字節發送、接收等更多功能。
1.2 SPI總線
SPI使用標準信號輸入輸出口。由標準晶振產生50 MHz時鐘,經過分頻模塊分頻后得到相應的通信時鐘;具有四種工作模式,而實現這四種工作模式主要依靠不同狀態下的時鐘系統,根據SPI協議的相關規定,本設計采用多路時鐘的工作方式,從最初50 MHz晶振時鐘輸入到FPGA中,經過分頻變為20 kHz工作時鐘,經由一個初始時鐘觸發,記錄當前時鐘下分頻時鐘電平與上一個時鐘下分頻時鐘電平,再將其進行相應邏輯運算,即可獲得分頻后時鐘上升沿和下降沿信號,并輸出到上升沿下降沿脈沖模塊,再根據外部CPOL與CPHA決定,通過二選一模塊,最終成為發送模塊與接受模塊的觸發條件。
1.3 CC2530芯片
CC2530以眾多而全面封裝函數和簡化易懂規范,使無線通信開發者從繁雜開發背景中解放出來。本設計使用片上自帶的串口UART,從上位機接受字符串,并載入無線發送緩存中,同時分配好數據發送的去向,分配相應的PANID,以方便數據接收端與發送端之間數據校驗。串口接收到數據后,經過無線通信將其帶著的地址信息發出,而無線通信主要通過ZigBee協議實現。ZigBee 使用的路由協議是基于AODV(Ad-Hoc 按需距離矢量)路由協議的Ad-Hoc網絡。
2 TI 2530 8051核心主函數
下面的函數是串口接收發送函數,首先要求接收的字符串長度要小于CC2530所能接收的長度,此后才開始進行接收,接收碼率固定為115 200 b/s(其規定于初始化中),剩下的功能為異常判斷,若出現異常則返回數據長度為0,接收失敗,返回未接收狀態,等待下一次接收[6]。
void rxCB(uint8 port,uint8 event)
{
if ((event & (HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT)) &&
#if SERIAL_APP_LOOPBACK
(SerialApp_TxLen < SERIAL_APP_TX_MAX))
#else
!SerialApp_TxLen)
#endif
{
SerialApp_TxLen = HalUARTRead(0, RxBuf, SERIAL_APP_TX_MAX);
if (SerialApp_TxLen)
{
if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_PERIODIC_CLUSTERID,
SerialApp_TxLen,
RxBuf,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS {}
else
{// Error occurred in request to send. }
SerialApp_TxLen=0;
}
}}
3 仿真及實物下載驗證
對于有線通信部分,首先對I2C和SPI做功能時序仿真,以驗證設計的正確性和可行性,然后將實物下板驗證,實現其具體功能。仿真部分使用Verilog HDL語言編程和模塊設計,ModelSim軟件做功能時序仿真。I2C主要仿真結果如圖3和圖4所示。在I2C發送寄存器地址之后進行數據發送,從狀態跳變到0100中可以看出,sda_r在每個iic_scl時鐘的上升沿,隨著slv_reg2依bcnt的位數而確定的數據位改變,即除了第3位為高電平,其余均為低電平,外部讀取結果為00110011,符合slv_reg2中的數據,發送數據驗證通過[7-8]。
從圖4可以看出,每個時鐘升沿之后,當數據保持穩定的高電平中心時,iic_rddb在由bcnt確定的相關位被寫入iic_sda_in的數據位,所有位的時序均符合要求,接收數據驗證通過。
SPI主要仿真結果如圖5所示。其仿真過程實現了兩個完整時序收發功能,其中包含了整體收發功能,包括起始、發送、讀取采樣、終止及兩個工作時序中的外部信號觸發的采樣時序改變和采樣觸發時鐘的改變[9]。
實物下載驗證部分,以Quartus Prime軟件作為開發平臺,在完成模塊程序調試和仿真之后,將生成的目標文件下載到Altera公司的FPGA芯片中,實現I2C和SPI協議的數據發送與接收功能,最終完成硬件實物的運行與驗證,如圖6所示,左側為I2C,右側為SPI[10]。
對于無線通信部分,選用TI公司CC2530芯片,基于IEEE 802.15.4標準的ZigBee協議,使用IAR Work Bench軟件進行開發與調試,最終下載到硬件實物板中進行驗證,實現無線通信功能如圖7所示。
4 結 語
本設計中,有線和無線通信均通過軟件編程、仿真、測試和實物下載驗證,實現了設計的基本功能,完成了數據的接收和發送,實現了智能家居主控系統與分控系統之間的通信聯系。設計中高效利用FPGA設計方法的多變性和可編程等優勢,實現的I2C和SPI協議,具有高效、小型和專用的優點。設計中CC2530通信模塊,可單獨作為模塊直接使用,亦可移植到大型通信系統中。
參 考 文 獻
[1]楊曉菊.智能家居應用現狀及其發展分析[J].智能建筑與智慧城市,2018(8):71-72.
[2]李紅海,張紀芬.淺析有線通信技術的現狀及發展趨勢[J].東方企業文化,2015(21):371.
[3]鄭達峰.短距離無線通信技術的優勢及運用[J].通信電源技術,2014(6):70-71.
[4]張軍才,茹偉,趙臘才,等.I2C總線測試系統的設計與實現[J].儀表技術與傳感器,2016(12):57-58.
[5]朱道山.一種可復用的SPI接口設計與實現[J].通信技術,2017(2):389-392.
[6]馬靜.基于ZigBee無線網絡智能家居系統的設計與實現[J].科技創新與應,2017(4):34-35.
[7]蔡亞芹.語音識別技術在智能家居系統中的應用[J].河南科技,2014(14):68.
[8]劉星.基于藍牙和單片機的智能家居控制系統設計[J].電子技術,2013(11):46-48.
[9]呂莉,羅杰,智能家居及其發展趨勢[J].計算機與現代化,2007(11):18-20.
[10]李元建.藍牙與智能家居[J].電子技術,2007(2):5-7.