2023年9月26日 星期二

藍芽開發與PIXART

BT版本與各階層功能

藍芽產品大量用於消費性產品,例如心律手環、鍵盤、滑鼠、遙控器、遊戲手柄、具語音輸入等應用。依照時間進程可區分為。

  • BT < 4.0:經典BT(Bluetooth)。
  • 2012:BT 4.0:開始稱為BLE(Bluetooth Low Energy)所以,現在稱BT,就是BLE了。省電、3毫秒低延遲、AES-128加密,運用於計步器、心律監視器、智能儀表、傳感器物聯網。
  • 2013 BT 4.1:與LTE自動協調、提升設備連接速度、支持多設備同時連接。
  • 2014 BT 4.2:速度提升2.5倍、數據量於10倍、安全性提升。
  • 2016 BT 5.0:低功耗、速度提升X倍、室內定位輔助結合Wi-Fi精度小於1米的室內定位。
下圖是BLE與OSI相互對應。

從應用層面來說,只要照顧最上面幾層即可。藍芽ARM開發 連結  連結

  • Attribute Protocol (ATT):所有資料傳輸經過這層實現,定義了Client和Server屬性;Client就傳Request,Server傳response。每個屬性都有一個唯一的UUID,屬性將以characteristics and services的形式傳輸。
  • Generic Access Profile(GAP):設備搜尋、連接建立,定義了Role、Modes、Procedures及Security。
  • Generic Attribute Profile (GATT):GATT中定義ATT層的Service (服務)與Characteristics (特徵)兩個屬性。
  • App:由PROFILE和應用組成,完整列表(連結)。比較基本有下面幾個。

    • General Access Profile(GAP)
    • Service Discovery Application Profile(SDAP)
    • Serial Port Profile(SPP)連結,PIXART有範例。但IOS不支援。
    • General Object Exchange Profile(GOEP)
    • Human Interface Device Profile (HID) 連結

硬體:藍芽模組

手邊藍芽模組大多是純藍芽片,透過UART和主要MCU溝通:
搭配ARDUINO使用
不知哪來的開發板(連結)
小型化模組的開發板,透過JTAG線連結。

TI和NODIC都有類似產品,
AdaFruit:(連結 連結)。架構上,分別是Arduino和單獨的BLE晶片,兩邊用SPI溝通。
高通:QCA402X。

PIXART(原相)

PAR28XX系列(連結)。例如PAR2802QN,是基於Arm® Cortex® M0 核、512KB Flash、176KB SRAM以及10bits ADC、IR transceiver、Voice/Audio、7816 Interface、Cap Detector。藍牙低功耗5.2的SoC。

PIXART套件開發

工具:客製化GATT,確認專案的GATT是否需要修改,若有需要可透過下面AP進行修改,透過軟體可以快速生成C code,再導入至FW中。

點開profile左邊的箭頭,並找到 HID Service,展開 HID Service後修改或增加 characteristic、report descriptor、Report Value等等,完成後,直接產生對應的head file。

修改廣播的內容&裝置名稱

PXI_LINK Tool,EVBUtility.exe可透過UART 進行FW燒錄、規劃Flash空間、GPADC及RF相關測試以及各類參數設定。

PixArt OTA Utility,可透過BLE OTA更新FW。

量產燒錄器FWDLB,將PCBA與FWDLB連接上,按Reset(Start Button),即進行燒錄。


PIXART程式設計

開發環境為Keil uVision 5.38,安裝檔案MDK538a。安裝完畢後安裝PAR2860補丁,將PAR2860_Flash_V01.FLM 複製至C:\Keil_v5\ARM\Flash內(將之前PAR2860_Flash_Vxx.FLM舊版本移除)。設定ICE內容,共有三項。



Keil若製做的檔案超過限制,必須連結license server,設定位置在file->license management->flexnet license 下面,按EDIT,加入8224@Server07!  (因為要特殊IP才能執行,不怕,DINO維護)前面自然會打勾。

如果沒有連結FlexNet會有錯誤訊息

Keil自帶範例程式:

