Khronos 專利池小註解

Khronos 名下有很多技術, 像是 Vulkan®, OpenGL®, OpenGL ES, WebGL™, OpenCL™, OpenVX™, COLLADA™ and glTF™.  這些. 那麼到底是誰發明出這一堆東西呢? 我以前也覺得很好奇. 趁放假研究一下, 原來 Khronos 這個組織就是一個大專利池.

如果參加 Khronos 的會員, 就可以對於 essential 的 IP 享有交互授權 (reciprocal license) 的好處, 也就是會員之間不能用交互授權的 IP 互告 [1] – 如果有繳會員年費的話. 如果不參加會員, 也可以用 adopter 的身分實作這些 IP, 只要繳個 20K USD 左右 (只是舉例, 非固定數字. ), 不論出貨數量.

參加會員的話, 又分為好幾個等級 [3], 總是多花錢還會有投票權 (Contributor Member). 花更多可以選董事 (Promoter Member). 如果 license 一個技術要花 20K, 那繳個 18K 年費當 Contributor member 也不算多貴. 因為會員也自動是 adaptor. 不過是否要先是其他種類會員才能樂捐成 contributor 會員呢? 看 [4] 的 PDF page 1 – defination, 可能是.

Promoter MemberAssociate Member
$75,000 per year$3,500+ per year
Board Approval RequiredAvailable to companies with up to 100 full-time employees. $175 per employee
The right to designate a Director to the Khronos Board.
Full working group participation and voting rights.

後面有寫到 associate member 是按照員工人數來收錢的, 一個人頭 175 元, 而且是超過 100 人的公司才可以參加. 假如公司不幸有 1 萬人, 那年費就高達 175 萬美金. 就算可以拗說一個 BU 只有 100 人, 那也要 17500 = 17.5K (USD). 花這麼多錢, 應該有對應的好處, 讓 Broadcom, MediaTek 都參加 [2].

會員之間會有 working group 會議討論哪些 IP 是交互授權的? 正面表列的話, 只有兩種 IP 會落入交互授權:

  1. The only point of licensing is the instant of ratification by the Khronos Board, and ONLY essential IP in the final spec is reciprocally licensed, meaning that discussions and contributions not included in the final specification bring no licensing obligation;
  2. Khronos Members do not have to disclose any IP that will be included under the standard reciprocal license – so no patents are ever discussed in open Khronos meetings so that Members are not put on notice of specific patents.

紅色字體是我高亮點, 雖然只看這幾個字會是斷章取義, 但基本上參加的百來個會員也不是傻的, 不相關, 不重要的 IP 不會納進來. 而且會員可以正面表列那些 IP 不列入交互授權之中. 官方說法, 這種事不常發生.

 … this mechanism has only been invoked a handful of times in the fifteen year history of Khronos Group.

然而, 只有在這個會員 [2] 裡面, 非正面排除, 又被正面表列的 IP 才能交互授權. 免於互相收錢或是互告. 但是對於非會員就沒有約束力了.

[REF]

  1. https://www.khronos.org/members/ip-framework
  2. https://www.khronos.org/members/list
  3. https://www.khronos.org/members/
  4. https://www.khronos.org/files/member_agreement.pdf

Thread Border Router 小註解

首先講到 Thread 這個技術, 它又是一個把常見名詞變成專業術語的東西. 上次那個 SALT 也沒紅, 不知道是否取這種名字不夠吉利? 總之, 先來介紹一下 Thread [1].

Thread 是由 Thread Group 開發, 所以不是來自諸如 The Hub Re-Assambled and Delivery 這種縮寫, 哈!

基本上它也 (只) 走 IPv6, 支援 mesh, 主要用於 IOT (Internet of Things). 其網路 protocol 6LoWPAN 基於 IEEE 802.15.4. 而藍牙/WPAN 是 802.15.1, BT/WIFI 共存是 802.15.2, 高速 WPANs 是 802.15.3, 可見它和藍牙的關係也匪淺. 事實上, ZigBee 也是走 802.15.4, 所以 Thread 更近似 ZigBee, 但是 Thread 在架構和相容性上又勝出 [2].

本圖取材自 [2] 的圖 1+圖 2, ZigBee 顯得不合群.

讓我們接受 Thread 比較好, 接下來看 router. 如果只是一對一連接, BT 就很好用了. 但在智慧家庭 (Home automation) 的考量下, 家裡可是會有一大堆 IOT. 而且分別來自不同陣營的生態系, Siri, Alexa, Google 可能混居一室, 這個就不是一個 PAN 可以搞定的.

