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

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

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

如何在嵌入式系統(tǒng)上實(shí)現(xiàn)異步串口通信

MCU開發(fā)加油站 ? 來源:未知 ? 作者:佚名 ? 2017-12-04 09:51 ? 次閱讀

從軟件的角度來看,所有的通信都是一串字節(jié)(叫做數(shù)據(jù)幀)的連續(xù)傳輸。軟件需要采用適當(dāng)?shù)臋C(jī)制來保證接收端能夠正確識(shí)別出一個(gè)完整的數(shù)據(jù)幀、能夠檢查接收到的數(shù)據(jù)幀是正確的、在傳輸發(fā)生錯(cuò)誤時(shí)有合適的恢復(fù)機(jī)制。為此就需要定義一個(gè)合適的數(shù)據(jù)幀格式。

數(shù)據(jù)幀的提取

為了識(shí)別出一個(gè)完整的數(shù)據(jù)幀,基本上有兩個(gè)機(jī)制:一是在軟件上規(guī)定字節(jié)之間的間隔最大值,一旦兩個(gè)字節(jié)間的間隔超過某個(gè)閾值,就認(rèn)為一個(gè)數(shù)據(jù)幀結(jié)束;另一種機(jī)制不對(duì)字節(jié)間的間隔作規(guī)定,而是用特殊的字節(jié)來定義數(shù)據(jù)報(bào)的開始和結(jié)束,當(dāng)收到該特殊字節(jié)時(shí),就認(rèn)為一個(gè)數(shù)據(jù)幀的傳輸已完成。采用第一種機(jī)制的,比如Modbus-RTU。就是規(guī)定了同一個(gè)數(shù)據(jù)幀的字節(jié)間隔不能大于1.5個(gè)字節(jié)的傳輸時(shí)間,一旦大于該間隔,則認(rèn)為前一個(gè)幀的傳輸已經(jīng)結(jié)束,或者出錯(cuò)。同時(shí)為了保證不同數(shù)據(jù)幀之間有足夠的間隔,還規(guī)定了兩個(gè)數(shù)據(jù)幀之間最少插入3.5個(gè)字節(jié)的空閑位。下圖摘自Modbus協(xié)議,表示了一個(gè)正確的數(shù)據(jù)幀、錯(cuò)誤的數(shù)據(jù)幀以及數(shù)據(jù)幀之間的間隔。同時(shí)在數(shù)據(jù)報(bào)中引入了CRC,用于檢出數(shù)據(jù)幀層面的傳輸錯(cuò)誤。

第二種機(jī)制需要選用一個(gè)特殊字節(jié)作為幀頭幀尾(也可以給幀頭幀尾選用不同的字節(jié)),比如說,選用0xFF作為幀頭幀尾字節(jié),也即發(fā)送端在每個(gè)數(shù)據(jù)幀的頭尾都插入至少一個(gè)0xFF,接收端收到該字節(jié)就結(jié)束上一個(gè)幀的接收,同時(shí)從下一個(gè)非0xFF字節(jié)開始一個(gè)新的數(shù)據(jù)幀的接收。但該機(jī)制有一個(gè)問題,那就是所選的特殊字節(jié)(此處是0xFF)也可能是數(shù)據(jù)幀中的一個(gè)有效字節(jié),如果不作特殊處理,接收端就可能把這個(gè)數(shù)據(jù)幀中的字節(jié)誤認(rèn)為是數(shù)據(jù)幀的結(jié)束標(biāo)識(shí),從而導(dǎo)致接收錯(cuò)誤。因此,此處采取字節(jié)替換的特殊處理,以消除在數(shù)據(jù)幀的中間出現(xiàn)的特殊字節(jié),以下是一個(gè)例子。

在此處,選0xFE作為字節(jié)替換的標(biāo)識(shí)字節(jié),將0xFF替換成0xFE 0x0F。由于0xFE是字節(jié)替換的標(biāo)志,也成了一個(gè)特殊字符,同樣需要進(jìn)行替換。在上圖中,將0xFE替換成0xFE 0x0E。

采用該機(jī)制時(shí),發(fā)送端對(duì)數(shù)據(jù)幀中的所有0xFF,0xFE進(jìn)行替換。在接收端則進(jìn)行反向替換。如果在接收端的0xFE后面的字節(jié)收到非0x0F,0x0E的字符,說明發(fā)生了傳輸錯(cuò)誤,丟棄已經(jīng)接收的內(nèi)容,重新搜索幀頭字符開始一個(gè)新數(shù)據(jù)幀的接收。

數(shù)據(jù)幀的校驗(yàn)

