嵌入式系統開發中,處理器與週邊裝置的通訊至關重要。理解各種通訊協定,如 UART、I2C、1-Wire,以及其同步、非同步、半雙工、全雙工等特性,是選擇最佳方案的關鍵。此外,OSI 模型的七層架構,從物理層的電氣特性到應用層的資料處理,提供了一個理解網路通訊的完整框架。而網路協定堆積疊,則將網路通訊過程分解為多個層次,每一層負責不同的功能,簡化了網路通訊的複雜性。主動物件的低耦合、高可靠性及高效率特性,也提升了嵌入式系統的效能和可維護性。

主動物件的優點

主動物件具有以下幾個優點:

  1. 低耦合度:每個任務之間的耦合度很低,這使得系統更容易維護和擴充套件。
  2. 高可靠性:由於每個任務都是獨立的,如果一個任務出錯,不會影響到其他任務的執行。
  3. 高效率:主動物件可以有效地利用系統資源,因為每個任務都只執行必要的工作。

主動物件的實作

主動物件可以透過以下步驟實作:

  1. 定義任務:定義系統中需要執行的任務,每個任務負責處理特定的事件或任務。
  2. 實作訊息佇列:實作訊息佇列,以便任務之間可以進行通訊。
  3. 實作任務邏輯:實作每個任務的邏輯,包括事件處理和訊息傳送。
內容解密:

上述內容介紹了主動物件的概念和優點,並提供了實作主動物件的步驟。透過控制反轉、非同步處理和私有資料,主動物件可以提供低耦合度、高可靠性和高效率的系統。

圖表翻譯:

下圖展示了主動物件在嵌入式系統中的應用: 上述圖表展示了三個任務之間的通訊過程,每個任務透過訊息佇列傳送和接收訊息。這種設計可以提供低耦合度和高可靠性的系統。

通訊協定與週邊裝置

在嵌入式系統中,處理器核心與外部週邊裝置之間的通訊是非常重要的。這些週邊裝置可以是感測器、執行器、顯示器或其他型別的裝置。為了與這些週邊裝置進行通訊,處理器核心需要使用特定的通訊協定。

串列通訊

串列通訊是一種最常見的通訊方式,指的是將資料一位一位地傳輸過去。這種通訊方式可以使用通用同步/非同步收發器(USART)實作。UART(通用非同步收發器)是最常見的串列通訊協定,常用於連線裝置與電腦之間。

在串列通訊中,有兩種主要的模式:同步和非同步。同步模式需要一個單獨的時鐘訊號來控制資料傳輸,而非同步模式則使用開始和結束位元來表示通訊的開始和結束。

全雙工和半雙工

在串列通訊中,還有一個重要的概念:全雙工和半雙工。全雙工指的是可以同時傳輸和接收資料,而半雙工則指的是隻能在一個方向上傳輸資料。

I2C 和 1-Wire 通訊

I2C 和 1-Wire 是兩種常見的半雙工通訊協定。I2C 通訊協定使用兩條線路進行通訊,一條用於資料傳輸,另一條用於時鐘訊號。1-Wire 通訊協定則使用一條線路進行通訊,資料和時鐘訊號都在同一條線路上傳輸。

通訊協定選擇

選擇合適的通訊協定需要考慮許多因素,包括資料傳輸速度、距離、噪聲耐受性等。在實際應用中,需要根據具體情況選擇最合適的通訊協定。

內容解密:

在這個章節中,我們討論了串列通訊、全雙工和半雙工、I2C 和 1-Wire 通訊協定等概念。瞭解這些概念對於嵌入式系統開發者來說是非常重要的,因為它們需要根據具體情況選擇最合適的通訊協定。

圖表翻譯:

這個流程圖展示了串列通訊、全雙工和半雙工、I2C 和 1-Wire 通訊協定的關係。從圖中可以看出,串列通訊可以分為全雙工和半雙工兩種模式,全雙工可以使用 I2C 通訊協定,半雙工可以使用 1-Wire 通訊協定。

通訊協定與週邊裝置

當遇到新的通訊匯流排時,需要注意以下幾點:

  • 如何生成通訊時鐘?是非同步(所有參與者事先同意)還是同步(明確地在匯流排上傳輸)?
  • 是對稱通訊(任何人都可以發言)還是非對稱通訊(只有匯流排控制器可以啟動通訊)?
  • 是全雙工(有足夠的I/O,因此每個人都可以傳送資料)還是半雙工(他們輪流在分享I/O上傳送資料)?
  • 需要多少硬體線?
  • 是點對點還是點對多點?是透過協定進行定址還是透過晶片選擇?
  • 系統的最大吞吐量是多少?每秒可以轉移多少資料位?其中多少是開銷?
  • 訊號可以傳輸多遠?