另一個規格 Matter [3] 就是用來解決多生態系混搭的問題, 只要大家都可以用 IP 溝通不就可以在同一個環境共存了? 所以支援 mesh 的 WIFI 和 Thread 都可以支援 Matter. 既然 WIFI 有 router, Thread 當然也有 router [5]. 而在 WIFI 和 Thread 的交界, 就會有所謂的 Thread Border Router (TBR) [4].

上圖和下圖都來自 [4]. 上圖容易理解, 基本上就是說明 TBR 的角色是跨 LAN. 下圖比較複雜. 說明 TBR 的主要功能之一是 service discovery. 任何一個 Thread device 能夠提供服務的話 (如開燈, 播音樂…), 必須跟 TBR 以單播 (Unicast) 註冊, 而不需要跟 Thread 網內的其他 device 交頭接耳 . 這是它可以省電的方法.

由於 TBR 知道每個 Thread Device 能提供什麼服務, 它就可以對 WIFI mesh 進行多播 (Multicast) 但不是廣播 (Broadcast), 因為 LAN 裡面可能有非 Matter 相容的裝置. 所有的 Thread Device 都是透過 TBR 代理做 mDNS ( multicast DNS) [6], 這又有助於省電.

因此我們可以說 TBR 兼具了 SRP server 和 Advertising Proxy 的角色. 另一方面, Thread Device 怎麼發現 WIFI 那邊有什麼 service 呢? 答案還是透過 TBR, Thread Client 透過 TBR 當 DNS-SD (service discory) Discovery Proxy 跨出 Thread border.

總結來說, TBR 的 SDK 和 sample code 可以從公開網路上找到 [7]. 而且 TBR 成功地串起 WIFI 和 Thread 的世界, 讓 Matter 這種應用可以更容易地被實現. 套句廣告詞, 這麼好的東西去哪裡買呢? 其實目前很少有純 Thread borad router 可以買, 它可能只是 WIFI router 的一個附加功能, 或者直接在某個智慧燈泡裡.

所以我們要認 logo. 下圖左邊這個 logo 表明這個 Thread device 是個 TBR, 下圖右邊這個 logo 表明它是一個普通的 Thread Device. [5]

[REF]

  1. https://en.wikipedia.org/wiki/Thread_(network_protocol)
  2. https://www.electronicproducts.com/ip-on-wi-fi-zigbee-and-bluetooth-opportunity-and-risk/
  3. https://en.wikipedia.org/wiki/Matter_(standard)
  4. https://blog.espressif.com/matter-thread-border-router-in-matter-240838dc4779
  5. https://www.threadgroup.org/Portals/0/documents/support/ThreadBorderRouterWhitePaper_07192022_4001_1.pdf
  6. https://en.wikipedia.org/wiki/Multicast_DNS
  7. https://github.com/espressif/esp-idf/tree/master/examples/openthread/ot_br

華擎太極主機板 Error Code 小整理

雖然這塊板子的優點就是有 LED 顯示開機錯誤代碼 [1], 不過跑出錯誤代碼, 卻找不到官方解釋可是個大問題. 甚至會誤導 debug 的方向, 所以我把我遇到的狀況也註記在這裡.

[官方表格]

除錯代碼定義
FF,
00 – 19
D0 – D3
請檢查 CPU 是否正確安裝,然後清除 CMOS。
0d 例外, 詳見補充表格。
31 – 3B
51 – 55
CPU或記憶體相關問題。請重新安裝 CPU 和記憶體,然後清除 CMOS。
若問題仍存在,請只安裝一個記憶體模組,或嘗試使用其他記憶體模組。
D4 – D5PCI 資源分配錯誤,資源不足。
D6
92 – 97
顯示卡或CPU內顯無法辨識。請清除 CMOS 並嘗試重新安裝顯示卡。若問題仍存在,請嘗試安裝顯示卡至其他插槽或使用其他顯示卡。
D7鍵盤及滑鼠無法辨識。請嘗試重新安裝鍵盤及滑鼠。
D8密碼無效。
9A – 9DUSB 裝置相關問題。請嘗試移除所有 USB 裝置。
E8 – EBS3回復失敗 (S3=睡眠模式)
03電腦正在進入S3狀態 (S3=睡眠模式)
04電腦正在進入S4狀態 (S4=休眠模式)
05電腦正在進入S5狀態 (S5=軟關機)
30電腦正在從S3狀態中喚醒 (S3=睡眠模式)
40電腦正在從S4狀態中喚醒 (S4=休眠模式)
AA電腦完成開機程序進入作業系統

