2024年11月30日 星期六

老工程師的技術生活(三十七)--- UROMTER產品維護與支持 (完)

 今年年初第一季末時,寫了UROMTER 的在Win7 系統後的如何利用WINUSB

驅動程式,來安裝客製化的USB 驅動程式,這部分所謂的USB 驅動程式指的是

支持所謂客製化(用戶自行定義的) USB Bulk In/Out 的傳輸介面,若你不想用這一類

的USB 驅動程式的話,你是可以用作業系統內定支持驅動程式的 HID 傳輸方式來

完成USB 在 PC 端的應用軟體開發。(HID 也是可以支持高速,每個Packet Size 為

64 Bytes 的格式,基本上傳輸速率也不差的啦。) 但因為我當初UROMTER 的系統

(韌體)開發,所採用的就是客製化(用戶自行定義的) USB Bulk In/Out 的傳輸方式,

所以我是沒辦法就得面對這個問題的。

很多人來我的部落格查看文章,就是了許多USB 系統應用問題,大家所面臨的

最大問題就是如果要同時開發USB 韌體與主機端(Host)的應用軟體時,該如何

學習處理,裝置端USB 韌體這部分有許多MCU 原廠都會提供參考範例,一般

學習比較沒多少困難,因為裝置端的USB 傳輸介面的Class 是比較單純的。

但主機 Host 就真的比較麻煩了,因為這些要牽涉到作業系統底層驅動程式的

函數呼叫,另外還要兼顧應用軟體端操作者的使用介面,你總不能還要像

DOS Prompt 命令列的方式來操作吧。做產品就是得完成這些該有的所有的

技術環節,我說過了:如果只是針對一些基本周邊或應用介面控制的話,

誰都很容易學習上手的啦,更何況現在網路資訊這麼發達。

就以我自己以門外漢學習主機PC 端的Visual Studio C 語言開發,幾乎完全

就是靠網路搜尋加上不斷的練習學會的,之前剛想學時,還跑去買一些相關

書籍,後來覺得就這種買書籍學習的方式,真的效率不彰,那是學校老師

拿來應付教學用的,像我兒子他們這一代,我看他們也很少買相關書籍

來學甚麼程式語言或是某種相關技術,我問過他們,他們也是如此回答我的。

因為畢竟現在科技進步一日千里,你還靠書籍撰寫編排,列印出版...在時效上

真的緩不濟急了啦更何況有很多實務應用上的技術開發千奇百怪問題,

書本真的很難面面俱到的交代得很完善,有時候看完整本書,也沒有找到

你所想學的或是想解決的問題點,你就真的不要再浪費那些金錢與時間了啦。

如果你不相信的話,就看我這篇文章就知道了。

----

我在前一篇 老工程師的技術生活(三十六) --- Bar 台逆向工程系列(一) 文章裡面

有稍微示範一下我新版的 UROMTER 如何在 Win7/Win10 下操作了。 

但實際上,軟體開發沒你想像的那麼單純簡單,我也是碰上一些問題的。

在新版軟體開發上,因為我是採用 WinUSB 驅動方式來處理USB 傳輸介面,

所以當然就是參考網路上關於 WinUSB 的範例程式啊。我當初找到的就是

Keil 所發表的WinUSB_Test 範例:USB Host Computer Applications

套用與跑起來也好像沒問題。 但你知道嗎?其實在 Visual Studio 的開發平台上,

是分成兩種開發環境:Debug 及 Release 兩種:


當然 Debug 方式是方便你在軟體開發上可以追蹤除錯的,但也是因為如此他的程式碼

架構上還是會跟最終釋出版本(Release) 有一些差異的啦。當然他們之間的程式碼大小也

差很多的:


當然啊。現在Visual Studio 自從 2008 版之後,他所組譯出來的程式碼都大很多了。 

簡單的程式碼動輒都是幾 MBytes 起跳的,當然啊,現在PC 主機的硬碟容量或

操作速率效能都不太在乎這幾個 MBytes 的啦。但如果可以的話,最終還是以

Release 版本釋出還是比較正統一點吧。

----

好了,我現在就來說明一下:為什麼買書回來學技術開發效果不彰的道理

以理論來說:這家 Keil 軟體公司歷史也悠久,名氣也不小,他敢在官方網頁

釋出範例程式應該也不會有多大問題吧。但他沒有想到的就是科技日新月異,

人家微軟的作業系統會升級,為什會升級?有很多問題就是碰到一些網路安全

或系統穩定性問題。Keil 這支USB Host Computer Applications 範例在新版的

Visual Studio (以我手上這 2017版上)是會發生:Debug 環境組譯出來沒問題,

但在 Release 版本會出問題。問題出在哪?


問題就在這一行: reinterpret cast 的資料型態轉換上。你可以在網路上搜尋一下,

