BLE Connection Security Protocol (防非客戶連線協定)

本功能碼(Func Code 0x01)專用於藍牙連線後的安全身分驗證。未通過登入驗證前,MCU 應限制其他功能碼(如 0x03 讀取暫存器)的執行權限。

  • 1 基本 Input 封包格式 (S/W Master ➔ MCU Slave)

欄位名稱 (Col. Name)長度 (Byte)說明 (Description)範例 (Hex)
Start Code1固定為 0xB0B0
Func Code1安全驗證功能,固定為 0x0101
Action Code10x00: 登入驗證
0x01: 修改密碼
0x02: 重製密碼 (重製方式待討論)
00 / 01 / 02
Payload可變依據 Action Code 帶入對應之密碼二進位資料XX XX …
  • 2 基本 Output 封包格式 (MCU Slave ➔ S/W Master)

欄位名稱 (Col. Name)長度 (Byte)說明 (Description)範例 (Hex)
Start Code1固定為 0xB0B0
Func Code1安全驗證功能,固定為 0x0101
Status1執行狀態結果,依照 BLE Connection Exception Communication 定義01
Action Code1呼應 Request 的 Action Code00 / 01 / 02
Payload可變預留資料欄位XX XX …
  • 3 實體操作通訊範例 (以初始密碼 00 00 為例)

    1. 連線後登入驗證 (Action: 0x00)

    • 軟體發送 (Input): B0 0x01 0x00 [00 00] (00 00 為密碼)
    • 驗證成功 (Output): B0 0x01 0x01 0x00 (Status 01: 成功)
    • 忙碌/錯誤 (Output): 已通訊例外處理

    2. 登入成功後修改密碼 (Action: 0x01)

    • 軟體發送 (Input): B0 0x01 0x01 [00 00] [01 23] (原密碼 00 00 + 新密碼 01 23)
    • 修改成功 (Output): B0 0x01 0x01 0x01 (Status 01: 成功)
    • 忙碌/錯誤 (Output): 已通訊例外處理

    3. 忘記密碼之重製機制 (Action: 0x02)

    • 通訊與實體觸發邏輯: 【細節待討論,如有辦法希望已硬體重製為主】
    • Canbus modbus

BLE Connection Exception Communication

  • 1 基本 Output 封包格式 (MCU Slave ➔ S/W Master)

欄位名稱 (Col. Name)長度 (Byte)說明 (Description)範例 (Hex)
Start Code1固定為 0xB0B0
Func Code1觸發例外之原功能碼(如 0x01 或 0x03)01 / 03…
Status1執行狀態結果:
0x00: 失敗 / 系統忙碌 (False/Busy)
0x01: 成功 (True)
0x02: 錯誤 (Error)
02
Payload可變【錯誤原因定義碼】:
0x00: 設備端忙碌(無法回應 Busy)
0x01: 非法功能碼 (Func Code 錯誤)
0x02: 非法暫存器位址 (Address 錯誤)
0x03: 非法資料數量 (Quantity 超過 125)
0x04: 未經授權 (未登入即企圖操作功能碼 0x03)
04
  • 2 實體操作通訊範例

    1. 未登入驗證,就企圖發送 Func 03 讀取暫存器 (越權操作)

    • 軟體發送 (Input): B0 03 10 00 00 1B XX XX
    • MCU 回應 (Output): B0 03 02 04 (解讀:Func=03, Status=02錯誤, Payload=04未經授權)

    2. 發送 Func 03 讀取暫存器,但數量超過上限 125 (長度錯誤)

    • 軟體發送 (Input): B0 03 10 00 00 C8 XX XX (Quantity 200)
    • MCU 回應 (Output): B0 03 02 03 (解讀:Func=03, Status=02錯誤, Payload=03長度超標)

    3. 進行 Func 01 登入,但密碼輸入錯誤 (驗證失敗)

    • 軟體發送 (Input): B0 01 00 [99 99] (密碼給錯)
    • MCU 回應 (Output): B0 01 02 00 (解讀:Func=01, Status=02錯誤, Payload=00忙碌)