接下來的文章中,筆者打算來分享這個專案的建立過程中所需的知識點,以及筆者在這個專案中做過的事。今天我們來認識一下跟 ChameleonUltra 溝通的 Protocol 吧!
ChameleonUltra 硬體支援一種名為 Serial 的 Protocol,可以用來傳送資料給硬體,或是從硬體接收資料。然後在硬體上會透過 UART to USB 的晶片把 Serial 轉換成 USB,讓我們可以直接透過 USB 跟電腦或是手機溝通,並且也會透過 UART to 藍牙 BLE 的晶片把 Serial 轉換成 BLE,讓我們可以直接透過 BLE 協定進行傳輸。
通常 Serial 的最小傳輸單位是 Byte,但 Serial 有可能會把一筆資料分成多次傳送,所以需要由硬體及應用程式共同約定一個傳輸規則,明確的定義資料開始以及結尾。但由於硬體的效能有限,為了減少資料量並加快傳輸速度,ChameleonUltra 是以自定義的資料格式 (binary) 進行傳輸。
ChameleonUltra 所定義的資料格式如下:

1 Byte,每一筆資料會以 SOF Byte 0x11 作為開始1 Byte,SOF 之後會緊鄰著 SOF 的 LRC Byte (Longitudinal Redundancy Check) 0xEF
2 Bytes,格式為 Unsigned Big Endian,代表想要執行的指令。2 Bytes,格式為 Unsigned Big Endian,代表執行結果,如果是應用程式傳送給硬體的請求則固定為 0x0000。2 Bytes,格式為 Unsigned Big Endian,代表 Data 的長度,最大值為 512。1 Byte,由 CMD、STATUS、LEN 三個欄位計算出來的 LRC Byte。LEN Bytes,根據命令來解析所需傳送或接收的資料,最大長度為 512 Bytes。1 Byte,由 DATA 計算出來的 LRC Byte。資料的總長度為 LEN + 10 Bytes。
在使用與傳送 Serial 的資料時,需要很注意 Endian 的問題,如果想要深入了解兩者的差距,可以直接透過搜尋引擎查詢更多資料。
由於電腦通常都會以 Big Endian 儲存資料,但是這類嵌入式系統通常都會使用 Little Endian,所以都需要特別注意是使用哪一種。在開發 ChameleonUltra 的過程中,其實有發現大量的 Big Endian 與 Little Endian 混用的問題,但因為硬體的現況已經是這樣,所以就只能照目前的現況來傳送及接收。