這門課對于我一個學嵌入式的來說,還是比較重要的,所以我還是以老師給出的大綱為主體,好好復習一下!
WPAN及ZigBee基礎
- Zigbee、藍牙、IEEE802.11b(WiFi)標準都是作業在2.4G頻段的無線通信標準;Zigbee主要用在短距離無線控制系統,傳輸少量的控制資訊;(P2)
- 短距離無線網路主要分為:無線局域網(WLANs)和無線個域網(WPANs)(P3)
- 無線個域網所對應的通信協議:(P3)
HR-WPANS:802.15.3
MR-WPANS:藍牙
LR-WPANS(低速率無線個域網):802.15.4 - Zigbee最大傳輸速率:250kbps, ZigBee可作業在2.4GHz(全球流行)、868MHz(歐洲流行) 和915 MHz(美國流行)3個頻段上,分別具有最高250kbit/s、20kbit/s和40kbit/s的傳輸速率,它的傳輸距離在10-75m的范圍內, 但可以繼續增加 ,
- Zigbee無線網路分層: 物理層(PHY) 介質訪問控制(MAC)網路層(NWK)應用程式支持子層(APS) 應用層(APL)(P4)
其中802.15.4 定義了物理層和介質訪問控制層;Zigbee協議定義了網路層、應用程式支持子層和應用層 - Zigbee特點:(自組網)(P5)
高可靠性:采取了碰撞避免策略;MAC層采用了完全確認的資料傳輸模式;
低成本、低功耗 :ZigBee模塊的復雜度不高,ZigBee協議免專利費,再加之使用的頻段無需付費,所以它的成本較低;ZigBee的傳輸速率低,發射功率僅為1mW,而且采用了休眠模式,功耗低
高安全 :采用高級加密標準(AES 128) 的對稱密碼;
低資料速率 - Zigbee設備分類:(P5)
協調器:主要負責無線網路的建立與維護;
路由器:主要負責無線網路的路由;
終端節點:主要負責無線網路資料的采集, - Zigbee作業在ISM(工業、科學和醫療)頻帶,共規定了27個信道:(P7)
2.4GHz頻段 共16個信道,通信速率為250kbps
915MHz頻段 共10個信道,通信速率為40kbps
896MHz頻段 共1個信道,通信速率為20kbps - Zigbee網路拓撲結構:星型;網路型;簇狀;(P8)
- Zigbee應用為:周期性 ;反復; 間斷資料采集應用;
- Zigbee模塊開發一般包括兩個檔案:.h頭檔案和.c檔案(P)
.h檔案可理解為一份介面描述檔案;
.c檔案主要功能是對.h檔案中宣告的外部函式進行具體實作,
CC2530芯片相關
CC2530單片機是一款完全兼容8051內核,支持802.15.4協議的無線射頻單片機(P30)
CC2530的Flash(非易失性存盤器)容量可選: 32KB 64KB 128KB 256KB
CC2530有兩個晶振: 32MHz 晶振 32.768KHz
I/O口控制
CC2530內部自帶溫度傳感器:
使用步驟:
1、使能溫度傳感器
2、連接溫度傳感器到ADC
3、初始化ADC,確定參考電壓、解析度等,啟動ADC讀取溫度資料
Zigbee地址相關
-
設備地址:(P134)
64位IEEE地址:長地址又稱 MAC地址或 擴展地址(全球唯一)
16位網路地址:短地址 又稱邏輯地址(協調器地址為0x0000,其他設備入網時由協調器分配)(1)在網路中標識不同設備;(2)在網路資料傳輸時指定目的地址和源地址; -
網路地址:唯一標示網路中的一個節點(用網路地址來區分不同的節點);(P135)
-
網路地址最多可以分配65536個節點,地址分配取決于整個網路的架構,整個網路的架構由一下3個值決定:1、網路最大深度 2、每個父節點擁有的孩子節點最大數目 3、每個父節點擁有的孩子節點路由器的最大數目
同一父節點相連的終端節點的網路地址是連續的
同一父節點相連的路由器節點的網路地址通常是不連續的 -
埠:每個節點上最多支持240(1-240)個埠,每個節點上的所有埠共用一個發射/接收天線(用埠來區分同一節點的埠);
-
PANID:Zigbee網路號 可手動設定(或自動隨機生成),如果指定的PANID被占用則自動加1,
-
資料發送:呼叫**AF_DataRequest()**函式通過天線發送資料(P139)
afStatus_t AF_DataRequest( afAddrType_t *dstAddr,
endPointDesc_t *srcEP,
uint16 cID,
uint16 len,
uint8 *buf,
uint8 *transID,
uint8 options,
uint8 radius )
-
資料接收:呼叫**osal_msg_receive()**函式從訊息佇列中接收一個訊息(包含事件與資料)
uint8 *osal_msg_receive( uint8 task_id ) -
資料存盤位置(結構):(P130)
typedef struct
{
osal_event_hdr_t hdr; /* OSAL Message header */
uint16 groupId; /* Message's group ID - 0 if not set */
uint16 clusterId; /* Message's cluster ID */
afAddrType_t srcAddr; /* Source Address, if endpoint is STUBAPS_INTER_PAN_EP,
it's an InterPAN message */
uint16 macDestAddr; /* MAC header destination short address */
uint8 endPoint; /* destination endpoint */
uint8 wasBroadcast; /* TRUE if network destination was a broadcast address */
uint8 LinkQuality; /* The link quality of the received data frame */
uint8 correlation; /* The raw correlation value of the received data frame */
int8 rssi; /* The received RF power in units dBm */
uint8 SecurityUse; /* deprecated */
uint32 timestamp; /* receipt timestamp from MAC */
afMSGCommandFormat_t cmd; /* Application Data */
} afIncomingMSGPacket_t;
typedef struct
{
byte TransSeqNumber;
uint16 DataLength; // Number of bytes in TransData
byte *Data;
} afMSGCommandFormat_t;
- OSAL(系統抽象層)是一種支持多任務運行的系統資源分配機制(P72)
OSAL主要功能:
任務注冊、初始化和啟動
任務間的同步、互斥
中斷處理
存盤器分配和管理
事件驅動
-
首先記住 任務輪詢、事件驅動 必考;
-
Zigbee將事件和任務的事件處理函式聯系方法:(P74)
1、建立一個事件表,保存各個任務的對應事件
2、建立另一個函式表,保存各個任務事件處理函式地址
3、將兩張表建立某種對應關系 -
OSAL作業原理(輪詢)osal_start_system(void)
通過tasksEvents指標訪問事件表的每一項,如果有時間發生,則查找函式表找到事件處理函式進行處理,處理完后,繼續訪問事件表,查看是否有事件發生,無限回圈;(P75) -
協議堆疊定義的事件成為系統強制事件:(P80)
AF_INCOMING-MSG-CMD
ZDO_STATE_CHANGE
ZDO_CB_MSG
AF_DATA_CONFIRM_CMD -
Zigbee協議堆疊為半開源;
-
Zigbee協議堆疊串口操作(P85)
串口基本操作步驟:
1、初始化串口,包括設定波特率、中斷等
2、向發送緩沖區發送資料或從接識訓沖區讀取資料
操作函式:
uint8 HalUARTOpen(uint8 port,halUARTCfg_t *config);
uint16 HalUARTRead(uint8 port,uint8 *buf,uint16 len);
uint16 HalUARTWrite(uint8 port,uint8* buf,uint16 len);
- 串口回呼函式:回呼函式不是由該函式實作方直接呼叫的,而是在特定的事件或條件發生的,由另外的一方呼叫,用于對該事件或條件進行回應,因此,串口回呼函式是在有串口操作(事件)發生時(自動觸發)呼叫的;(P89)
- 當應用有串口操作時,應該對應用程式模塊的工程屬性的編譯預處理的Definedsymbols下拉串列框中輸入“HAL_UART=TRUE”,(即用條件編譯來控制是否編譯與該模塊相關的程式,目的是為了節約存盤資源);(P93)
- 程式中波特率的設定要與上位機(如串口助手)一致;
- Zigbee協議堆疊NV操作(P120)
NV(Non Volatile),即非易失性存盤器(Flash存盤器),即系統掉電,存盤器中的資料不掉失,主要用途保存網路的配置引數,或掉電后,上電該節點還是加入原來的網路并且該節點的網路地址就可以從NV讀取,
NV存盤器主要的操作有初始化NV存盤器、讀NV存盤器、寫NV存盤器,這些都在OSAL檔案夾下中的OSAL_Nv.h和OSAL.h檔案中定義和實作,
下面三個操作函式分別是:
NV初始化函式:uint8 osal_nv_item_init( uint16 id, uint16 len, void *buf ),NV存盤器將該存盤器分成多個條目,每個條目都有一個ID號, 條目的分類見OSAL檔案夾中的ZcomDef.h檔案,其中要知道的是:用戶應用程式定義的條目地址范圍為是0x0201到0x0FFF;
NV寫操作函式:uint8 osal_nv_write( uint16 id, uint16 ndx, uint16 len, void *buf );
NV讀取函式:uint8 osal_nv_read( uint16 id, uint16 ndx, uint16 len, void *buf );
第一個引數:uint16:NV條目ID號
第二引數:舉例條目開始的偏移量
第三引數:要寫入的資料長度
第四引數:執行要存放寫入或讀取資料函式緩沖區的指標 - 用戶只能使用條目ID范圍0x0201~0x0FFF
可在OSAL檔案夾下的ZcomDef.h檔案中添加自己的條目
如:#define Test_NV 0x0201 -
**函式名要考:** 事件添加函式:osal_set_event() 定時器函式:osal_start_timerEx() 記憶體拷貝函式:osal_memcpy() 記憶體比較函式:osal_memcmp() 字串長度函式:osal_strlen() 無線發送函式AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP, uint16 cID, uint16 len, uint8 *buf, uint8 *transID, uint8 options, uint8 radius ) 訊息接收函式uint8 *osal_msg_receive( uint8 task_id )
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/248191.html
標籤:其他
上一篇:2021,VR又要熱了?
下一篇:羅技滑鼠介紹
