0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通信協(xié)議考慮的幾點(diǎn)問(wèn)題

strongerHuang ? 來(lái)源:嵌入式大雜燴 ? 2023-05-04 16:02 ? 次閱讀

嵌入式開(kāi)發(fā)在很多場(chǎng)景下都需要進(jìn)行通訊,那么通訊協(xié)議就必不可少,有代表性的通訊協(xié)議是如下三種:

577d6136-e645-11ed-ab56-dac502259ad0.jpg

從上表可以看到,一般嵌入式設(shè)備內(nèi)存和運(yùn)算性能都有限,因此固定二進(jìn)制是首選通信協(xié)議。

一. 簡(jiǎn)單性

保證協(xié)議是一個(gè)簡(jiǎn)單的方案,晦澀難懂往往意味著實(shí)現(xiàn)困難和容易出錯(cuò)。協(xié)議的結(jié)構(gòu)宜采用平面方式,每個(gè)域作用明確,數(shù)據(jù)域盡可能設(shè)計(jì)得長(zhǎng)度和位置固定,注釋詳盡,文檔清晰,實(shí)例豐富,讓人盡快上手和理解。

協(xié)議一般都需要以下域:幀頭,長(zhǎng)度,幀類型,目標(biāo)地址,源地址,數(shù)據(jù),校驗(yàn),幀尾。

二. 可擴(kuò)展

必須保證將來(lái)增加功能和更改硬件后協(xié)議仍能勝任工作,這往往是通過(guò)預(yù)留空間來(lái)實(shí)現(xiàn),協(xié)議的變更應(yīng)該只是量的增加,不至于引起協(xié)議結(jié)構(gòu)的變化。

三. 低耦合

理想情況下每個(gè)協(xié)議包是原子信息,即本協(xié)議包不與其他協(xié)議包牽連,以防止通訊丟幀和設(shè)置牽連帶來(lái)的錯(cuò)誤。

四. 穩(wěn)定性

協(xié)議包長(zhǎng)度適宜:太小包含的信息過(guò)少,協(xié)議包的種類繁多,容易引起通訊混亂和牽連錯(cuò)誤;太大包含的信息過(guò)多,可讀性較差,組幀和解幀的工作困難,還會(huì)帶來(lái)通訊易受干擾的缺陷,一般協(xié)議長(zhǎng)度以最小原子性信息為標(biāo)尺。

協(xié)議必須包括校驗(yàn)機(jī)制,以便于接收方判別協(xié)議包正確完整接收,如果出錯(cuò)需要較好的機(jī)制來(lái)確保通訊成功(如重傳)。

五. 高效率

按信息類型區(qū)分協(xié)議包類別,如:設(shè)置網(wǎng)絡(luò)信息參數(shù),設(shè)置當(dāng)前運(yùn)行參數(shù),可以區(qū)分開(kāi)來(lái),方便程序處理。

將同種操作編碼為一個(gè)子集是一種高效手段,如Read操作,編碼為0x0010,Write操作,編碼為0x0020。

數(shù)據(jù)盡可能設(shè)計(jì)成同構(gòu)模式,如果實(shí)在有差異,至少將同類型數(shù)據(jù)放置在一起,這樣程序可以充分利用指針和線性尋址加速處理。

六. 易實(shí)現(xiàn)

盡量減少?gòu)?fù)雜算法的使用,如,通訊鏈路穩(wěn)定,數(shù)據(jù)幀的校驗(yàn)碼可以由CheckSum代替CRC。除非資源非常緊張,否則不要將過(guò)多的信息擠壓在一個(gè)數(shù)據(jù)里,因?yàn)樗鼤?huì)帶來(lái)可讀性差和實(shí)現(xiàn)困難。

七.軟件開(kāi)發(fā)

盡可能地讓硬件ISR完成驅(qū)動(dòng)工作,不要讓“進(jìn)程”參與復(fù)雜的時(shí)序邏輯,否則處理器將步履蹣跚且邏輯復(fù)雜!如:

接收固定長(zhǎng)度的數(shù)據(jù)幀,可以使用DMA,每接收完一幀DMA_ISR向進(jìn)程發(fā)消息。小心處理DMA斷層異常(接收的數(shù)據(jù)幀長(zhǎng)度正常但數(shù)據(jù)錯(cuò)誤,數(shù)據(jù)為上幀的后半部分+本幀的前半部分)。