[實際 debug 經驗]

除錯代碼實際解決方式
0d跟 Clear CMOS 或 CPU 無關. 找到 [2] 這篇開始查記憶體。
拔掉可疑的 DDR Module. 原本插 4 條, 拔掉一條可開機.
打開 fPTM, 又出現 0d, 再拔掉一條, 剩兩條 DDR 時可正常開機. 前述兩條是同一時間買的.
64VGA 輔助 power 12V 一條脫落, 換個公頭後解決

[REF]

  1. https://www.asrock.com/support/index.tw.asp?cat=Debug
  2. https://forum.gamer.com.tw/C.php?bsn=60030&snA=549896

FIPS 140 小註解

FIPS [1] 是一個安全規範, 全名為 Federal Information Processing Standards, 望文生義是個美國聯邦的規格. FIPS 基於 ISO 19790 [2] 的規範, 家族有 FIPS-1, FIPS-2, FIPS-3 等幾個版本. FIPS-1 和 FIPS-2 分別誕生於 1994 年和 2001 年, 算是老古董. FIPS-2 現已停止受理 [9]. FIPS-3 是 2019 年才出來的新標準, 將全面取代 FIPS-2.

FIPS 規範的不只是加密模組, 還包括文件, 和 source code 裡面的註解. FIPS-1 的涵蓋面包括: exact module name, hardware, software, firmware, and/or applet version numbers. 這些部分不能被竄改, 但沒有保證一定安全. FIPS-2 和以上的 level 會包含 operating platform.

FIPS-2 裡面又分成 4 個 level:

  • Level 1 可產品化的基本款.
  • Level 2 加上 physical tamper-evidence 和 role-based authentication.
  • Level 3 加上 physical tamper-resistance, identity-based authentication, 以及規定 “critical security parameters" 的 API 要和普通 API 分開 (physical or logical).
  • Level 4 需要硬體保護 (physical), 並且通過攻擊測試.

FIPS-3 除了參考 ISO 19790, 還參考 ISO 24759 [3]. 在 FIPS-2 level 2 當中, 它只提到要留下攻擊的證據, 在 level 3 才需要抵抗. 但打不過也沒關係. FIPS-3 提供一個在執行時自測的方式 (self-tests are only performed if used) [4]. 既然能在 run-time 跑, 它的演算法必須很快.

如果通過 FIPS 認證會拿到一個標章. Goole 後就會發現這 logo 居然可以有很多不同的長相. WolfSSL [4] 說: 號稱 FIPS-140 ready 或是 Design for FIPS 都是混淆視聽, 正版 logo 要通過NIST [5] 認證才算數. 所以標準長相是下圖的前兩個和右下黑白那個 (140-3 和 140-2) [6].

無論是 module 或 product 都可以過 FIPS-140 認證 (Algorithm 走 CAVP [10]). 對於 product 來說, 就是聲明 XX module inside. 目前排隊進名單的廠商非常踴躍, 以 processor 週邊硬體來說, 名單中有 CPU 兩大品牌 Intel 和 AMD 的 Cryptographic CoProcessor, 軟體有 RedHat Linux 的  Crypto API Cryptographic Module. Apple 則是同時有 Intel 版和自家 A 系列 CPU 的 corecrypto Module 都在待測之中.

這個 FIPS 認證流程叫做 CMVP (Cryptographic Module Validation Program), 想要 NIST review 要付工本費 (Cost Recovery fee). 但待測名單很長, 有 351 個 module 在等待測試的名單[7]. 已經過認證的只有 135 個 module [8]. 不知道 NIST 有沒有 super hot run 呢? 還好 Android Kernel Cryptographic Module 已經在 FIPS 140-3 Review Pending 名單之中, 所以只要用對 kernel, 就可以輕鬆上車.

