無線數(shù)據(jù)傳輸,,是指用無線信道替代有線連接進(jìn)行數(shù)據(jù)傳輸,。無線數(shù)據(jù)傳輸技術(shù)是當(dāng)代通信技術(shù)領(lǐng)域的一個(gè)重要分支,,近年來,,隨著科學(xué)技術(shù)的飛速發(fā)展,,特別是在全球信息技術(shù)及其產(chǎn)業(yè)化的推動下,,無線數(shù)據(jù)傳輸技術(shù)得到了迅猛的發(fā)展,。
透明數(shù)據(jù)傳輸是指:上位機(jī)與模塊進(jìn)行信息交換的數(shù)據(jù)格式,,沒有像指令字頭,、結(jié)束符等數(shù)據(jù)包信息,只要上位機(jī)串口有數(shù)據(jù)輸出,,模塊就把串口的數(shù)據(jù)以無線方式編碼發(fā)送,,當(dāng)接收模塊接收到發(fā)射模塊發(fā)送的無線數(shù)據(jù)信號后進(jìn)行解碼,,把解碼后的數(shù)據(jù)按發(fā)送端的格式從串口輸出。也就是說模塊對使用者是開放的,,透明的,,實(shí)際上,在點(diǎn)對多點(diǎn)的組網(wǎng)通信中,,我們完全可以將無線數(shù)據(jù)透明傳輸方式等同于有線連接的總線方式,。不同點(diǎn)是無線連接方式存在較大延時(shí)。
無線數(shù)據(jù)透明傳輸系統(tǒng)是指設(shè)計(jì)具有RS232,、RS485等標(biāo)準(zhǔn)接口的無線數(shù)據(jù)透明傳輸模塊,,用該模塊替代串口連接線,多個(gè)模塊互相通過無線協(xié)議實(shí)現(xiàn)數(shù)據(jù)傳輸,,形成一個(gè)無線數(shù)據(jù)傳輸系統(tǒng),。
在ZigBee無線數(shù)傳替代串口連接線。PC通過RS 232串行接口發(fā)送數(shù)據(jù)給ZigBee無線數(shù)傳模塊,,模塊接收數(shù)據(jù)后通過射頻收發(fā)器將數(shù)據(jù)轉(zhuǎn)發(fā)給另一端的ZigBee無線數(shù)傳模塊,,該模塊通過射頻收發(fā)器接收數(shù)據(jù)后直接發(fā)送到RS232串行接口供PC機(jī)接收。
#define SERIALAPP_MSG_RTRY_EVT 0x0001 //重發(fā)數(shù)據(jù)
#define SERIALAPP_RSP_RTRY_EVT 0x0002//重發(fā)響應(yīng)信息 #define SERIALAPP_MSG_SEND_EVT 0x0004 //發(fā)送數(shù)據(jù) #define SERIALAPP_MAX_CLUSTERS 2 #define SERIALAPP_CLUSTERID1 1 //數(shù)據(jù)傳輸 #define SERIALAPP_CLUSTERID2 2 //接收數(shù)據(jù)響應(yīng) 將命令添加到命令列表 const cId_t SerialApp_ClusterList[SERIALAPP_MAX_CLUSTERS] = { SERIALAPP_CLUSTERID1, SERIALAPP_CLUSTERID2 }; 簡單描述符定義 const SimpleDescriptionFormat_t SerialApp_SimpleDesc = { SERIALAPP_ENDPOINT, // int Endpoint; 端口號 SERIALAPP_PROFID, //uint16 AppProfId[2]; Profile ID SERIALAPP_DEVICEID, // uint16 AppDeviceId[2]; 設(shè)備ID SERIALAPP_DEVICE_VERSION, // int AppDevVer:4; 版本號 SERIALAPP_FLAGS, // int AppFlags:4; 程序標(biāo)識 SERIALAPP_MAX_CLUSTERS,//byte AppNumInClusters; 輸入命令數(shù) // byte *pAppInClusterList; 輸入命列表 (cId_t *)SerialApp_ClusterList,
SERIALAPP_MAX_CLUSTERS,
// byte *pAppOutClusterList; 輸出命令列表
(cId_t *)SerialApp_ClusterList };
//端口描述符 const endPointDesc_t SerialApp_epDesc = { SERIALAPP_ENDPOINT, //端口號 &SerialApp_TaskID, //任務(wù)ID (SimpleDescriptionFormat_t *)&SerialApp_SimpleDesc, //簡單描述符 noLatencyReqs }; SerialApp的初始化函數(shù) void SerialApp_Init( uint8 task_id ) { halUARTCfg_t uartConfig; //串口配置信息 SerialApp_MsgID = 0x00;
SerialApp_SeqRx = 0xC3; //接收序列號 SerialApp_TaskID = task_id;//任務(wù)ID SerialApp_DstAddr.endPoint = 0; //目的設(shè)端口
SerialApp_DstAddr.addr.shortAddr = 0;//目的地址 SerialApp_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent;//目的地址模式 SerialApp_RspDstAddr.endPoint = 0;
SerialApp_RspDstAddr.addr.shortAddr = 0; SerialApp_RspDstAddr.addrMode = (afAddrMode_t)AddrNotPresent; afRegister( (endPointDesc_t *)&SerialApp_epDesc ); //注冊端口描述符
RegisterForKeys( task_id ); //注冊按鍵事件
uartConfig.configured = TRUE; // 2430 don't care.
uartConfig.baudRate = SERIAL_APP_BAUD; //波特率 uartConfig.flowControl = TRUE; //流量控制 uartConfig.flowControlThreshold = SERIAL_APP_THRESH; //流控閾值 uartConfig.rx.maxBufSize = SERIAL_APP_RX_MAX; //最大接收量 uartConfig.tx.maxBufSize = SERIAL_APP_TX_MAX; //最大發(fā)送量 uartConfig.idleTimeout = SERIAL_APP_IDLE;//2430 don't care. uartConfig.intEnable = TRUE; // 2430 don't care. #if SERIAL_APP_LOOPBACK uartConfig.callBackFunc = rxCB_Loopback; //接收回調(diào)函數(shù) #else uartConfig.callBackFunc = rxCB; #endif HalUARTOpen (SERIAL_APP_PORT, &uartConfig); //打開串口 #if defined ( LCD_SUPPORTED )
HalLcdWriteString( "SerialApp2", HAL_LCD_LINE_2 ); #endif //注冊綁定相關(guān)的事件 ZDO_RegisterForZDOMsg( SerialApp_TaskID, End_Device_Bind_rsp ); ZDO_RegisterForZDOMsg( SerialApp_TaskID, Match_Desc_rsp ); } typedef struct
{ bool configured; uint8 baudRate; //波特率 協(xié)議棧只有38400和115200兩個(gè)波特率 //控制位,,如果是1的話就說明是四線模式,,0代表2線模式,默認(rèn)的是4線模式 bool flowControl; uint16 flowControlThreshold; uint8 idleTimeout; halUARTBufControl_t rx; halUARTBufControl_t tx; bool intEnable; uint32 rxChRvdTime; halUARTCBack_t callBackFunc; }halUARTCfg_t; 說明:如果你的板子是采用2線模式的話,,必須得在SearilApp中的SerialWsn_Init( uint8 task_id )把uartConfig.flowControl=TURE改成FALSE |
|