接收不定長(zhǎng)的數(shù)據(jù)幀,可以使用狀態(tài)機(jī),當(dāng)接收到“幀尾數(shù)據(jù)”時(shí)向進(jìn)程發(fā)消息。小心數(shù)據(jù)紊亂和超時(shí)異常(數(shù)據(jù)紊亂時(shí)需要將狀態(tài)機(jī)及時(shí)復(fù)位,超時(shí)一般使用定時(shí)器監(jiān)控)。

八. 考慮硬件

如果通信鏈路是高速總線(如SPORT可達(dá)100Mbps),一般設(shè)計(jì)成一幀產(chǎn)生一次中斷,它通過(guò)長(zhǎng)度觸發(fā)的DMA來(lái)實(shí)現(xiàn),需要將協(xié)議設(shè)計(jì)成固定長(zhǎng)度,如附錄A。它具備高效率,但靈活性較差。

如果通信鏈路是低速總線(如UART一般100kbps),一般接收一字節(jié)產(chǎn)生一次中斷,可以將協(xié)議設(shè)計(jì)成變長(zhǎng)幀,如附錄B。它具備高靈活性,但效率較低。

57882918-e645-11ed-ab56-dac502259ad0.png

上圖顯示了PC發(fā)送數(shù)據(jù)幀的格式,總長(zhǎng)為64字節(jié),是4字節(jié)的整倍數(shù),符合絕大部分32位處理器結(jié)構(gòu)體對(duì)齊的特性。

0x3C:INT8U,幀頭,可見(jiàn)字符’<’

Len:INT8U,本幀的總數(shù)據(jù)長(zhǎng)度,在圖4即為64

Dst:INT8U,標(biāo)識(shí)目標(biāo)設(shè)備的ID號(hào)

Src:INT8U,標(biāo)識(shí)源設(shè)備的ID號(hào)

Data:56字節(jié)的存儲(chǔ)區(qū),內(nèi)容依賴于具體的通信幀(實(shí)例見(jiàn)表2)

Cmd:INT16U,數(shù)據(jù)幀的類別

CS:INT8U, 對(duì)它前面所有數(shù)據(jù)(62字節(jié))進(jìn)行8位累加和校驗(yàn)

0x7D:INT8U, 幀尾,可見(jiàn)字符’}’

Data域數(shù)據(jù)結(jié)構(gòu)實(shí)例:

5790c79e-e645-11ed-ab56-dac502259ad0.jpg

一個(gè)基于變長(zhǎng)格式的UART通信協(xié)議實(shí)例:

5799833e-e645-11ed-ab56-dac502259ad0.jpg

PC與iWL880A(一種無(wú)線通信產(chǎn)品,詳見(jiàn)www.rimelink.com)通信幀采用變長(zhǎng)格式,如下圖所示。大部分設(shè)備(常見(jiàn)為PC機(jī))對(duì)于接收以“回車符”的機(jī)制很好處理,協(xié)議中的Tail就等于0x0D(換行符)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18975

    瀏覽量

    302083
  • 通信協(xié)議
    +關(guān)注

    關(guān)注

    28

    文章

    840

    瀏覽量

    40215
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2859

    瀏覽量

    87914
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1219

    瀏覽量

    101121
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    558

    瀏覽量

    100348