[Ref]

  1. https://en.wikipedia.org/wiki/FIPS_140
  2.  ISO/IEC 19790:2012(E) Information technology — Security techniques — Security requirements for cryptographic modules
  3.  ISO/IEC 24759:2017(E) Information technology — Security techniques — Test requirements for cryptographic modules.
  4. WOLFCRYPT FIPS 140-2 and FIPS 140-3
  5. The National Institute of Standards and Technology (NIST) 
  6. https://csrc.nist.gov/Projects/cryptographic-module-validation-program/use-of-fips-140-2-logo-and-phrases
  7. https://csrc.nist.gov/Projects/cryptographic-module-validation-program/modules-in-process/Modules-In-Process-List
  8. https://csrc.nist.gov/Projects/cryptographic-module-validation-program/modules-in-process/IUT-List
  9. https://www.informationsecurity.com.tw/article/article_detail.aspx?aid=8977
  10. Algorithm 的驗證走 CAVP (Cryptographic Algorithm Validation Program)

MEMS 揚聲器小註解

近來有許多微機電揚聲器 (MEMS speaker) 公司出現在市場上. 打著優於傳統揚聲器的功耗、體積等優勢, 大舉進軍小尺寸的市場 – 像是耳機這種應用. 在更深入瞭解 MEMS Speaker 之前, 我先來回顧一下傳統的 speaker 的最主要原理和元件 [1].

speaker-2

發聲的關鍵在於上圖 (取自 [1]) 的驅動部分, 特別是永久磁鐵和音圈 (voice coil). 永久磁鐵包圍音圈或是音圈包圍永久磁鐵這兩種設計都可以達到目的. 當類比聲音訊號輸入, 大小不同的聲音會改變電流大小, 然後電流改變音圈上磁場的大小, 再根據弗萊明左手定理 [2],  產生力的變化而推動振膜.

下圖取材自 [3]. 永久磁鐵被標為深色 Magnent, 音圈被標為剖面的五條線繞成圈圈. 我喜歡這張圖是因為它有標示極性 (N/S), 還有弗萊明的左手.

fleming

所以基本上, 喇叭要出聲只需要在線圈上改變電流強弱就行. 而 MEMS 呢, 由專利說明書來看 [5], 基本上就是用 MEMS 做出一個 silicon 薄膜, 然後用 silicon 懸臂支撐住. 震動這塊振膜就可以出聲了.

在一篇專利 [5] 的說明中, 我們可以看到比較詳盡的 MEMS 原理說明.

basic-mems-principle

至於 MEMS 還有沒有磁鐵? 這是可選擇的.  因為微機電也可以在矽基 (大陸翻成硅基) 上做出釤鈷磁鐵. 但 [5] 這篇的重點在於省掉永久磁鐵, 只用電流方向來改變磁場方向. 因此不是強弱變化可以發生, 相吸或是相斥的變化也可以發聲.

在功耗方面, MEMS 少了傳統 speaker 裡面的線圈, 改為矽晶圓製程. 光看體積上的差異, 用直覺就可以判斷發熱應該會減少. 但是音量夠不夠呢? 頻率響應好不好呢? 就是它的潛在限制. 有些主攻助聽器、藍牙耳機, 有的推 speaker array (以量取勝堆音量), 這都暗示了小 IC 還是推不動重低音. 即使 SPL 很大, 但只是在一個點如此. 好比一排衝鋒槍是轟不倒城牆.

在 1K~40 KHz 這範圍的頻率響應, 據說 MEMS 和傳統的類比喇叭相當. 不過類比喇叭可以用大尺寸來表現低頻 (高波長, 20~1KHz), 這點在 MEMS 上應該是沒辦法做到. 20 Hz 的波長是 (330 m/s)/(20Hz) = 16.5 m. 單純震動一大塊薄膜來產生低音會非常沒有經濟效益. 不過比照耳機的原理, 只要製造出封閉空間 (closed tunnel ) 就可以用小空間產生低音. 另一個方法是產生虛擬的低音 (virtual pitch 不知道怎麼翻譯) [8]. 這邊也註記一下.

[Note]

  1. 音響世界入門第一課:弄清楚揚聲器、喇叭與單體
  2. 弗萊明左手定則(Fleming’s Left Hand Rule)與馬達驅動
  3. 喇叭單體與揚聲器系統(上)
  4. 電動式揚聲器
  5. 專利: 一种硅基mems微扬声器
  6. 專利: MEMS Loudspeaker with Position Sensor
  7. https://audioxpress.com/article/the-impact-of-mems-speakers-in-audio
  8. https://www.quora.com/How-can-headphones-produce-low-notes-when-speakers-have-to-be-large