考慮到串口通信有一定的誤碼率,無論是采用那種傳輸方式,必須有錯(cuò)誤幀檢出機(jī)制。通常選用的是CRC。一般用2個(gè)字節(jié)或4個(gè)字節(jié)。

串口驅(qū)動(dòng)的實(shí)現(xiàn)

嵌入式系統(tǒng)中,串口驅(qū)動(dòng)的實(shí)現(xiàn)一般有兩個(gè)途徑:一個(gè)是通過串口的收發(fā)中斷與串口控制器的Buffer直接交換數(shù)據(jù);另一種是通過DMA,利用DMA與串口Buffer交互自動(dòng)收發(fā)數(shù)據(jù)。

與串口控制器直接交互的方式,實(shí)現(xiàn)簡(jiǎn)單,既可以實(shí)時(shí)進(jìn)行字節(jié)替換以節(jié)省內(nèi)存,也可以方便設(shè)置字節(jié)間的定時(shí)器。但頻繁打斷CPU,對(duì)有一定BUFFER大小的串口,還可以利用BUFFER進(jìn)行性能優(yōu)化,而對(duì)一些只有一個(gè)字節(jié)或兩個(gè)字節(jié)BUFFER的串口,就需要一個(gè)字節(jié)起一次中斷,如果CPU負(fù)荷較重,很容易由于中斷處理不及時(shí)而導(dǎo)致字節(jié)丟失,特別是在高波特率的情況。

利用DMA與串口控制器交互的方式,由于不能實(shí)時(shí)進(jìn)行字節(jié)替換,需要在放入DMA之前完成字節(jié)替換,導(dǎo)致占用較大內(nèi)存空間。另外對(duì)于字節(jié)間間隔敏感的傳輸策略,需要用另外的機(jī)制,比如PRS,去操作定時(shí)器。用DMA的另一個(gè)問題是在接收時(shí)無法實(shí)時(shí)確定幀尾(采用幀頭幀尾模式時(shí)),一般只能采用定時(shí)器與DMA配合,用字節(jié)流的方式處理接收。


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

    關(guān)注

    41

    文章

    3620

    瀏覽量

    129680
  • 異步串口通信
    +關(guān)注

    關(guān)注

    0

    文章

    1

    瀏覽量

    1336

