2020年11月15日 星期日

STM32_USB_DIY(四) --- Custom HID (四) :Custom HID 簡單應用

關於USB 的 Custom HID 的系統應用當然有很多種,有些可以直接包在系統產品

開發的韌體程式中,也可以拿來當作產品開發時或量產生中的輔助工具(治具),

其實有許多產品本身的技術問題,也都還沒有太大的問題,但問題常常就是出在

產品開發過程中,如何除錯 Debug 或是與其他系統整合開發,過去那一種簡單的

一個系統產品就想吃天下的觀念已經慢慢離我們遠去了,隨著科技技術開發成長,

有很多產品都需要包山包海的,動不動就要甚麼物連網啊、上雲端啊...

當然隨著這些系統產品的功能需求趨勢,如何提供一個使用者簡單容易上手的

操作介面或是一目了然的功能。就成了產品開發在市場上成功的重要因素了。

譬如:現在每個人都可以、很容易地從網路上資源找到相關技術內容或開放源,甚至像

你也不一定是要懂得電子電機系統的科班人員,就可以輕易地用 Arduino 弄出一套

煞有其事的科技產品雛形,甚至很炫的產品概念。雖然你可能會很不屑這些玩家,

但你也不得不承認這些或許你認為從真正科技產品開發的角度來說:難登大雅之堂。

但畢竟人家真的可以很輕易地創造出許多產品話題或從中取得許多創意與成就感。

是啊,你天天跟別人說:甚麼馬達控制技術有多難啊?你自己本身花了多久時光

歲月、投入多少資源設備與心血,才有今日的成果,但是呢?搞不好你至今從

這些成果中,都還沒有人家搞這些模組公版的獲利能力與營業額大啊。

反過來,人家不懂的老闆還揶揄你說:蛤?這個東西有這麼難?這麼貴嗎?

網路上不是有一大堆類似的東西嗎?你很難去解釋也好,很努力的據理力爭又怎樣?

你就是沒有一個簡單上手又親民的使用操作的產品開發導入上市的使用工具啊。

你想想人家為什麼喜歡用 Arduino ?人家就是一個簡單的IDE,又有到處可以下載

套用、隨插即用的Library 程式庫啊。真正厲害的工程人員,是利用自己本身專業

的技術,把產品技術包裝成一個簡單上手,人人皆容易使用的產品啊。

你一天到晚吹噓本身的產品技術開發有多厲害?還真的不如趕快花點心思想想:

如何包裝你的技術與產品吧。尤其是在現代網路資訊發達,訊息公開,著重網路

行銷概念的時代裡。沒有這些包裝行銷事沒有用的啦。

在這裡我就順便提一下關於馬達控制技術開發的產品概念,我不是有一位優秀的

大學同學,四年就在國內台清交拿到一個碩士加電機博士學位了,專門就是搞馬達

相關技術的,後來他現在已經是專業的工業馬達的設計、生產製造廠商。

我之前有好奇的問過他:你怎麼沒有想到自己搞馬達控制器設計開發呢?

他跟我說:"同學啊,你以為我以前沒有想過?做過嗎?但我跟你說:這些專業的

馬達控制器要賣到市面上時,就得要取得許多產品認證,不光光只是控制器本身

的問題而已,還包括:電源供應的安規認證等等。在技術上也不難啊,但是那些

繁縟的認證流程與費用,都不是一家新創或是小型企業可以承擔的。而且我跟你說:

24 V 一個規格認證,48 V 又是另一個規格認證等等...光這些不同的電壓規格認證

一年要花多少錢?你知道嗎?所以他就乾脆回歸把馬達的設計生產搞好比較重要,

至於馬達控制器?市面上國內外真的有太多供應商了,你只要找到一兩家聲譽好、

品質穩定的廠商合作就好了,反正這些東西也都是量大的標準品了。"

所以啦,工程師們你真的要好好的想一下,不是你技術好就可以在市場存活的,

真的厲害懂得生存之道的工程師才能真正的永續經營啊。

所以當你碰到類似這樣子的市場行銷概念時,你就得要好好的想想:我應該如何

透過我本身的技術來包裝我的產品?所以你是搞系統韌體的,你就得要懂得透過

一些顯而易見的APP 軟體來包裝啊。

以下我就是用一個簡單的Custom HID 來包裝一個簡單的系統應用問題。

但我首先交代一下關於 STM32 在USB 4.1.0 的函數庫的問題,

我在 STM32_USB_DIY(二) --- Custom HID (二) :系統開發前置作業及USB中斷

有稍微提到STM32 原廠所提供Custom HID 範例程式中的HID Report Description,

其中第一項關於 USAGE PAGE 的宣告:


後來我看一下就覺得怪怪的?去查了一下其他不同廠商的範例程式,甚至他們ST 本身

