SimpliciTI简介
SimpliciTI簡介
SimpliciTI是TI開發的一份專門針對其CCxxxx系列無線通信芯片的網絡協議。按照其官方說法SimpliciTI是一個基于連接的點對點通訊協議。它支持兩種網絡拓撲結構:直接的點對點通信結構和基于星型連接的網絡拓撲結構。在星型連接中hub點在SimpliciTI中被稱為Access Point,簡寫為AP。AP負責網絡的構建和維護,它具備存儲轉發機制,因此可以對長期工作在休眠模式的低功耗設備提供較好的支持。同時SimpliciTI還支持泛洪方式進行廣播數據傳輸,這種數據通訊方式在各種報警器網絡中使用尤為廣泛,同時也顯得非常必要。
SimpliciTI將其網絡功能封裝為幾個API函數型式,應用程序可以通過直接調用其API函數實現點對點的通信。SimpliciTI對硬件資源要求非常低,除了程序空間所需要的flash和運行時隨機變量所占用的RAM外,SimpliciTI不需要任何其他資源,它甚至不需要定時器,內部需要的定時器都是用軟件模擬實現了。它在運行過程中不會進行動態內存分配因此根本不會占用程序的堆空間。如果MCU資源富裕我們可以配給SimpliciTI一個定時器以提供更好的服務。
總體來講SimpliciTI的特色是:
低功耗通訊支持,存儲轉發機制,支持休眠設備
低成本,最大使用8k Byte flash以及1k byte RAM
網絡結構靈活,支持p2p的連接方式和星型網絡
使用方便,協議僅僅通過8個API借口和應用程序進行交互
設備類型和網絡結構
1.設備類型
SimpliciTI協議中規定了三種類型的設備,它們是:
Access Point--相當于一個hub,負責網絡的建立和數據轉發等
Range extender--中繼器,負責數據轉發以提高通信距離。
End device--終端設備,負責數據接收和發送,和傳感器綁向Access point提供采集數據。
2.網絡結構
SimpliciTI支持多種網絡拓撲,圖1是其典型的無線傳感器網絡中使用的星型網絡拓撲示意圖。圖2是煙霧報警器網絡應用的一種情況,在這種情況下當一個設備感知發生煙霧警報,為了保證信息能夠可靠的傳輸就采用泛洪的方式發送,這樣的數據傳輸不是面向連接的。
?
圖1 SimpliciTI工作模式
?
?圖2?煙霧報警器網絡應用
?
SimpliciTI的工作模式
終端設備上電以后,首先完成系統初始化并向底層注冊數據接收處理函數,然后啟動一次加入中心節點的請求,該請求由廣播方式發出,當得到中心節點響應后可以獲取中心節點地址以及由中心節點構建起來的網絡的信標(加入中心節點的過程不會導致可用連接數減少)。然后應用層程序一般會調用simpliciti啟動link過程,建立一個到鄰近節點的連接,連接建立成功simpliciti會反饋給應用程序一個句柄,之后應用程序就是用這個句柄進行通信。在任何一次通信過程中都可能通過range extender進行中轉。
設備之間通過調用link和linklisten建立起連接后就可以通過SMPL_send和SMPL_receive進行端口到端口的數據收發了。同時為了檢測信道好壞,simpliciti還提供一個ping指令用于測試通信效果。
?
SimpliciTI的軟件結構
??
?
?
圖3 simpliciti的軟件結構
SimpliciTI的數據結構
1.和MCU相關的數據結構
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed long int32_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
?
2.SimpliciTI數據幀相關的數據結構
?
typedef unsigned char linkID_t;
LinkID_t定義了的數據結構類似于TCP/IP中的端口,這些端口是邏輯意義的面向于應用程序而存在的。應用程序之間建立的連接時基于端口的鏈接,而后的通信也是面向端口的通信。在linkID_t定義的所有端口中SimpliciTI保留了一個端口,這個端口由宏SMPL_LINKID_USER_UUD定義,該端口命名為無連接的用戶數據端口,該端口數據可以被所用用戶程序偵測。
?
typedef enum smplStatus smplStatus_t;
smplStatus_t是一個枚舉類型,它定義的是SimpliciTI運行過程中的所有可能狀態返回,具體項參見表1.
表1 smplStatus_t?各項意義
| 狀態 | 描述 |
| SMPL_SUCCESS | 操作成功 |
| SMPL_TIMEOUT | 操作超時退出 |
| SMPL_BAD_PARAM | 函數調用參數錯誤 |
| SMPL_NOMEM | 沒有空間可以用來分配給rx port,connection table,output frame queue |
| SMPL_NO_FRAME | 接收數據緩沖區無有效數據幀 |
| SMPL_NO_LINK | 連接請求發出后沒有收到回復 |
| SMPL_NO_JOIN | 加入網絡請求發出后沒有收到回復 |
| SMPL_NO_CHANNEL | 頻段掃描未找到有效頻道 |
| SMPL_NO_PEER_UNLINK | 刪除連接請求失敗 |
| SMPL_TX_CCA_FAIL | 因為CCA失敗導致數據發送失敗 |
| SMPL_NO_PAYLOAD | 接收到數據幀但無有效載荷 |
| SMPL_NO_AP_ADDRESS | 未設置Access point?的地址 |
?
typedef struct
{
??const uint8_t????structureVersion;
?????????uint8_t????numConnections;/*可建立的連接數*/??
????????uint8_t????curNextLinkPort;
????????uint8_t????curMaxReplyPort;
????????linkID_t???nextLinkID;
????????connInfo_t connStruct[SYS_NUM_CONNECTIONS];
} persistentContext_t;
typedef struct
{
??volatile uint8_t?????connState;/*被分配標志*/
???????????uint8_t?????hops2target;
???????????uint8_t?????peerAddr[NET_ADDR_SIZE];
???????????rxMetrics_t sigInfo;/*RSSI,LQI..*/
???????????uint8_t?????portRx;
???????????uint8_t?????portTx;
???????????linkID_t????thisLinkID;
} connInfo_t;
轉載于:https://www.cnblogs.com/zhangbing12304/p/7189851.html
總結
以上是生活随笔為你收集整理的SimpliciTI简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IIC设备驱动程序
- 下一篇: spring @Value注解#和$区别