這些問題的目的是要了解實作驅動程式使用通訊匯流排需要多長時間。

許多處理器都提供範例程式碼,特別是針對其通訊驅動程式的。有時這些程式碼非常出色,但有時它們只是為了讓它執行(但不是強健地執行)的範例。確保審查這些程式碼,如果您將其納入您的專案中。

從更高層次的術語和一般問題開始,讓我們看看一些熱門的匯流排行為。請記住,這仍然只是簡介。最後,您需要檢視資料表以瞭解周邊裝置需要什麼,並檢視處理器手冊以瞭解如何提供它。

圖 7-1 比較了一些最熱門的匯流排和周邊裝置所需的線數。

串列通訊

串列通訊是一種常見的通訊協定。即使是最常見的串列介面(系統和電腦之間),也有一些不同的名稱。UART 是處理器中實作此介面的部分,但它發出 TTL 級別的串列訊號。TTL 代表電晶體-電晶體邏輯,意為 0-5V。但在實踐中,它指的是處理器的數字 I/O 電壓級別:0-5V、0-3V、0-1.8V 等。

串列通訊中最重要的訊號是傳送(TX)和接收(RX)。您可以使用這兩個訊號將嵌入式系統連線到電腦。請注意,兩個系統都有一個 TX 和 RX,因此需要交換它們以連線每個 TX 到另一側的 RX。如果沒有交換 TX 和 RX,則可能會出現最常見的硬體問題。

要連線板卡到電腦,需要一個 USB-to-串列電纜(有時稱為 FTDI 電纜,以製造商命名)。請確保購買正確電壓的電纜,以匹配處理器的 TTL 側。

此類別串列通訊位於 OSI 模型的物理層和資料鏈路層。沒有內建的定址方案,因此只能在兩方之間建立(對稱點對點通訊)。它使用隱式時鐘(非同步!),因此雙方必須就鮑率、奇偶校驗、啟動和停止位數以及流量控制達成一致。

RS-232 串列

RS-232 串列與 TTL 串列相似,只有電氣變化,沒有軟體影響。串列埠曾經意味著具有 DB-9 聯結器的 RS-232 埠。訊號為 +/– 12V。圖 7-2 顯示了嵌入式開發中串列纜線的一種常見用途。

雖然 RS-232 定義了八個訊號(和地線),但最重要的是來自處理器的 TTL 訊號的傳送和接收線。如果您正在連線到蜂窩資料調變解調器或串列至乙太網路轉換器,您可能還需要一些其他 UART 線來指示每個裝置何時準備好接收資料。

RS-232 的相對較高電壓(12V!)意味著它可以在訊號劣化之前傳輸相當遠–正常串列(或空調)纜線可達 50 英尺(15 米)。特殊纜線(低電容)可以增加距離。

RS-232 已經存在很長時間,繼續被廣泛使用。儘管其衰落經常被新的協定取代(乙太網路、USB 等),RS-232 因為在軟體中實作簡單且在硬體中實作廉價而繼續存在。

通訊協定的分層模型(OSI)

通訊協定通常分為多個層,以便單獨討論每個部分。嵌入式系統中的層通常限於:

  • 電氣層:TTL 和 RS-232 的不同電壓,但相同的線數
  • 資料鏈路層:同步、對稱、雙工等
  • 包和網路:資料塊如何到達目的地

OSI 模型是一種用於描述通訊協定的分層方法。每個層為上一層提供了一些功能,以建立通訊途徑。

不需要記住這一切。這個模型遠比您大多數嵌入式系統所需的更複雜,但透過瞭解複雜通訊途徑的工作原理,您將對較小的通訊途徑有所瞭解。

表 7-1 顯示了 OSI 模型的各個層及其功能。

功能問題
1. 物理層提供電氣和物理規範多少線連線處理器和外圍裝置?在什麼電壓下?在什麼速度下?
2. 資料鏈路層提供錯誤檢查和糾錯如何檢查和糾正錯誤?
3. 網路層提供路由和定址如何將資料包路由到目的地?
4. 傳輸層提供可靠性和流量控制如何確保可靠性和流量控制?
5. 工作階段層提供會話管理如何管理會話?
6. 表示層提供資料格式化如何格式化資料?
7. 應用層提供應用服務如何提供應用服務?

這個模型可以幫助您瞭解通訊協定的各個部分及其之間的關係。透過瞭解這些層,您可以更好地設計和實作自己的通訊協定。

網路協定堆積疊簡介