其他版本的範例,才發現這個版本的範例是錯的,不信的話,你也可以使用一個

HID Description Tools (DT) 來檢視一下:以下是他的操作方式。



我們就可以發現他第一項 Usage Page 的宣告內容是不一樣的,這是因為一般USB 的

宣告內容是採用:Little Endian 方式的。你說原廠原來的這個宣告有沒有問題?

也還好啦,只是你自己要留意一下吧。但我想原廠這一版程式在這一部分應該有點

筆誤了吧。

接下來我們就用一個簡單的範例來說明一下Custom HID 的系統應用吧。

我們都知道現在 32 Bits MCU 都有提供豐富的周邊配件模組,雖然都不一定

可以提供很精準的產品應用,但多多少少也省去許多系統應用的工作,

其中一項就是所謂 RTC (Real- time Clock),透過許多系統參考範例,就可以讓你

在系統上獲得一個類似萬年曆的時鐘功能。這些網路上許多範例程式與函數庫

都可以讓你省去許多關於萬年曆的運算與功能實現,但在系統上有一個比較討厭的

地方:就是如何調整、設定系統的時間了。在許多範例程式裡,大部分都是透過:

UART 來簡單的示範一下,但很可惜的是:我們在系統上的通訊介面也不光光只有

系統時鐘設定而已,而有可能還有許多系統內部的設定值,所以我們就會在系統

上採用一個比較通用完整的通訊介面與傳輸協定來幫我們完善這些看似與系統本身

功能無關,卻又不得不做的系統量產與周邊功能支持的工具。而這個周邊功能設定

軟體工具就是可以透過 USB Custom HID 來完成了。

那你說:原來的UART 不好嗎?不是不可以,而是當你這些通訊介面或是傳輸協定

隨著系統複雜度越來越多時,你就得自己慢慢去整理完善UART 的資料封包定義。

這些不但複雜難搞,一下子又要事先定義所謂的 115200,N,8,1 的。

一下子要不要Checksum 來保障資料完整準確?萬一又要USB 裝置主動回報數據資料的。

這些瑣碎的事情搞起來,不只寫韌體的人煩,就連要跟寫PC 應用軟體APP 的人溝通

更新同步,就更累了。所以我們就可以透過USB Custom HID 的 Set/Get Feature 來設定

RTC 內容,也可以透過 USB Interrupt In 來隨時回報目前Device 系統內的RTC 資料。


 你看:上圖我們就可以寫一個美美的USB 系統應用工具軟體了。

不但可以用很類似我們系統上常用 2x16 LCD 模組,模擬顯示目前裝置系統上的

RTC 內容,我們隨時還可以透過一個簡單的按鍵---RTC Sync. 來調整USB 裝置上的

時鐘與我們PC 電腦的時間一致,這樣子不管是工廠生產線上的人使用方便,

也可以釋出給市場客戶一個簡單上手的時鐘設定問題嗎?大家也可以看到我也準備

用這樣子的通訊介面來讀取裝置的系統上的版號與更新系統韌體功能,

這樣子不是一個很簡單容易上手的系統工具與軟體APP 嗎?

---

所以啦,其實現在寫MCU 應用韌體都不是很難的一件事,包括找到範例程式或是周邊

應用模組等,但在系統開發上,最難與最麻煩的就是該如何架設這些周邊的輔助開發

平台?對我們韌體或系統開發者來說:是除錯Debug 工具;對公司或工廠是一個輔助

生產品管的APP 軟體治具; 而對於市場客戶來說:是一個簡單的系統維護與升級的

工具。因為畢竟所有的產品開發與後續升級與改版都不可能一次就可以到位的。

換個方式說:你自己是消費者,現在也都希望拿到的產品都希望未來都有功能升級

或品管保障的東西啊。你產品開發覺得搞這些很煩、也很累。但這也是沒辦法的。

現在有很多產品就是這一種趨勢,你想靠技術賺別人口袋的錢,你就得搞這些事。

老是光講自己的技術有多好?產品有多高科技?有甚麼用呢?

對市場客人來說:便宜簡單容易上手,才是王道啊。只是你自己得盤算一下:

要搞這些,完善這些事情時,你一個產品要準備多少人力?要整合那些技術資源?

要公司花多少錢?大公司多少?你小公司要多少?這些才是產品勝敗關鍵啊。

你自已去跟老闆說啊:搞這些我不會,老闆您還要找寫軟體APP 的人,也要懂

USB 介面通訊的人...而這些人也還得能跑工廠,把APP 架在生產線上,

而且寫APP 也最好能搞得美美的畫面,讓消費者使用起來賞心悅目的...

是啊...出張嘴我也會啊。寫韌體,搞軟體或產品開發專案維護難不難?

當然不難啊。天下所有事情的道理都是一樣的啦。

沒有留言:

張貼留言