原文標(biāo)題:嵌入式系統(tǒng)上的異步串口通信的實(shí)現(xiàn)

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ARM嵌入式通信協(xié)議及應(yīng)用

    隨著科技的飛速發(fā)展,嵌入式系統(tǒng)在各個(gè)領(lǐng)域扮演著越來越重要的角色。ARM處理器因其高性能、低功耗的特點(diǎn),在嵌入式系統(tǒng)中得到了廣泛應(yīng)用。通信協(xié)議
    的頭像 發(fā)表于 12-28 09:18 ?302次閱讀

    新手怎么學(xué)嵌入式?

    實(shí)現(xiàn)一些簡(jiǎn)單的功能,如點(diǎn)亮一個(gè) LED 燈、讀取傳感器數(shù)據(jù)等,來加深對(duì)嵌入式技術(shù)的理解。你還可以參加一些線上或線下的嵌入式項(xiàng)目實(shí)踐活動(dòng),與其他愛好者一起學(xué)習(xí)和交流。 5. 學(xué)習(xí)嵌入式
    發(fā)表于 12-12 10:51

    【「嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)」閱讀體驗(yàn)】+ 學(xué)習(xí)一個(gè)STM32的案例

    感謝電子發(fā)燒友論壇和電子工業(yè)出版社的贈(zèng)書。 在[一篇帖子](【新提醒】【「嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)」閱讀體驗(yàn)】+ 初步印象 - 社區(qū)活動(dòng)專版 - 電子技術(shù)論壇 - 廣受歡迎的專業(yè)電子論壇
    發(fā)表于 12-06 22:22

    何在嵌入式系統(tǒng)實(shí)現(xiàn)RS232通信?

    嵌入式系統(tǒng)實(shí)現(xiàn)RS232通信,通常涉及硬件連接、驅(qū)動(dòng)程序配置、串口初始化以及數(shù)據(jù)收發(fā)等多個(gè)步驟。以下是一個(gè)
    的頭像 發(fā)表于 11-21 09:35 ?513次閱讀

    嵌入式系統(tǒng)與物聯(lián)網(wǎng)的結(jié)合

    隨著科技的飛速發(fā)展,嵌入式系統(tǒng)和物聯(lián)網(wǎng)(IoT)已經(jīng)成為現(xiàn)代技術(shù)領(lǐng)域的重要組成部分。嵌入式系統(tǒng)是指嵌入到設(shè)備或
    的頭像 發(fā)表于 11-06 10:23 ?428次閱讀

    嵌入式系統(tǒng)怎么學(xué)?

    操作系統(tǒng)的基本概念和原理,掌握常見的RTOS,如FreeRTOS、uC/OS等,以實(shí)現(xiàn)對(duì)嵌入式系統(tǒng)的任務(wù)調(diào)度和資源管理。 6、通信協(xié)議:學(xué)
    發(fā)表于 07-02 10:10

    嵌入式系統(tǒng)軟硬件基礎(chǔ)知識(shí)大全

    ,它們分別用于串行通信、高速數(shù)據(jù)傳輸和設(shè)備連接。而通信協(xié)議則規(guī)定了設(shè)備之間傳輸數(shù)據(jù)的格式和規(guī)則,如TCP/IP、HTTP和MQTT等。掌握這些接口和協(xié)議,可以讓我們更好地設(shè)計(jì)和實(shí)現(xiàn)嵌入式
    發(fā)表于 05-09 14:12

    嵌入式系統(tǒng)是啥

    嵌入式系統(tǒng)(System On Chip,SOC)是一種高度集成化的系統(tǒng),它將微處理器、內(nèi)存、接口和其他必要的硬件組件集成到一塊芯片。
    的頭像 發(fā)表于 03-28 15:36 ?613次閱讀

    嵌入式可編程片系統(tǒng)是什么

    嵌入式可編程片系統(tǒng)(Embedded Programmable System-on-Chip,或簡(jiǎn)稱EPSoC)是一種特殊的嵌入式系統(tǒng),它
    的頭像 發(fā)表于 03-28 15:33 ?618次閱讀

    嵌入式系統(tǒng)和ARM哪個(gè)更好

    嵌入式系統(tǒng)和ARM各有其優(yōu)勢(shì),難以直接比較哪個(gè)更好,因?yàn)樗鼈冊(cè)诓煌膽?yīng)用場(chǎng)景和需求下都有各自的價(jià)值。
    的頭像 發(fā)表于 03-28 15:14 ?562次閱讀

    嵌入式系統(tǒng)是什么意思

    等)以及其他必要的硬件組件。這些單元以往都是按照各自的功能做成一個(gè)個(gè)獨(dú)立的芯片,并通過電路板與其他單元組成一個(gè)系統(tǒng)。而現(xiàn)在,嵌入式系統(tǒng)將這些原本分散的單元都集成到一個(gè)芯片中,從而
    的頭像 發(fā)表于 03-28 15:14 ?608次閱讀

    嵌入式系統(tǒng)是什么

    嵌入式系統(tǒng)(Embedded System On Chip,簡(jiǎn)稱SoC)是一種集成度極高的復(fù)雜系統(tǒng),它在一個(gè)芯片上集成了微處理器內(nèi)核、RAM、USB、IEEE1394、Blueto
    的頭像 發(fā)表于 03-28 14:55 ?649次閱讀

    嵌入式系統(tǒng)發(fā)展前景?

    的發(fā)展前景也十分廣闊。 隨著物聯(lián)網(wǎng)和智能設(shè)備的快速發(fā)展,嵌入式系統(tǒng)將更為普遍地應(yīng)用于各種設(shè)備和設(shè)施,包括家用電器、醫(yī)療設(shè)備、交通工具等。這些設(shè)備將通過嵌入式系統(tǒng)
    發(fā)表于 02-22 14:09

    嵌入式軟件開發(fā)應(yīng)該掌握哪些知識(shí)?

    掌握的知識(shí) 1.基礎(chǔ)知識(shí) 1.1 c/c++編程語言和數(shù)據(jù)結(jié)構(gòu) C/C++ 是嵌入式系統(tǒng)中常用的編程語言,因?yàn)樗鼈兲峁┝酥苯釉L問硬件的能力。通過使用特定的編譯器和調(diào)用硬件相關(guān)的接口,可以實(shí)現(xiàn)對(duì)各種外設(shè)
    發(fā)表于 02-19 11:23

    嵌入式學(xué)習(xí)步驟

    開發(fā)板測(cè)試固件以及在實(shí)際設(shè)備上進(jìn)行測(cè)試。 嵌入式系統(tǒng)的多樣化發(fā)展,它將更為廣泛地應(yīng)用于各個(gè)領(lǐng)域,實(shí)現(xiàn)智能化、網(wǎng)絡(luò)化、自動(dòng)化的目標(biāo)。同時(shí),隨著人工智能和機(jī)器學(xué)習(xí)技術(shù)的發(fā)展,
    發(fā)表于 02-02 15:24