網路協定堆積疊(Protocol Stack)是一種分層結構,用於描述電腦網路中資料傳輸的過程。它將複雜的網路通訊過程分解為多個層次,每一層負責不同的功能。這種分層設計使得網路協定堆積疊更容易理解、實作和維護。

資料鏈結層負責描述如何在物理線路上傳輸資料。它定義了資料傳輸的格式、錯誤檢查和糾錯機制等。例如,Ethernet(802.xx)是一種常見的資料鏈結層協定,它規定了資料傳輸的格式、錯誤檢查和糾錯機制等。

Ethernet(802.xx)

Ethernet是一種廣泛使用的區域網(LAN)技術,它使用了CSMA/CD(Carrier Sense Multiple Access with Collision Detection)協定來管理資料傳輸。Ethernet的資料傳輸單元稱為「幀」(Frame),每個幀包含了來源和目的地的MAC地址、資料內容和錯誤檢查碼等。

3. 網路層(Network Layer)

網路層負責將變長的資料(封包)從一處傳輸到另一處。它需要解決如何將大塊的資料分割成小塊,以便於在通訊路徑上傳輸。網路層還需要定義系統的地址和路由機制,以確保資料能夠正確地到達目的地。

IP(Internet Protocol)

IP是網際網路中使用的一種網路層協定,它負責將資料封包從源系統傳輸到目的系統。IP提供了點對點的連線服務,允許不同系統之間的通訊。IP地址是一種唯一的標識,用於區分不同的系統。

4. 傳輸層(Transport Layer)

傳輸層負責提供可靠的資料傳輸服務,即使在物理線路出現錯誤的情況下,也能夠確保資料的正確傳輸。它需要實作錯誤檢查和糾錯機制,以確保資料的完整性。

TCP(Transmission Control Protocol)

TCP是一種常見的傳輸層協定,它提供了連線導向的可靠傳輸服務。TCP使用了序列號和確認號碼來確保資料的正確傳輸,並且實作了流量控制和糾錯機制,以確保網路通訊的可靠性。

圖表翻譯:

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title 嵌入式系統通訊協定與週邊裝置控制

package "嵌入式通訊協定" {
    package "串列通訊" {
        component [UART] as uart
        component [I2C 協定] as i2c
        component [1-Wire 協定] as onewire
    }

    package "模型訓練" {
        component [模型選擇] as select
        component [超參數調優] as tune
        component [交叉驗證] as cv
    }

    package "評估部署" {
        component [模型評估] as eval
        component [模型部署] as deploy
        component [監控維護] as monitor
    }
}

collect --> clean : 原始資料
clean --> feature : 乾淨資料
feature --> select : 特徵向量
select --> tune : 基礎模型
tune --> cv : 最佳參數
cv --> eval : 訓練模型
eval --> deploy : 驗證模型
deploy --> monitor : 生產模型

note right of feature
  特徵工程包含:
  - 特徵選擇
  - 特徵轉換
  - 降維處理
end note

note right of eval
  評估指標:
  - 準確率/召回率
  - F1 Score
  - AUC-ROC
end note

@enduml

在這個圖表中,我們可以看到網路協定堆積疊的各個層次之間的關係。應用層是最上層,負責提供應用程式之間的通訊服務。傳輸層負責提供可靠的資料傳輸服務,網路層負責將資料封包從源系統傳輸到目的系統,資料鏈結層負責描述如何在物理線路上傳輸資料,物理層是最下層,負責提供物理線路上的資料傳輸服務。

嵌入式系統的通訊協定選型至關重要。本文深入探討了從基礎的串列通訊、RS-232,到I2C、1-Wire等半雙工協定,以及Ethernet、TCP/IP等網路協定在嵌入式系統中的應用場景和特性。分析不同協定在資料傳輸速度、距離、硬體資源佔用、複雜度等方面的差異,可以發現,選擇合適的通訊協定需要考量多重因素,例如:專案對即時性、可靠性、功耗的要求,以及成本和開發週期的限制。技術限制深析顯示,單一協定往往難以滿足所有需求,因此,混合使用多種協定,例如,底層使用I2C控制感測器,上層使用TCP/IP進行資料傳輸,已成為嵌入式系統設計的常見策略。展望未來,隨著物聯網的蓬勃發展,低功耗廣域網路(LPWAN)技術、邊緣運算的興起,以及更高效能、更低延遲的無線通訊技術的發展,將為嵌入式系統的通訊協定帶來更多選擇和挑戰。玄貓認為,深入理解各種通訊協定的特性和應用場景,並根據具體需求進行靈活選型和整合,是嵌入式系統開發者提升系統效能和競爭力的關鍵所在。