原文標(biāo)題:通信協(xié)議考慮的幾點(diǎn)問(wèn)題

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    dsp無(wú)線通信電臺(tái)的通信協(xié)議研究

    本帖最后由 mr.pengyongche 于 2013-4-30 02:57 編輯 dsp無(wú)線通信電臺(tái)的通信協(xié)議研究摘 要:通信協(xié)議通信系統(tǒng)在
    發(fā)表于 02-19 15:27

    CAN通信協(xié)議

    CAN通信協(xié)議,需要的看看。
    發(fā)表于 04-19 17:11

    TCP通信協(xié)議-Labview上位機(jī)

    現(xiàn)在用單片機(jī)進(jìn)行信息采集,通過(guò)GPRS模塊上傳到PC,用Labview做上位機(jī),TCP通信協(xié)議,想請(qǐng)教一下,TCP通信協(xié)議和Modbus TCP通信協(xié)議有什么不同?
    發(fā)表于 12-10 08:58

    如何應(yīng)用mavlink通信協(xié)議?

    如何應(yīng)用mavlink通信協(xié)議
    發(fā)表于 12-20 06:30

    如何實(shí)現(xiàn)基礎(chǔ)通信協(xié)議的設(shè)計(jì)?

    常見(jiàn)的通信協(xié)議格式是什么?如何實(shí)現(xiàn)基礎(chǔ)通信協(xié)議的設(shè)計(jì)?
    發(fā)表于 02-14 07:35

    串口通信協(xié)議的相關(guān)資料分享

    目錄一、串口通信協(xié)議1、UART簡(jiǎn)介2、 UART通信協(xié)議(1)起始位(2)數(shù)據(jù)幀(3)奇偶校驗(yàn)位(4)停止位(5)下個(gè)起始位(6)波特率二、STM32的USART串口通信(中斷)3、要求2、工程
    發(fā)表于 02-22 07:16

    ModBus通信協(xié)議.pdf

    ModBus通信協(xié)議.pdf
    發(fā)表于 04-09 22:24 ?90次下載

    Modbus通信協(xié)議教程

    Modbus通信協(xié)議教程Modbus通信協(xié)議教程Modbus通信協(xié)議教程
    發(fā)表于 12-08 14:14 ?75次下載

    SCPI通信協(xié)議

    SCPI通信協(xié)議。
    發(fā)表于 05-04 17:54 ?180次下載

    ModBus通信協(xié)議及編程

    ModBus通信協(xié)議及編程。
    發(fā)表于 05-11 16:40 ?21次下載

    一個(gè)簡(jiǎn)單的基礎(chǔ)通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)

    之間的數(shù)據(jù)的穩(wěn)定傳輸,通信協(xié)議的設(shè)計(jì)需要考慮很多的問(wèn)題。當(dāng)然應(yīng)對(duì)不同的應(yīng)用場(chǎng)景,可以有針對(duì)性的設(shè)計(jì)不同的通信協(xié)議。一種常見(jiàn)的通信協(xié)議格式這是一種我們比較常見(jiàn)的
    發(fā)表于 12-14 18:38 ?10次下載
    一個(gè)簡(jiǎn)單的基礎(chǔ)<b class='flag-5'>通信協(xié)議</b>的設(shè)計(jì)與實(shí)現(xiàn)

    通信協(xié)議的概念

    通信協(xié)議是指在通信過(guò)程中,為了使得不同設(shè)備之間進(jìn)行有效的數(shù)據(jù)交換,所約定的一整套規(guī)則和標(biāo)準(zhǔn)。通信協(xié)議中定義了通信雙方的接口、數(shù)據(jù)格式、傳輸速率、傳輸控制和數(shù)據(jù)處理等細(xì)節(jié),從而確保了
    發(fā)表于 05-06 14:32 ?1957次閱讀

    通信協(xié)議內(nèi)容與功能

    通信協(xié)議不難理解,就是兩個(gè)(或多個(gè))設(shè)備之間進(jìn)行通信,必須要遵循的一種協(xié)議。通信協(xié)議是指雙方實(shí)體完成通信或服務(wù)所必須遵循的規(guī)則和約定。通過(guò)
    發(fā)表于 05-06 14:43 ?2952次閱讀

    通信協(xié)議的特點(diǎn)

    通信協(xié)議的種類和特點(diǎn)目前常見(jiàn)的通信協(xié)議主要有:NetBEUI、IPX/SPX、NWLink、TCP/IP,在這幾種協(xié)議中用得最多、最為復(fù)雜的當(dāng)然還是TCP/IP協(xié)議,最為簡(jiǎn)單的是Net
    發(fā)表于 05-06 14:57 ?1407次閱讀

    PROFINET通信協(xié)議是什么

    PROFINET通信協(xié)議是一種專為工業(yè)自動(dòng)化領(lǐng)域設(shè)計(jì)的基于以太網(wǎng)的實(shí)時(shí)通信協(xié)議。以下是對(duì)PROFINET通信協(xié)議的詳細(xì)解析,包括其定義、特點(diǎn)、體系結(jié)構(gòu)、工作原理、通信方式、應(yīng)用領(lǐng)域以及
    的頭像 發(fā)表于 09-25 18:13 ?798次閱讀