RS-485的多機通信方案探究
3 軟件協(xié)議
3.1 協(xié)議格式
Modbus協(xié)議按功能可以劃分為:地址碼、功能碼、數據碼、CRC校驗碼。而在RTU方式下,采用CRC循環(huán)冗余校驗,具體格式如圖3所示。本文引用地址:http://dyxdggzs.com/article/153643.htm
Modbus協(xié)議長(cháng)度根據用戶(hù)需求自己設定,地址碼標識終端地址,即和網(wǎng)關(guān)節點(diǎn)通信的從機地址。功能碼則是主機告訴從機要執行什么功能。數據碼長(cháng)度由用戶(hù)自己確定,最后根據前3個(gè)功能字段,生成兩個(gè)字節的CRC校驗碼,用來(lái)驗證前面的字段是否存在傳輸錯誤。
3.2 CRC生成算法
CRC算法分為靜態(tài)和動(dòng)態(tài)兩種,靜態(tài)的適合片內RAM非常有限的MCU,而動(dòng)態(tài)的適合RAM空間相對比較寬裕的MCU。CRC校驗碼生成步驟如下:
①初始化寄存器內容為0xffff。
②提取第一個(gè)字節數據和寄存器內容相異或。
③檢測最低有效位(LSB),如果LSB為1,寄存器單獨和預置值異或;如果LSB為0,則不進(jìn)行任何操作,然后將結果向LSB方向移動(dòng),最高有效位以0填充。
④重復第③步8次,直到最后一位(第8位)完成。
⑤提取下一個(gè)8位字節,重復步驟③、④的操作,等待所有字段都執行完,最終寄存器中的值就是所求的CRC校驗碼。
上述步驟中,如果預置值在整個(gè)過(guò)程中不變,則為靜態(tài)的CRC校驗;在動(dòng)態(tài)的CRC校驗中,存在一個(gè)動(dòng)態(tài)表,預置值每次都根據動(dòng)態(tài)表變化,所以準確性更高,而動(dòng)態(tài)表要開(kāi)辟一個(gè)較大的空間來(lái)存儲。所以,根據MCU的RAM大小決定使用動(dòng)態(tài)校驗還是靜態(tài)校驗。算法結束后,寄存器中存人的就是前N個(gè)字節的CRC校驗碼,運用該算法,不需要事先知道協(xié)議的整體長(cháng)度,最后都同樣生成兩個(gè)字節長(cháng)度的校驗碼,故可移植性好、通用性強。
3.3 自動(dòng)地址識別模式通信
自動(dòng)地址識別模式是RS-485經(jīng)典模式,通過(guò)設置Cortex-M054的狀態(tài)寄存器,可使UART工作在此模式下。節點(diǎn)在接收到地址字節時(shí),判斷地址字節數據是否與UA_ALT_CSR[ADDR_MATCH]值相匹配,如果匹配,表示網(wǎng)關(guān)節點(diǎn)要與此終端通信,故接收下面網(wǎng)關(guān)節點(diǎn)發(fā)送的所有數據字節。同時(shí),地址字節和數據字節都會(huì )被存入UART的FIFO中,否則忽略所有字節,既不產(chǎn)生中斷,也不存入FIFO,直到匹配。
串口通信中由起始位、數據位、奇偶校驗位、停止位4部分組成。當奇偶校驗位為0時(shí),表示傳輸的是數據字節;當它為1時(shí),表示傳輸的是地址字節。Cortex—M054的UA_ALT_CSR是一個(gè)32位的寄存器,其ADDR_MATCH用8位來(lái)表示,故自動(dòng)地址識別模式最大從機數只支持256個(gè)節點(diǎn)。它的優(yōu)點(diǎn)是:由于RS-485所有從機掛載在一根總線(xiàn)上,故網(wǎng)關(guān)節點(diǎn)發(fā)送數據時(shí),只有地址與自己匹配的節點(diǎn)才會(huì )響應,其他節點(diǎn)可以正常執行自己原先的任務(wù)而不被打擾,系統整體效率高。缺點(diǎn)是從機只能被主機輪詢(xún)時(shí)才能發(fā)送信息,不能主動(dòng)和主機通信;一個(gè)總線(xiàn)上只能掛載256個(gè)節點(diǎn)。
3.4 普通模式通信
普通模式可以配置為接收所有數據,也可以選擇性地忽略數據,直到接收到地址字節。為了更加靈活地利用協(xié)議通信,將其設置為接收所有數據,即只要網(wǎng)關(guān)節點(diǎn)向總線(xiàn)發(fā)送數據,那么總線(xiàn)上的所有節點(diǎn)都會(huì )收到數據,再根據協(xié)議解析內容執行相應的動(dòng)作,接地流程圖如圖4所示。
Cortex—M054內部有4 KB的Data Flash給用戶(hù)存儲數據,故將節點(diǎn)的地址存入Flash中。當系統上電復位后,先從Flash中讀出節點(diǎn)的地址,存入全局變量address中。當收到數據包之后,進(jìn)行CRC校驗,如果正確就接收,再根據協(xié)議解析地址地段,其值與address比較,以此判定此包是否屬于自己。
自動(dòng)地址識別模式是由芯片自動(dòng)篩選地址,而此處需要軟件判斷。因此,地址長(cháng)度可以由用戶(hù)自己設定。
數字通信相關(guān)文章:數字通信原理
通信相關(guān)文章:通信原理
評論