有很多人會跟你說:reinterpret cast 在使用上是不太安全的。怎樣不安全?沒有太多

說明,但想也知道:這種強制性的資料型態轉換,肯定會有一些安全穩定性的問題。

所以在新版的VS 開發平台與作業統上,就給你直接出問題。

那你會問:那 Keil 的這支範例程式不會與時俱進的更新嗎?你說呢?搞不好當初寫

這支範例程式的工程師不知道已經跑到哪裡去了啊!😂😄😁😅

那你說:我又該如何處理呢?我又不是專業科班的軟體工程師,哪有可能就因為

如此一個問題就栽進去鑽研,然後還是跟別人誇說:我磨這個技術有多久啊。

工程師是解決問題,創造業績營收為主的,不是搞學術研究啊。要以最簡單的

方式來處理解決,不管白貓、黑貓,會抓老鼠的就是好貓啊!

 所以啦,你就得要自己想辦法處理吧:我們就來稍微研究一下有沒有其他方式修改?

其實原來範例程式是用所謂的 MultiThread (多緒)來處理 USB Bulk 傳輸功能,

我記得二十幾年前學USB剛入門時,我們公司的軟體工程師就教我說:要在VS 上開發

MultiThread 程式碼時,要小心一點...其實弦外之音就是:這種程式概念很難,

如果你學會了,你在VS 應用軟體開發上就應該沒問題了。(可以出師了啦!😂😄😁)

喔~要我在引用範例來講解VS 上如何使用 Thread 的?這可以用好幾篇也寫不完的啦。

還是老話一句:有用到時,實務上學起來比較快也比較有用。

要不然就跟買書回來學是一樣的啦。這跟有錢沒錢?有空或沒空?是沒多大關係的。

----

那我們就來追溯一下這行出問題的程式碼如何來的?

他就是應用軟體中,需要啟動 Bulk 傳輸時,啟動了一個 Thread 來執行 USB Bulk 傳輸

功能,理論上使用 Thread 來執行系統周邊介面的傳輸工作,是再自然不過的想法。

但有時候真的很難處理這個 thread 與原來程式的資料同步問題。更何況他這行使用的

_beginthread(...) 也是舊版的函數,再微軟的官方說明裡也是建議改用 _beginthreadex(...)

為什麼搞軟體這麼辛苦?就是在處理這些新舊版之間相容性問題啊。

而啟動 thread 之後,他就是去執行 USB Bulk 傳輸工作:


也就是回到 WinUSB 標準函數:WinUsbIF_WritePipe(....)

這裡的WinUsbIF_WritePipe(....)是 Keil 這支WinUSB_Test 參考範例所整理的,

他最終也是參考微軟標準函數

/*
 *  WinUSB Interface: Control Transfer
 *    Parameters:      dev:   Device index
 *                     sp:    Pointer to Setup Packet
 *                     buf:   Pointer to buffer containing data for stage data
 *                     sz:    Number of bytes to transfer in data stage
 *                     cnt:   Pointer to number of bytes transferred in data stage
 *                     ov:    Pointer to OVERLAPPED structure
 *    Return Value:    TRUE - Success, FALSE - Error
 */
BOOL WinUsbIF_ControlTransfer (UCHAR dev, WINUSB_SETUP_PACKET *sp, UCHAR *buf, ULONG sz, ULONG *cnt, OVERLAPPED *ov) {
  UCHAR intf;

  intf = WinUsbDevice[dev].FirstWinUsbInterface;

  // WinUSB Control Transfer supports up to 4KB data stage transfer

  if (dev >= MAX_DEV_NUM)                                              { return FALSE; }
  if (sz  >  4096)                                                     { return FALSE; }
  if (sp  == NULL)                                                     { return FALSE; }
  if ((buf == NULL) && (sz != 0))                                      { return FALSE; }
  if (WinUsbDevice[dev].Interface[intf].WinUsbInterfaceHandle == NULL) { return FALSE; }

  return (WinUsb_ControlTransfer( WinUsbDevice[dev].Interface[intf].WinUsbInterfaceHandle,
                                 *sp,
                                  buf,
                                  sz,
                                  cnt,
                                  ov));
}


所以啦,如果你對你USB 裝置端的 USB 控制流程韌體很清楚的話,根本就不用這麼

麻煩還要啟動 Thread 來執行  USB Bulk 傳輸功能,做得快不如做得穩啊:做USB 系統

開發的不二法門與經典名言啊

這只要在我們原來引用 WinUSB_Test 範例中的USB Bulk 傳輸功能改寫一下就好了。


根本不需要甚麼 thread 功能啊。簡單穩定啊。完成收工!!

好技術的工程師,不需要太多花俏的技術手法,就簡單的解決問題埋單就好。

有時候,你會覺得這種工程師怎麼可以這麼投機取巧?工程師就是要有一股堅持,