目前程式位置
C:\Users\KayjeanKu\Documents\will\PAR2860_SPP_20230928\PAR2860\ble_uart_service\Keil
專案檔案par2860_uart_service.uvoptx
程式位置在 PAR2860\ble_uart_service\main.c
功能順序分成四個步驟
  1. 收到MOBILE訊號
  2. 丟給MAIN MCU
  3. 收到MAIN MCU傳來的訊號
  4. 丟給MOBILE
    ble_init
        GAP_Evt_Callback
            //在螢幕上顯示PIN號碼,是個很特別的需求
            CommMgr_MCU_Command_Display_PIN

    ble_att_cb_set(&ble_att_read_cb, &ble_att_write_cb);     類似callback概念
        ble_att_read_cb
            //回饋BLE訊息
            pxi_gap_XXX
        ble_att_write_cb
            if(evt.hdl == VENDOR_DATA_WRITE_VALUE_HANDLE)
                //Receive LFSSPP frames from BLE
                //1 收到BLE傳來的訊息,解封包後,放入QUEUE
                ProLFSSPP_BLE_Rx_Process(evt.data, evt.sz);
                    ProLFSSPP_BLE_Ack_Process
                    //看起來,只要ProLFSSPP_BLE_Ack_Process
                    //就會在網路層次先終止這次對話
                        ProLFSSPP_BLE_Ack_Send
                    ProLFSSPP_Frame_Check
                    //把資料丟進QUEUE中,若要修改程式,不丟入QUEUE
                    //換成重新發起新內容
                        CommMgr_SPP_Request_Process
                            CommMgr_Command_Push_Queue
                                CommMgr_Command_Pop_Queue_By_Owner
                                CommMgr_IS_Owner_PROCESSING

設定command處理
    ProLFSSPP_Init();
    CommDisp_Init();
    CommMgr_Init();

進入大loop
    _sys_evt_task();
        CommMgr_IS_Owner_CMD_SEND
        CommMgr_Execute_Mode_Control_done
            CommMgr_MCU_Command_Mode_Control_Send
    _ble_evt_task();
    vendor_io_ctrl_task();
        //3 從MCU收到資料,確認要填滿
        CommDisp_UART_Rx_Process
            CommDisp_Frame_Check
                CommDisp_Data_Shift_Forward
                //Receive response message from main MCU
                // and pass the message to each module according
                // to previous send out command owner.
                CommMgr_Command_Rx_Response
                    CommMgr_SPP_Response_Process
                        ProLFSSPP_BLE_Response
                        //這邊將資料準備好了
                            //封裝好準備要送出的資料
                            Common_Build_Frame
                            //4 將資料送給BLE
                            ProLFSSPP_BLE_Response_Send
                                ble_tx_data
                    CommMgr_MCU_Response_Process
                    CommMgr_Command_Pop_Queue

        // Process UART TX 準備寫資料給MCU
        //2 將資料送給MCU
        CommMgr_Command_Tx_Process
            CommDisp_UART_Tx_Process

    pxi_ble_sched_execute();

BUILD
執行的位置Project->Build Target

DOWNLOAD
執行的位置,DOWNLOAD和BUILD是兩回事,並不會驅動BUILD,所以是分開來運作。

下面狀態列會顯示下載和驗證進度,(看不出來燒錄成功會有什麼訊息)


計畫是,能讓手機APP和BLE溝通
所以要改程式,收到之後立刻就傳出去

未來MCU只管對BLE發出訊息,不管接收
就沒有MCU被卡住睡覺的問題
那是另外的事情

把MCU的TX RX拉出來,單獨和目前這塊版子合在一起


藍芽開發板
1.接入USB電源,兩個燈閃爍。
2.接入ICE。(蝦皮買的ULINK2 realview)燒錄,對應的ICE設定如上。

移動裝置APP

Android

參考(連結)

IOS

參考(連結)

2023年9月24日 星期日

自家平面作品建檔

家中歷來累積的平面藝術品都散漫的擺放著。趁著這次要取出特定一張,認認真真的將其分門別類和拍照建檔。

最大宗當然是老婆攝影作品(參考網站連結)。中大型框。

共16幅

類似下圖中型裱框有15盒。

微小型框。

沒有裱框,改以風扣板呈現。

無框作品。


非攝影類,例如油畫、燈箱、網版。


藝術家作品,年畫系列裝框共18幅。看似很多張,仔細比對,還缺少四種動物,鼠、兔、龍、豬。

年畫紙本共10幅。


藝術家作品,有裱框共24件。

藝術家作品,無框,參雜月曆和海報,不純然是藝術品,21張。


婷的部分,蒐集中,6張。

我的貢獻。


2023年9月8日 星期五

美濃100K馬拉松前導

年底(12/24)要參加高雄山城100公里馬拉松。隨著時間逼近,開始領略到恐懼。而我每次的態度都是,與其恐懼不如直接面對,直接到現場練跑。早上六點由美濃出發,天色已大亮,想像下次來會是冬日五點清晨,不免有些緊張。

