Software Serial

透過使用 SoftwareSerial 函式庫,開發者能在 LinkIt 7697 上連接更多的 UART/Serial 裝置。 

要使用 SoftwareSerial 需要安裝 Arduino BSP v0.10.7 或更新的版本,並可在 Examples > SoftwareSerial 選單中看到範例程式。

使用 SoftwareSerial 函式庫

使用 SoftwareSerial 時,需要先指定 TX 與 RX 腳位。任何一隻數位針腳皆可當作 TX 使用,但是 RX 腳位僅能選擇 P2 或是 P3 (*),因為只有這兩隻腳位有支援 EINT 功能。下列程式碼示範將 TX 設成 P11、RX 設成 P2

(*) 雖然 P1 和 P6 也同樣具有 EINT 功能,但因它們分屬 HW UART 以及 bootstrapping 腳位,故不建議拿來當 Software Serial 使用。

SoftwareSerial mySerial(2, 11); // RX, TX

設置好 TX 與 RX 腳位後,就可如同使用內建的 Serial 類別一般,直接呼叫 begin() 和 print() 等函式進行操作:

mySerial.begin(4800);	// supports up to 115200
mySerial.println("Hello, world?");

為何需要 SoftwareSerial?

雖然 LinkIt 7697 有兩組 HW serial (UART) 通訊埠:Serial 與 Serial1,但因以下使用情境限制:

  • 大多時候 Serial 通訊埠被拿來當作 debug 用途,連接 Serial Monitor 等工具看系統訊息而無法移作他用;
  • Serial1 通訊埠使用的 P6 腳位同時也是系統的 bootstrapping 腳位,在系統開機時它必須保持為低電位。相反地由於 UART 裝置在 idle 時訊號都是處在高電位,這會造成當 P6 連接 UART 裝置時會無法正常重新開機 (無法正常開機時,使用者會從 Serial Monitor 看到 "CCCCC...." 等字樣列印出來),需要配置額外的外部電路來確保該 UART 裝置必須在 MT7697 開機後才開始作用,如此才能保證 P6 的 bootstrapping 腳位不受影響。

因此當開發者不想犧牲 Serial 的 debug 訊息以及設計額外電路處理 Serial1 bootstrapping 設定時,使用 SoftwareSerial 即可方便快速地產生另一組 Serial (UART) 埠供連接裝置使用。

實作細節

SoftwareSerial 函式庫是基於 Arduino 的 SoftwareSerial 函式庫所開發,並將其中與硬體相關的暫存器讀寫操作替換為標準 Arduino GPIO 和 EINT 的 API 呼叫。雖然這會增加一些系統運作上的負載,但由於 MT7697 SoC 的快取機制以及高於一般 Arduino 開發板的 CPU 運作時脈,SoftwareSerial 函式庫仍可以支援至 115,200 的 UART 傳輸 baud rate。若開發者對進一步加速此函式庫的實作有興趣,可參考 GitHub 上相關討論,瞭解如何使用 MT7697 暫存器操作來實現 GPIO 功能。