好好的把所有的技術環節搞懂,打通所有的任督二脈啊!那你說:老闆喜歡哪一種

工程師呢?就像我舉這個例子來說,你哪有哪來的那麼閒功夫時間,把所有手上

的開發工作全搞懂啊?更何況現在很多系統應用橫跨許多應用知識或不同的資源,

每個都要這麼堅持,你有多少時間與生命跟它們耗啊?

(PS:VC 平台上的三種Thread 做法:

1.CreateThread

2._beginthreadex

3.AfxBeginThread

我都有用過,但還要拿這些東西出來講,只是賣弄而已,寫也寫不完啊,

我過說了:網路上資料很多,我也從這些資料裡,學習應用的,你需要的

就是要有實際應用機會與真的有人願意付你薪水給妳時間就可以了

不需要我錦上添花的寫一大堆技術文章啊。況且我再怎麼努力也不是為了

去微軟或大公司上班啊,這些基本不會出問題的程式編寫技巧能力,應付

很多公司的需求都綽綽有餘了啦,最主要的還是要能夠變現生活下去啊!!

你就不要苛責我就怎麼隨隨便便用幾個函數庫就交代呼嚨過去呢?

要不然呢?你還要我花自己的時間寫書、賣書嗎?光接USB 應用開發

工作就忙不完了啊,況且年紀大了,留點時間好好的保養自己啊!!)

----

以下就是我整理的新版UROMTER 支持Win7/Win 10 升級版的安裝過程:

步驟一:插入USB 裝置時,右下角會出現不明 USB 裝置。


步驟二:在系統的裝置管理員裡,以手動更新USB 裝置驅動程式。

若出現Windows 安全性警告時,不用理他,直接繼續安裝就好。


步驟三:然後就可以直接點選應用程式。執行你所要的工作了。簡單上手。


比較好玩的是:當我整理上傳這些影片後。短短不到一天就收到國外有人詢問產品

採購問題(第二支影片下方留言處)。

所以再一次跟各位報告一下:搞技術很簡單,但做生意就未必一樣簡單。你要不要

備貨?就這麼一兩單的需求,你要如何處理?你覺得你該收多少費用(包含包裝處理,

及寄或托運等...)

要能做技術開發,也要懂得變現收入,才是王道啊。寫寫技術文章,出書授課等,

其實能賺的都是非常有限的啦。到底開公司是要孤鳥一隻當老師呢?還是要雇用

業務員工,安排產品生產出貨收款當老闆呢?看到這裡時,大家可以再想一下吧。

----

結語:我不是很聰明的工程師,學習很多東西也都是要重複反覆研讀資料與練習,

我之前說過:我真的看過真正厲害的那些台清交畢業一流的工程師,就像你在

學校碰到那些學霸一樣,你再怎麼努力加油,就是還有一些差距的,

但我自己就懂得如何利用手上的資源或所能吸收到的知識與能力,來給自己

創造一些機會,畢竟再厲害的人也是跟你我一樣:一天只有24 小時,也只能

專心做一件事(工作)而已。這兩天的科技新聞:「我已有工作」!!

真的不用太羨慕別人,或想學甚麼偉大的技術或學問,你最需要的其實

就是先建立好的邏輯推論思考能力從市場需求或未來趨勢及各方面你所能

掌握的資源,善加利用的好好發揮它們。工程師不要有太多偏執的技術心結,

有時候真的跳脫這些刻板的宅男工程師的性格,光倍速的知識爆炸的時代,

你也已經不是在校的學生了,你該如何有效的學習新知,而不是還是那一套:

買本書,花錢去上課,慢慢研讀,再一步一腳印的學技術,既然在學校已經

錯過了,那就是錯過了,不要再眷戀了,而是趕快給自己找個資源或契機

給自已一個鞭策自己前進目標的機會:就像我一樣,想學USB ?

那就找個USB 應用產品:UROMTER 動手去做,學著看電路設計,寫寫

USB 韌體,網路找一些主機 Host PC 端的USB 應用範例來逼自己硬著頭皮

寫寫 Visual Studio 平台應用程式。東西弄完整漂亮一點,能拿出來賣,就想

辦法找個通路銷售,只要有變現銷售業績成就,自然就有信心與學習動力了啦

就像你上班一樣:老闆說:如果有人可以搞定某些關鍵技術的話,我就

給他加薪...重賞之下,必有勇夫啊。

給自己設定一個類似的情節吧。我可以,我相信你也可以的啦!!

一年不行,兩年?五年或十年?等你累積與掌握足夠全面的相關技術與資源時,

你就懂我現在這種"無欲則剛"的心境,搞USB ROMTER 給他賺一波,

再來給他搞個得獎的 CDI 點火控制器...隨時都可以上手的USB 系統整合平台:

可以拿來開發產品,也可以接案子:不管是系統韌體或Host PC 端應用軟體,

也可以拿來做相關產品的驗證、生產品管治具等。只要你是有待過大公司、

工廠或研發單位的工作的,你就懂我在說甚麼了:

"山不在高,有仙則名;水不在深,有龍則靈。雖是陋室,惟吾德馨"

---這句話的另類解讀:只要是市場有需求的普羅技術,就是你的生存機會。

做技術開發,真的沒有很厲害、也沒有那麼偉大的啦。分享給你!

----

最後附上UROMTER 支持 Win7/Win10 的驅動程式與應用軟體下載點:點我!!

(如果你手上有我這個產品的老客戶的話,也可以直接下載更新,硬體完全相容)

補充說明一下:這個軟體在應用上還是有一些限制的,就是中文路徑或檔名

我不敢確認完全沒問題喔~人家Keil 的 uVision 也都有類似的問題,我只是一個

小小工程師,我也沒把握可以解決這作業系統在不同地區語言的相容性問題,

請多多見諒吧!

37 則留言:

  1. 補充文中所提的一件事:
    "我真的看過真正厲害的那些台清交畢業一流的工程師,就像你在
    學校碰到那些學霸一樣,你再怎麼努力加油,就是還有一些差距的..."

    如果你是老闆你會怎麼做呢?
    很簡單﹑當然就會好好的照顧這些做事起來事半功倍的人:
    如果他是做軟體開發的,老闆會找硬體工程師支援它所需的硬體平台;
    如果是設計開發的,他所使用設備或資源是最好的...
    ...
    反正老闆是不會讓這種人,同時又要搞硬體、又搞軟體或設備資源的...
    所以我才說:我們就是得勤能補拙,才有機會。
    好的公司組織運作就有得有好的資源分配,這才是當老闆該做的。

    回覆刪除
  2. 請問用 USB-CDC 方式會遇到什麼問題? 或是有什麼限制 ?

    對寫 PC App 的工程師來說, 從code 看, 就像是存取 UART 裝置一般,
    (雖說實際仍是走 USB 協議), 應用方面是跟自家電路板(設備)對接,
    不會與市售設備連接

    謝謝

    回覆刪除
    回覆
    1. 應該說 存取 "virtual com port"

      刪除
    2. 關於 Virtual com port,在PC Host 端的APP 就是一般
      傳統Serial Port 的介面,就是以前傳統的 COM1/COM2...

      只有如何從COM Port 如何跟 USB 裝置的連結而已。
      就是如何偵測你的USB 裝置是跑到哪個 COM port ?
      這部分我之前有一篇文章體稍微提到做法:

      USB to UART (RS232/RS485) 故事與應用(四) ---Host 端軟體整理
      https://chamberplus.blogspot.com/2024/02/usb-to-uart-rs232rs485-host.html

      而既然是走 COM port 就沒有所謂的任何客製化的東西,
      頂多就是你的串列傳輸內容封包(Packet)如何定義而已。
      別人都是可以透過一些分析軟體可以解析的。

      至於PC Host 端的APP 軟體,你也可以參考網路上一些
      比較有名的參考範例,譬如:CSerialPort
      (其中就是 itas 的版本,最早好像是外國人寫的,
      然後大陸那邊的工程師一直優化這一部分...)
      不過,他還是採用 MultiThread 的架構做法。
      一般剛入門的,或比較少寫這方面程式的人,
      還是有一點挑戰性的啦。

      這是很基礎的Com Port 範例,但如何寫進你自己的APP ?
      哪一種平台?或是其他的?那就得看你自己的需求吧。
      我指的是:要不要用Visual Studio 的MFC 或其他的平台啦。

      希望這些資訊對你所有幫助。
      感謝你的留言。

      刪除
    3. 感謝說明

      稍微解釋一下應用情境,
      MCU 列舉成 CDC USB device 裝置, 不使用 UART TTL to USB 這類 USB converter 與 PC 端通訊,
      對於寫 PC App 的工程師來說, 就如同存取傳統的 Com port/ RS232 裝置,

      FW code 可以在 USB PRODUCT STRING 定義更改名稱,
      每次PC App 開啟 時, App 會對電腦所有的 com port 進行掃描,
      假如掃描到的 com port 其 USB PRODUCT STRING 與 FW code 是一致的,
      表示這是自家的產品, 用這樣方式能做到自動連線, 不用在 PC App 開一個下拉式選單,
      列舉 PC 端全部的 com port, 讓使用者一個一個去試, 哪一個 com port 才是自家 USB com port,
      這種方式只適用於 1 VS 1情境, 1 台電腦只跑 1 個 App,
      PC 端 USB port 同時只能接 1 個相同 USB PRODUCT STRING 的 USB 裝置

      對我們來說, USB 就是一個傳輸資料/指令的媒介, 內容與格式是自訂義,
      只要 FW 與 SW 工程師沒意見即可 (實際上, 在定義格式時, 雙方都很有意見),
      假如 USB 封包內容不想讓人知道, 在 MCU 與 PC App 兩端引入對稱式加密(AES),
      雙方共享密鑰, 進行通訊, 在資料傳輸上做點手腳, 有點保護功能

      小小分享, 謝謝

      刪除
    4. 喔~如果你們覺得" 1 VS 1情境, 1 台電腦只跑 1 個 App"
      這樣子可以接受的話,那就如此吧。

      所以應該就是一般內部的應用環境。
      一般標準市售的產品,也沒辦法要求客人如此。
      產品交給市場客人,就得承受得起人家的"操作蹂躪"。
      在USB 的宣告裡,可以定義Serial Number 以示區別,
      然後不同的Serial Number 對應不同的 COM port 。
      那APP 也自然可以同時跑好幾隻同樣產品。
      產品要完善出貨的上得了檯面,還是需要更精進的。

      僅供建議參考。

      刪除
    5. "產品要完善出貨的上得了檯面,還是需要更精進的"
      關於這件事,我們會再想想看是否有疏漏不足的地方,能否補強,
      多謝告知。

      刪除
    6. 這方面業務未必懂得這種道理,他們一開始覺得
      沒問題可以出貨,就直接出了。
      但萬一有一天等市場客人回饋問題時,
      那怎麼辦?到底還要不要改?
      都已經在賣了,還要改版?這肯定又被必能向前相容。
      這時候就沒有工程人員願意出頭了啦。
      ---
      有很多工程議題是很難邊走邊看邊改...
      希望你可以順利解決這些工程議題。
      加油!!

      刪除
    7. https://github.com/siliconwitchery/web-stm32-updater
      STM32 USB裝置使用網頁方式做firmware更新。也就是可以由使用者自行到網站做firmware更新。

      刪除
    8. 謝謝你提供的資訊,
      但他走的USB Class 是 DFU 。(Bootloader 支持)

      有些人就已經有其自己應用的 USB Class 了。
      一般可能就直接沿用原來系統應用上的 USB Class 了。
      不過,這種透過網頁與USB 來更新系統的,
      有空我也來研究玩玩吧。謝謝!

      刪除
    9. DFU在windows沒有內定驅動方法,只能當不知名裝置。利用Chrome的webUSB api寫dfu的格式就可以驅動USB。STM32有內建USB bootloader,將BOOT0腳位設成進bootloader(也可以利用IO腳位鎖定拉住, stlink就是如此做),然後開以下網頁
      https://kischang.top/stm32dfu/example/
      就可以下載firmware。

      刪除
    10. 在線的系統韌體更新(大陸叫智能升級)功能,
      現在幾乎是系統必備之基礎功能了,因為市場變化太快,
      系統又得保留一定的更新機制,當然也不可能做到
      百分之百才出貨啊,所以為了爭取市場時效系統就得
      支持這項功能。
      但我說了:只要能更新升級,用甚麼方法都可以。
      尤其你的系統已經有了周邊連線功能時,那就儘量
      配合支持,關於 USB 的部分,我已已經有做過 HID、
      MSDC 等。當然一般 UART(或 CDC)也都可以。
      就是儘量在系統既有的USB 介面裡去完成,是最簡單
      最方便的方法。
      而DFU 就是針對 系統更新升級用,除非你把USB 介面
      宣告成 Composite device 否則就有點浪費了。

      反正有需要的人可以參考看看。
      謝謝你提供的資訊!

      刪除
    11. 利用NFC還可以做到出廠再設定。早期MCU沒有記憶參數能力,常常外掛一個EEPROM。後來MCU內Flash可以當成參數記憶又沒人用。現在有NFC-EEPROM,又重新起來。可以先做好標準品,出貨時不用上電,直接NFC修改參數,手機就可以用。

      刪除
    12. 網頁更新有一個好處,手機也可以做。

      刪除
    13. https://web.dev/articles/porting-libusb-to-webusb?hl=zh-tw

      刪除
    14. 我大約看了一下,它是用手機開網頁,然後抓取USB列舉看到Sony相機的USB介面。

      刪除
    15. 如果是要利用手機來做系統更新升級的話,
      大概就只有無線介面而已,我想應該沒有人會還要
      透過一條USB 線來連接裝置,來執行系統更新升級。

      至於手機的無線介面就是:Wifi/Bluetooth/NFC 。
      而前兩者還是要有比較複雜通訊協定 Handshake 才能
      讓手機看到裝置,會比較複雜一點。
      NFC 是比較簡單一點:這部分我過去一、兩年有客戶
      一直提出這種在手機上比較簡易的通訊協議。
      客戶也有提供很多關於 NFC 的開發平台給我。
      現在我手上有一大堆,我還有一位朋友專攻手機NFC APP
      的應用。
      但這部分還沒有比較急迫需求的客戶市場需求,
      應該說:業務也還搞不清楚這方面的技術與市場之間的關係;
      業務還是比較相信回到PC host 端比較簡單說明。

      其實,業務也不太管你系統更新升級方法...
      他們反而覺得:你們搞產品技術的,不就得自己搞定這些嗎?
      而且產品搞定穩定出貨後,更不應該還要執行甚麼系統更新。

      為什麼還要他們去了解搞清楚這些東西呢?
      說來也對啦。
      所以啦,搞廣度的技術開發,對我們這些工程師們看來
      好像很好玩,很有成就感,但對業務要搶業績給老闆看時,
      根本不太想理你們這些宅男工程們呢!

      刪除
    16. webUSB用在更新是大材小用。它應該是用在開網頁就是在啟動應用程式。網頁刷新就可以重新抓到新的應用程式。這樣就沒有作業系統平台問題。不過會有其他問題出現。

      刪除
    17. 對我來說:利用 VC++ 在PC host 端開發USB 相關技術,
      已經算是駕輕就熟了,也可以賴以維生。
      實在無法在不同的平台上學習這些東西,
      要透過 WebUSB Access USB 裝置,那我還得學Java ?
      老了,真的沒那麼精力與心力了。

      年輕時,看了這個,看了那個,都會多多少少想摸一下,
      學一下,但現在真的會想多一點。要不然,真的學不完...
      從開始摸,到學會...然後還要在實務經驗的參與
      產品開發到產品上市出貨。
      這一個過程要多久?我想:至少都要五年...
      更不用說:從我開始接觸USB 到目前來說,
      也過了二十幾年了。已經夠了啦。

      如果年輕人有興趣的話,也不妨試試看吧。
      加油!

      刪除
    18. 整個誤解。我說明一下,它是將用c/C++寫的libUsb轉成webUSB,所以只是用C/C++程式,執行時會遇到平台差異,再用瀏覽器的除錯器找出來解決,用到一點javascript,也沒有用到java。我也不會Java,但C程式可以轉譯成Web平台還是有用,但一直連不到MCU。經由web api用c可以連通到mcu,可以使網頁應用擴展到溝通mcu這條路才是我要表達的。

      刪除
    19. 喔~了解。
      可能也是我誤解你原來的意思了。抱歉! 😌😊😋

      利用瀏覽器來更新系統程式,
      這真的也是一種不錯的選項。
      服務客戶市場本來就是技術開發者也要顧慮
      市場多樣性與各種需求才行啊。
      只是有時候還是得說服一下業務客服部門,
      因為有些人會認為利用瀏覽器做系統有點
      不太專業,怕會有一些資安疑慮吧。
      我也不太懂這些有關資安疑慮問題的東西。
      不過,我可以先研究先把東西先移到WebUSB看看吧。

      謝謝你的補充說明。

      刪除
    20. https://medium.com/@timpietrusky/how-to-build-a-webusb-dmx512-controller-by-using-an-arduino-e0dd8efb7bf0
      找了一個應用例來說明。它是用Arduino板子直接抓取MX512及webUSB函式庫,然後寫個控制程式,USB接上Chrome做為使用者介面,然後就可以利用網頁的方式做控制。

      刪除
    21. webUSB及webBLE原先都是為了使Arduino板子連接上PC,利用網頁做為使用者介面可以獲得圖型化操作界面。因為MCU上在以前都以RS232連接PC,PC上還要再寫一套應用程式也不是一個簡單的事。現在寫網頁已經是基本電腦知識,所以利用網頁接上MCU做控制就是這二個模組要解決的問題。

      刪除
    22. 其實還有一個webNFC,但發展相對慢,主因是MCU接NFC的方式少,另一個是手機有一大半NFC沒有公開,iOS對NFC權限一直不完全開放。手機可以應用少了一大半限制了webNFC的發展。

      刪除
    23. 以上webUSB, webBLE, webNFC都是跨作業系統平台,它只要Chrome。也就是windows,linux,android上面跑的程式都是同一套,iOS就有點不太一樣NFC上就有差。也可以由遠端網頁來提供程式,所以應用端會方便很多。

      刪除
    24. 我查看一下你所提供的相關訊息,
      都是很不錯的參考資訊,非常感謝您。

      基本上可以在網頁環境裏操作USB 裝置是一個很不錯的想法。
      當然網頁操作現在也是一個非常通俗使用者平台。
      只要簡單的HTML+CSS 就可以開發一個USB 裝置的存取
      操作API。

      但我又有點擔心說:當然幾個簡單的HTML 程式就可以達到
      一些示範展示效果。但我說過了:像我一開始學 VC++ 時,
      也是想說:只要能透過VC++ 存取 USB 裝置就可以了。

      沒想到:這十幾年下來,我就是因為市場或客戶的要求,
      不斷的在這些應用基礎上(就是API +USB) ,不斷的
      演進我在VC ++ API 人機介面的畫面美化上的撰寫功力。
      😁😂😃😄😅

      為什麼?我常說的:如果做技術只是像網路博主們,
      弄個開箱文就不需要為任何客戶市場或產品完成
      量產上市的後續技術支援的話,我當然可以天天貼文的
      賺取網路流量...至於在這些普羅大眾冷門網路博主世界裡,
      這些網路流量,到底可以為你帶來多少收益?
      我是真的有點存疑啦。畢竟會看網路技術博主的,
      還是遠比那些看美食旅遊,甚至一些譁眾取寵,話題
      辛辣有趣,甚至遊走法律、道德邊際的話題少太多太多了啦。

      屆時,我可能會不會就為了在網頁上想達到我們一般
      美美的操作畫面:譬如按鍵或圖表等等,又是一條
      永不回頭的不歸路啊?原來的 VC++ 與USB 已經讓我
      可以在工作生活上足夠養家活口了,我真的還有必要
      這樣子辛苦嗎?年紀大了,真的長期坐在電腦螢幕前
      真的不是一件好事啦。

      當然啊,我可以在有空閒暇之餘,弄幾個簡單的WebUSB
      開箱文來充實完善我USB DIY 相關技術討論內容,
      也是可以的啦。但畢竟要我還要像早年年輕時,
      像當初弄 USB DIY 系列作品文章一樣?我真的也沒把握啊。

      年紀與體力、視力都是人生的一大挑戰啊。就算不替自己
      多想想,也得替小孩想想啊:小孩子們也希望我們有年紀了
      有空就出去多走走啊~把自己照顧好,不給小孩添麻煩,
      遠比自己賺錢,或賺網路流量還是比較務實一點的人生觀啦。

      不過,還是謝謝你所提供的相關技術資訊。真的不錯的內容
      與未來市場使用趨勢。大家真的也不妨參考看看。
      😁😂😃😄😅

      刪除
    25. 像這種網頁式跨平台應用程式, 不外乎是用類似 NodeJS + javascript 方式去達成,

      code 寫一次, 可以跑不同作業系統, 看似方便, 但只有實際跳進去 "做" 才知道會有哪些坑,

      另外, 有考慮 "security" 這件事 ?

      比如: 自家的產品只能接受自家公司發布的 bin file 更新,
      假若這個 bin file 是被第3方修改過的, 產品要能辨識出來, 進而拒絕更新

      刪除
    26. https://www.instructables.com/Flea-Scope-18-Msps-13-BoM-WebUSB/
      USB邏輯分析儀,什麼資料都有,也可以自製,程式就是網頁,所以碼也是公開的,可以改成自己用的界面。像這樣要如何運行商業模式?真的要好好想想了。

      刪除
    27. bin檔全不全,有無修改。我在做BLE firmware upgrade時就有遇到,因為無線通信不保證有完整傳送,這個不做,很容易死機。這個已經是基本。

      刪除
    28. 關於 USB 邏輯分析儀那個東西,
      每個喜歡玩技術的總是不免會玩一些看似好玩又有點
      技術含量的東西,但最終到底可不可以立案成為一個
      既能銷售,又可以穩定獲利的商品?
      這的確是一個議題,年輕時,多方嘗試與摸索,
      無可厚非,我們也樂觀其成,但若是開公司,
      或是一個既是老師傅了,這種事就真的要好好想想了。

      這些東西裡面的技術含量,對我們資深工程師來說:
      都不是很難的挑戰,至於要用哪種IC 方案或技術方式?
      也都可以適時因市場需求而調整,最難的還是商業模式啊!

      以下是另一種邏輯分析儀的做法:
      https://www.youtube.com/watch?v=VjSF2LWJVVU

      刪除
    29. 系統更新失敗,本來就要有防護措施,
      譬如:無論如何,就是不能破壞原本 Bootloader 部分,
      這部分我做了很多利用USB 做為系統更新的產品,
      有一點經驗,但總不能老是要把這些"過往經驗"拿出來吹吧?
      ---
      不過,這裡面有個最基本的概念:
      系統更新,真的不要講求過於花俏的技術,
      穩定安全還是最重要的基本概念,有時候,
      拉一條傳輸線還是比較安全簡單的啦。

      當然啊,人家iPhone 可以透過無線網路做系統更新,
      就真的不要拿出來"XX 比雞腿"了啦。
      人家公司有多少工程師?領多少薪水專門做這檔子的事,
      我們又是怎樣的一家公司?一項工作:老闆會花多少錢?
      讓你可以有多少時間做啊?
      這是很多技術出身的老闆,創業時,還真的以為他是
      跟Jobs 一樣的開一家國際知名公司耶!
      😁😂😃😄😅

      刪除
    30. 關於啊:
      只有實際跳進去 "做" 才知道會有哪些坑,
      另外, 有考慮 "security" 這件事 ?

      是啊,所以我勸年輕人學技術,不要老是看那些
      社群媒體粉絲團的博主或一些老人"資深"工程師在吹啦。
      隨便弄個開箱文,就想哄你入坑?

      真的要從技術以外的領域多評估:投報率KPI 。
      不是說不要抗拒學技術,而是真的要審慎評估
      這些技術領域對你人生目標發展或客戶市場的機會。

      因為這都不是一天兩天、幾個月或一年的事。
      看看想想:街上那麼多手搖飲加盟店等。
      每個人創業(就業)當然想要有多一點市場(賺錢)機會。
      但殘酷現實的是:太難、太冷門的市場或生意,
      但簡單入手門檻的,市場競爭也很大。
      對你機會都不大。
      做技術開發與潛心鑽研不是傻傻的一件事,
      看別人在技術上吹,聽聽,看看就好啦。
      等你有了年紀時,你就會懂得啦!---經驗分享啦。

      刪除
  3. https://mcu.eetrend.com/content/2024/100585636.html
    現在工具聯合真強,軟體設好腳位,不只生成設定功能的原始碼,電路圖元件及PCB元件一併生成併設好腳位。以前我寫硬體原始碼就快一週,電路圖元件腳位設定就花了一二天,PCB是外包,人家也要一二天。現在一鍵生成。

    回覆刪除
    回覆
    1. 非常感謝你所提供的相關資訊,
      剛好我自己就是採用PADs, 但最近幾年已經不用了,
      因為現在已經有硬體的人員幫忙了。
      年紀大了,真的沒辦法甚麼都自己來。
      不過有了這種一鍵生成的輔助工具,也是值得其他年輕人參考看看。

      這種在工程上的輔助工具應該也會不斷的推陳出新,
      畢竟工程師有時候不光只是做產品開發,
      解決與簡化工程開發中一些周邊或繁縟的流程,也是一種商機。

      所以工程師還是要以產品或市場導向為主,
      不要老是只是想關起來門來,自己玩自己想的、認為有價值的
      技術或東西,畢竟外面的世界是瞬息萬變的。

      最後,順便也分享一下關於一樣是軟體開發市場訊息:
      YOLO ,這個東西不到十年就已經位居許多教育訓練的
      前幾名的課程了。
      或許,在我印象中,還在想用甚麼 OpenCV ?
      或甚麼高階軟體架構?人家就是一樣的一次到位。
      也算不算也是"一鍵生成" 的新趨勢啊?

      在工程領域裡,無非就是影像、聲音或運動控制等,
      其實,隨著科技發展進步,真的一日千里啊。
      大家有機會也不妨多參考留意一下。

      刪除
    2. YOLO和openCV做的事不一樣。我是量測,只能用openCV,辨識改由AI是對的。但辨識用的範圍廣。我簡單分開它,openCV會用於視覺量測,因為每次量測值都要有數學依據以及明確定義,別人才會認可。辨識才是目前在流行的AI去做。但量測前也要先辨識量測物件有沒有在範圍內,不然你也知道程式只是呆呆執行,算出一個值都不知道有沒有對準量測物。

      刪除
    3. 忘記登入就回應,變成匿名。我再確認一次是YOLO object detect沒有錯,因為我還找到YOLO education那個好像是學習網站。

      刪除
    4. 我之所以會提到YOLO 的問題是:
      我在兩年前嘗試想用 OpenCV 來解決一個實驗室軟體問題。
      溫度數據的自動記錄:

      老工程師的技術生活(七) --- 技術創業再回到認識技術發展本質
      https://chamberplus.blogspot.com/2022/09/blog-post.html

      然後又想到當初參與遠通高速公路的ETC 開發案。
      當初整個計畫的重點都是擺在車牌辨識系統。(2007年左右)
      當初承接的外包公司也承受不少壓力。
      但只是藉由整個大環境的科技發展,包括這類YOLO 結合
      AI 機械學習的平台日益精進。也看了一些 YOLO 新版平台的
      示範影片,不要說車牌辨識啦,就連一些複雜的動態影像
      辨識都做得嚇嚇叫。

      只能說:現在工程師不只要懂得技術,還要更懂得善用
      資源(網路),畢竟一個人,一家小公司都比不上來自
      全球各路英雄好漢啊。重點就是:挑好一個目標市場,
      選好你想完成的產品特色(當然就如何在競爭市場勝出?)
      為自己創靠機會。
      --- 這是我的感觸而已。

      刪除