經過月光山隧道時已經暖身完畢,出隧道即是杉林區。

杉林區

下面照片是杉林區田間一景,雲霧籠罩的月光山,山下有許多羊腸小徑值得去看看,只可惜這次是探路且後續狀況不明,不敢造次。

離杉林區街區不遠處有小愛小林村。此處是2009年8月8日莫拉克颱風,大豪雨帶著土石流淹沒楠梓仙溪上游小林村後,由慈濟協助重建的社區,當時還因為宗教信仰問題受到關注。希望日後有機會參觀。

過市區不遠有段林間小路

路邊常出現葫蘆,似乎是有意推廣

右側門樓上特殊裝飾

路邊可愛輪胎裝飾

繼續前進是“火山橋”,附近有自動露頭的天然氣火山景點。除景點外,此處也是1871年4月1日蘇格蘭攝影師約翰.湯姆生(John Thomson)踏入南台灣拍攝平埔族時內山環線的起點。資料顯示,他4/13抵達火山,之後依序到甲仙4/14,荖濃4/15,六龜4/16,最後一日經過山中聚落枋寮下山回到此地4/17共歷時五天。(連結 連結

甲仙區

山景更為立體,先前神龍見首不見尾的楠梓仙溪露臉次數也更多。路旁偶爾會有廟宇和房舍,尤其有“雜貨店”,漆黑簡陋店面和沈默阿婆,好像回到了過去時光。

楠梓仙溪

經過甲仙大橋進入甲仙街區,此處左轉可到達那瑪夏區,我們要向前進入南橫至六龜,跑步前先進店內吃名產。

跑到一半來吃小奇芋冰。口感綿密,吃一口冰配一口水

甲仙街上仙人掌

甲仙與六龜分別是玉山南側這條山脈兩側靠河邊鄉鎮,甲仙側是楠梓仙溪,六龜測是荖濃溪。這當中十幾公里山路就是分水嶺。這個山頭海拔不高,但跑起來卻很吃力。當然可以將責任推卸為風景不特別,沒有壯闊山景(即使最高點白雲寺後的白雲山也就是個很普通的山頭),真正原因當然是訓練不夠。

甲仙常見到的超大麻竹筍

白雲寺

藝術感(鏡頭起霧)的南橫公路

南橫

六龜區

翻過山頭第一個村鎮叫荖濃,轉彎延荖濃溪向六龜前近。公路與寬闊河面相伴,穿行於兩岸陡峭山壁間。間或有梯田或小聚落散佈在河階地上,初看恬靜,但仔細再想就會懷疑究竟如何到達對岸呢?

荖濃溪中段

拍完才發現,即使是不同日期,取景地點完全相同

公路在荖濃溪左右岸切換時,都能見到幾座漂亮的大橋,其餘就是觀察路邊招牌,此處名為新發,房舍緊鄰公路,因為沒有整理顯得混亂,還有許多溫泉度假村和茶葉銷售廣告等,這些混亂的視覺經驗反而讓跑步不無聊。

新發附近常見標誌

算算也跑了六十公里,注意力開始渙散,一來因為道路較窄且來往車輛多,避車空間窄顯得危險,同時因為一陣暴雨,今天的練習就在六龜劃下句點。以時間分析今天跑的不好,主因是這半年訓練不足。直到十一月底再度安排,由甲仙橋開始先重疊了十幾公里,由新發附近再接續後半未知旅程,在大山大水間龜速邊跑邊拍。

當心蝴蝶

層巒疊嶂

遠眺十八羅漢山



荖濃溪布農語laku laku,意為兇猛不定的河水

路上屍體系列,折翼天使

活動路線切入天台山神威道場,沿途已經是第四個特殊宗教場地了。

  • 甲仙天臺山靈隱寺
  • 六龜清涼山護國妙崇寺(連結)
  • 六龜山地育幼院
  • 天台山神威道場,占地遼闊,房舍金碧輝煌。
天台山一貫道場

新開桃花心木林

美濃區

美濃是典型的農業山城,平原區沃野平疇,水利渠道遍佈,種植著大片稻米。北側和東側是山嶺圍繞。美濃溪由東北向西南沖刷成為平原區。路線在美濃繞了一大圈,後來索性用走的,除稻田外,有許多水蓮田。或許十二月底過來,就能看到採收。後續搭車回甲仙(連結)。

水蓮池

同場加映:茂林區

茂林射日英雄