PixArt PAR2832藍牙滑鼠韌體開發筆記

PixArt PAR2832 核心採用32 bits ARM Cortex-M0 並整合藍牙低功耗5.2的SoC,且內嵌512KB Flash 及 40KB SRAM,具備硬體滑鼠按鍵除彈跳、硬體滾輪編碼、硬體LED閃爍PWM、10 bits ADC、SPI、I2C及UART等,能減省韌體開發所需時間。在原相所提供之原代碼上進行韌體開發時之心得記錄如下。

1. 韌體開發環境及原代碼:
開發環境使用Keil uVision ,主程式如下圖所示。
韌體開發環境及原代碼

  mouse_init 中對滑鼠按鍵、滾輪、LED及Sensor 做初始化,或需要新增或修改自定義功能所需的I/O,可在此作修改。
滑鼠初始化

2. Power state
因做為無線滑鼠需要考量功耗,故在韌體中對此需要做一些機制,以達到省電的目的。原相的原代碼中將狀態分成三種,分別為ACTIVESLEEP POWER DOWN
透過下圖說明三種狀態的切換條件及目的:
  

idle 1ACTIVE下當預設滑鼠超過100ms無任何操作後切換到SLEEP
idle 2SLEEP下當滑鼠預設超過三分鐘無任何操作後切換到POWER DOWN
power down在ACTIVE下當藍牙廣播結束、藍牙斷線下或偵測到低電量時切換到POWER DOWN
active 1SLEEP下偵測到滑鼠操作包含按鍵、移動或滾輪…等操作後切換至ACTIVE
active 2POWER DOWN下偵測到滑鼠操作包含按鍵、移動或滾輪等操作後切換至ACTIVE

2-1. ACTIVE
透過下圖說明ACTIVE 下韌體主迴圈及TIMER的流程及其功能。
    

    framework_dev_process_fn藍芽模式下處理藍牙相關event ,其中ble_evt_type & _SYS_EVT_TYPE如下方二圖所列。
    

device_rf_usb_swtich_event_handler預留2.4G/BLE 雙模使用。
pxi_ble_sched_execute Flash operation task。
ota_scheduled_task藍牙OTA處理。
_check_mouse_data:偵測滑鼠按鍵及取得Sensor 資料。
_check_pairing_button透過I/O 偵測,若該按鍵預設被按下超過三秒則進入藍牙配對模式。
_ble_cpi_check預設按壓滑鼠左鍵加右鍵超過五秒,可切換CPI。目前原代碼中可支援原相PAW3220 (CPI 預設可切換1200/1600/2400/3200)、PAW3335 (CPI 預設可切換400/800/1600/2400/3200/6400)或PAW3370 (CPI 預設可切換400/800/1600/3200/6400) 此三種sensor,可依照產品需求做選擇。


Battery detection偵測電壓百分比及過低電壓判斷。

2-2. Sleep
當切換到SLEEP 下藍牙latency 開啟,而TIMER 會每間隔一秒wakeup 起來預設計數超過三分鐘後,切換到POWER DOWN。
    
2-3. Power down
當切換到POWER DOWN 時,藍芽關閉,且TIMER 停止。
    

3. 藍牙相關設定:
在ble_init中可以設定GATT profile、Security parameters、Connction parameters…等。細部可參考下圖:
  

  廣播設定可於ble_adv_start 做修改。
  

  若需要新增或修改滑鼠的report descriptor 可以在韌體中修改,並透過原相APP修改report value,修改完成後透過APP轉出C code 到Keil 環境中。
  

預設滑鼠的上報格式如下表:

Byte 0

Byte 1

Byte 2

Byte 3

Byte 4

Byte 5

Byte 6

Byte 7

Report ID 2

Button
(BitMap)

X

Y

Wheel

AC Pan

 
4. 總結:
整體而言,原相已提供相當完整的原代碼及APP,能提供韌體開發人員針對所需要功能做細部修改即可,大幅度減少韌體開發時從無到有的過程。後續如有機會再針對其他部分做細部說明。

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論