2023年5月21日 星期日

HT32F52352 開發套件裝 QMK 測試

萬事起頭,最快進入狀況的方式是找一個範例來改。在 qmk_firmware 中,搜尋程式碼中有 HT32 關鍵字的程式,很幸運找到 keyboards/annepro2,然後就沒別的了。

這支  Anne Pro 2 的鍵盤,MCU 是 HT32F52342,和 HT32F52352 的差別在於其 flash 只有一半。

BootLoader 測試

說明中提到要用 [OpenAnnePro / AnnePro2-Tools] 來寫入產生的 bin image。從原來鍵盤 dump 出來的 IAP (In Application Programming) bootloader 則可在 OpenAnnePro / AnnePro2-Bootloader 找到。這是從 Anne Pro 2 C15 鍵盤 dump 出來的 image。

為了能儘快測試 HT32 連 TrackPoint 的功能,需要有一個測試環境,能使用 IAP 的方式寫入鍵盤 image 比較方便。 HT32F52342 和 HT32F52352 只有 flash 大小不同,且後者比前者大,就來試試 Anne Pro 2 的 bootloader 和 qmk 設定吧。

 用 git clone 把 AnnePro2-Bootloader 的所有資料下載,再用下面的指令寫入開發板的 MCU。

eLink2pro -a bootloader.bin  firmware

接上裝置後使用 dmesg 看到的訊息如下

[491032.173213] usb 1-7.4.3: new full-speed USB device number 15 using xhci_hcd
[491032.250654] usb 1-7.4.3: New USB device found, idVendor=04d9, idProduct=8008, bcdDevice= 1.00
[491032.250671] usb 1-7.4.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[491032.250677] usb 1-7.4.3: Product: USB-HID IAP
[491032.250681] usb 1-7.4.3: Manufacturer: HOLTEK
[491032.250685] usb 1-7.4.3: SerialNumber: SN0000000001
[491032.262570] input: HOLTEK USB-HID IAP as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7.4/1-7.4.3/1-7.4.3:1.0/0003:04D9:8008.0010/input/input27
[491032.314697] hid-generic 0003:04D9:8008.0010: input,hidraw6: USB HID v1.10 Keyboard [HOLTEK USB-HID IAP] on usb-0000:00:14.0-7.4.3/input0
[491032.315905] input: HOLTEK USB-HID IAP as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7.4/1-7.4.3/1-7.4.3:1.1/0003:04D9:8008.0011/input/input28
[491032.316052] hid-generic 0003:04D9:8008.0011: input,hidraw7: USB HID v1.10 Device [HOLTEK USB-HID IAP] on usb-0000:00:14.0-7.4.3/input1

如 bootloader 的說明,裝置的 ID 為 04d9:8008,裝置描述則為 HOLTEK USB-HID IAP。因為其判斷沒有正確的 AP,就直接進入 IAP。

接下來,使用 qmk 指令產生 annepro2/c15 的 image,指令如下

$ qmk compile -kb ajtest/annepro2/c15 -km default 

產生的 image 為 annepro2_c15_default.bin。指令如下,必須使用 sudo 才有權限寫入

$ sudo ./annepro2_tools annepro2_c15_default.bin 

拔掉重新連線,使用 dmesg 看到的訊息如下

[497734.509647] usb 1-7.4.3: new full-speed USB device number 19 using xhci_hcd
[497734.587567] usb 1-7.4.3: New USB device found, idVendor=feed, idProduct=ac15, bcdDevice=13.37
[497734.587584] usb 1-7.4.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[497734.587590] usb 1-7.4.3: Product: Anne Pro 2 C15 (QMK)
[497734.587594] usb 1-7.4.3: Manufacturer: Obins
[497734.594474] input: Obins Anne Pro 2 C15 (QMK) as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7.4/1-7.4.3/1-7.4.3:1.0/0003:FEED:AC15.0019/input/input36
[497734.645861] hid-generic 0003:FEED:AC15.0019: input,hidraw6: USB HID v1.11 Keyboard [Obins Anne Pro 2 C15 (QMK)] on usb-0000:00:14.0-7.4.3/input0
[497734.646396] input: Obins Anne Pro 2 C15 (QMK) System Control as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7.4/1-7.4.3/1-7.4.3:1.1/0003:FEED:AC15.001A/input/input37
[497734.697975] input: Obins Anne Pro 2 C15 (QMK) Consumer Control as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7.4/1-7.4.3/1-7.4.3:1.1/0003:FEED:AC15.001A/input/input38
[497734.698267] hid-generic 0003:FEED:AC15.001A: input,hidraw7: USB HID v1.11 Device [Obins Anne Pro 2 C15 (QMK)] on usb-0000:00:14.0-7.4.3/input1 

裝置的 ID 變成 feed:ac15,裝置描述為 Obins Anne Pro 2 C15 (QMK),此為 info.json 裡的 name 設定的字串。使用鍵盤測試軟體,如 [https://en.key-test.ru]。將 row 接腳 C2 逐一與 col 接腳 C4 和 C5短路,確定為 'Esc' 和 '1',表示鍵盤功能正確。

進入 IAP 的方式,按著 ESC 鍵不放,再連上鍵盤。對應 ESC 鍵的 row 接腳為 C2,對應的 col 接腳為 C4。把 C2 和 C4 短路再連上鍵盤,成功進入 IAP 模式。

至此算是又往目標邁進一步,接下來就可以測試連接 TrackPoint 的功能。更進一步,必須要有可用的 HT32F1654 的 bootloader,才能改阿米洛68鍵盤。

TrackPoint 連接測試

依照  Anne Pro 2 設定好鍵盤,測試 OK。再加上 ps2 mouse 的功能,先使用較單純的 busywait-version。但是並沒有想像中的順利,加上 mouse 功能後,接上鍵盤,大約要等半分鐘以上鍵盤才有反應。剛好前陣子測 OpenOCD 不順利,買了個 USB Logic Analyzer,正好可以看一下波形。大約半分鐘以後,clock 和 data 才出現波形。

但不論怎麼改,都無法成功。只好想辦法用  QMK 的 debug 功能。從 QMK toolbox 看到的訊息,這樣比較有點方向了。


追蹤了好久,發現是 wait_us() 的時間不對,大致上做了下列的修改。
$ sudo === 在 config.h 中加入 ===
#define WAIT_US_TIMER GPTD_BFTM0

=== 在 halconf.h 中加入 ===
#define HAL_USE_GPT TRUE 
#define HT32_GPT_USE_BFTM0 TRUE


=== \lib\chibios-contrib\os\hal\ports\HT32\LLD\TIMv1\hal_gpt_lld.h ===
/**
 * @brief   Driver configuration structure.
 * @note    It could be empty on some architectures.
 */
typedef struct {
  /**
   * @brief   Timer clock in Hz.
   * @note    The low level can use assertions in order to catch invalid
   *          frequency specifications.
   */
  gptfreq_t                 frequency;
  /**
   * @brief   Timer callback pointer.
   * @note    This callback is invoked on GPT counter events.
   */
  gptcallback_t             callback;
  /* End of the mandatory fields.*/
  /**
   * @brief TIM CR2 register initialization data.
   * @note  The value of this field should normally be equal to zero.
   */
  uint32_t                  cr2;
  /**
   * @brief TIM DIER register initialization data.
   * @note  The value of this field should normally be equal to zero.
   * @note  Only the DMA-related bits can be specified in this field.
   */
  uint32_t                  dier; 
} GPTConfig;

至此初步可以在 mcu 和 trackpoint 之間傳送指令和資料,但為了測試,drivers/ps2 目錄下的程式都被我改亂了,以致於無法正確取得資料。到官網下載原始檔,再重新編譯,功能就正常了。接下來,就是想辦法把 interrupt version 弄正常來。






2023年5月14日 星期日

露天賣家也會遇詐騙 -- 露天要求簽金流保障協議

 詳情請參考網友整理的 https://www.dcard.tw/f/mood/p/240515319

以下說明我的遭遇

私訊說要買的東西,然後無法下標,傳圖給我


說是他剛問了客服,說賣家的賣場沒有更新金流服務,要我去 https://rutenKF112.tw 處理。

說明要簽署的東西

然後,我就留下姓名手機,就有專員和我服務。半夜 11點多,還這麼熱心服務,真是熱心。我同時上露天找相關認證,都沒有。那就等他打電話來吧。

真的接到電話了,可是口音真重,我聽得模模糊糊的,還要我確定一堆東西。火大不賣了,我要早點睡,明天自己打電話問銀行比較快。

順手 Google "露天更新金流服務 詐騙",馬上就找到有人分享被騙的經驗。


2023年5月13日 星期六

阿米洛68鍵盤 -- firmware 修改

 鍵盤型號是 Miya68 Pro,PCB 型號是 Miya69-V2.2 (A)。MCU 上的文字是 HSAK3201 ARM。經過一翻努力追蹤,確定 MCU 是 Holtek 出的 HT32F1654。flash 內容是鎖住的,使用 eLink32Pro.exe 對 flash 執行 mass erase 操作後,就可以讀出晶片的資訊了。

在 PCB 上焊一個 4pin 的小接頭,pin 腳的間距是 1.24mm,所以要在原來的兩個孔之間再鑽一個小洞。只接了三條線,e-Link32 lite 和鍵盤各自用自己的電源。

使用 OpenOCD 讀取晶片的資訊。

設定檔 dap-tst.cfg 如下。因為使用 Ubuntu 的 openocd 套件,沒有HT32F1654 的資訊,先用 stm32f1x 的設定來讀資料。若要寫入資料,則需加入  HT32F1654 的資訊。

# openocd -f /app/dap-tst.cfg
adapter driver cmsis-dap
adapter speed 1000
transport select swd

source [find target/stm32f1x.cfg]

執行 openocd 的訊息如下。

# openocd -f /app/dap-tst.cfg
Open On-Chip Debugger 0.11.0
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: FW Version = 1.0.35
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x2ba01477
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections

使用 telnet 連上 port 4444,執行 dap info 得到的資訊下。假如還沒解鎖,執行 dap info 會回報錯誤。

/# telnet localhost 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> dap info

AP ID register 0x24770011
	Type is MEM-AP AHB3
MEM-AP BASE 0xe00ff003
	Valid ROM table present
		Component base address 0xe00ff000
		Peripheral ID 0x0000000000
		Designer ASCII code 0x00, <unknown>
		Part is 0x0, Unrecognized 
		Component class is 0x1, ROM table
		MEMTYPE system memory present on bus
	ROMTABLE[0x0] = 0xfff0f003
		Component base address 0xe000e000
		Peripheral ID 0x04002bb000
		Designer is 0x4bb, ARM Ltd
		Part is 0x0, Cortex-M3 SCS (System Control Space)
		Component class is 0xe, Generic IP component
	ROMTABLE[0x4] = 0xfff02003
		Component base address 0xe0001000
		Peripheral ID 0x04002bb002
		Designer is 0x4bb, ARM Ltd
		Part is 0x2, Cortex-M3 DWT (Data Watchpoint and Trace)
		Component class is 0xe, Generic IP component
	ROMTABLE[0x8] = 0xfff03003
		Component base address 0xe0002000
		Peripheral ID 0x04002bb003
		Designer is 0x4bb, ARM Ltd
		Part is 0x3, Cortex-M3 FPB (Flash Patch and Breakpoint)
		Component class is 0xe, Generic IP component
	ROMTABLE[0xc] = 0xfff01003
		Component base address 0xe0000000
		Peripheral ID 0x04002bb001
		Designer is 0x4bb, ARM Ltd
		Part is 0x1, Cortex-M3 ITM (Instrumentation Trace Module)
		Component class is 0xe, Generic IP component
	ROMTABLE[0x10] = 0xfff41003
		Component base address 0xe0040000
		Peripheral ID 0x04002bb923
		Designer is 0x4bb, ARM Ltd
		Part is 0x923, Cortex-M3 TPIU (Trace Port Interface Unit)
		Component class is 0x9, CoreSight component
		Type is 0x11, Trace Sink, Port
	ROMTABLE[0x14] = 0xfff42002
		Component not present
	ROMTABLE[0x18] = 0x0
		End of ROM table

由以上的訊息確定 MCU 的核心是 Cortex-M3。

使用 eLink32Pro.exe  寫入 pok3r-custom/pok3r_re_firmware 的    disassemble/pok3r/builtin/firmware_builtin.bin,連上電腦,顯示的裝置是 

Bus 001 Device 024: ID 04d9:1141 Holtek Semiconductor, Inc. USB-HID Keyboard

到此為止,成功解鎖以及寫入下載的 firmware,接下來就是要建立自己的 QMK 鍵盤,以及加上小紅點 (Trackpoint)。




2023年5月8日 星期一

OpenOCD 反向工程練習

主要的動機是要在鍵盤上加小紅點,想直接用鍵盤上原有的 MCU。目前拆解的鍵盤是阿米洛 68鍵鍵盤 Miya68 Pro,上面的主控是 HSAK3201,只知道是 Holtek 出的 ARM CPU。

參考連結:

先在 pcstore 買了一塊 [HT32F52352 開發套件(帶排針) ESK32-30501S],想先熟悉一下相關的操作和 HT32 系列 CPU 的相關資料。售價 NT$ 657,運費 NT$ 45,總計 NT$ 702。

先用 Holtek 網站下載的軟體在 Win10 下測試,無法透過 e-Link32 lite 連上開發板。只好再上 pcstore 買一塊 [Holtek 32-bit MCU 調試適配器 e-Link32 Pro],售價 NT$ 939 ,運費 NT$ 45,總計 NT$ 984。目前的總投資成本 NT$ 1,686。開始時還是不成功,又上蝦皮買 [USB 邏輯分析儀] 和一些線材,含運費 NT$ 384。總成本 2千多一些,這是為了一支垃圾鍵盤的控制 IC 所花費的成本,就當作練功的學費吧。

下圖是把 e-Link32 lite 拆下,再用杜邦線連目標開發板,電源各自獨立。 

後來,使用排線連接 e-Link 32  和開發板,都順利成功。追查原因才發現,e-Link32 lite 上的 CN3,是它自身的 SWD port,是讓別人來連它的,CN2 才是要連目標 CPU 的接頭。我一直都用 ST-Link 的想法,認為 CN3 是用來連目標 CPU 的。只能怪我在未測試功能正常前,就把 e-Link32 lite 拆下來了。至於多買的,等整個測試 OK 之後。再用網拍賣給其他需要的人吧。

使用 e-Link32 lite 連目標板,有時可以,有時不行,實在很困擾。交叉比對測試後,確認 reset 腳不用接,但 3.3V 的 VDD 腳要接。因為 e-Link32 lite 的 level shift IC 是由目標板供應的。但我的鍵盤只和 4個 PIN,其中一個 PIN 是 reset,3.3V VDD 沒接。最後把 CN3 和 CN2 的 VDD 接起來就 OK 了。

另外,jtag 的接線不能太長,照官方說法,不能超過 6吋,大約 12CM。我在開始把鍵盤 PCB 的 SWD 線接出時,轉接了好幾段線,超過 30公分,讀取資料就變得很不穩定。後來只留下一段接線,約 17CM,超過一些,但使用 1000kHz,還是可以穩定連線。

要進行反向工程,得先學習使用 OpenOCD,[Wrongbaud's Blog] 的文章是很好的入門教材。再參考一些其他的相關資料,建立了 OpenOCD 的 docker,透過 docker 來使用比較方便。

經反覆測試,最終能成功透過 OpenOCD 讀取開發板上的 MCU 的資訊。

自己建的 dap-tst.cfg 檔,如下。

adapter driver cmsis-dap
transport select swd
source [find target/stm32f1x.cfg]

執行 openocd 指令的畫面如下。

# openocd -f dap-tst.cfg 
Open On-Chip Debugger 0.11.0
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: FW Version = 1.0.35
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x0bc11477
Info : stm32f1x.cpu: hardware has 4 breakpoints, 2 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections
Info : accepting 'telnet' connection on tcp/4444 
在外部無法透過 telnet 連上,進入同一個 container,則可以順利連上。先下個 dap info 指令,把初步的資訊 dump 出來。
# telnet localhost 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> init
> dap info
AP ID register 0x04770031
        Type is MEM-AP AHB3
MEM-AP BASE 0xe00ff003
        Valid ROM table present
                Component base address 0xe00ff000
                Peripheral ID 0x04000bb4c0
                Designer is 0x4bb, ARM Ltd
                Part is 0x4c0, Cortex-M0+ ROM (ROM Table)
                Component class is 0x1, ROM table
                MEMTYPE system memory present on bus
        ROMTABLE[0x0] = 0xfff0f003
                Component base address 0xe000e000
                Peripheral ID 0x04000bb008
                Designer is 0x4bb, ARM Ltd
                Part is 0x8, Cortex-M0 SCS (System Control Space)
                Component class is 0xe, Generic IP component
        ROMTABLE[0x4] = 0xfff02003
                Component base address 0xe0001000
                Peripheral ID 0x04000bb00a
                Designer is 0x4bb, ARM Ltd
                Part is 0xa, Cortex-M0 DWT (Data Watchpoint and Trace)
                Component class is 0xe, Generic IP component
        ROMTABLE[0x8] = 0xfff03003
                Component base address 0xe0002000
                Peripheral ID 0x04000bb00b
                Designer is 0x4bb, ARM Ltd
                Part is 0xb, Cortex-M0 BPU (Breakpoint Unit)
                Component class is 0xe, Generic IP component
        ROMTABLE[0xc] = 0x0
                End of ROM table

>  

假如 flash 被 lock 住的話,dap info 的指令會回報錯誤,執行 mass erase 之後,就可以取得 MCU 的資料了。

到這裡,算是成功的一小步,接下來有空再慢慢進一步的研究。


2023年5月7日 星期日

HT32F52352 開發套件(帶排針) ESK32-30501S

在 pcstore 買的,只此一個,被我買了就缺貨了。

ESK32-30501S使用盛群32位元Arm®Cortex®-M0+高性能、低功耗微控制器HT32F52352。

  • 工作頻率最高可達48 MHz
  • 128KB Flash、16KB SRAM
  • 內建多組 TIMER、2 個I2C、2個SPI、2個USART、2個UART、 1個12位元ADC、USB、I2S、EBI 等,可針對許多外部裝置進行試驗和開發原型
  • 採用 64LQFP 封裝
  • 採用 8.000 MHz External Crystal Clock
  • 51個可程式化通用 IO (GPIO) 腳位

相關文件下載: https://www.holtek.com.tw/esk32-30501,以及下載 [使用手冊]。

要安裝 [HT32 Virtual COM Driver],然後 [e-Link32 Pro ICP Tool] 才能抓到 e-Link 32 lite,並且更新 firmware。


2023年5月1日 星期一

阿米洛68鍵盤拆解

這把從淘寶買回來的垃圾鍵盤,價格還不便宜,接近新台幣一千,但好奇它有什麼好的,還是買來看看。這把的型號是 Miya68 Pro,由 Varmilo 和 Ducky 聯名推出。 

完全沒有螺絲,所以不要到處找螺絲,把外表都挖壞了。


這下面沒有螺絲,別挖了。凹痕是灌模的凹孔,這麼貴的東西,會壓成這樣也太不像話了點。鍵盤 PCB 的型號是 Miya69-V2.2 (A)。

要改裝鍵盤,第一個當然是先看是用什麼晶片,好不容易,用 marco 鏡頭照出比較清晰的型號 -- ARM HSAK3201。


Google 結果,很多鍵盤用這顆 MCU,但完全沒有相關資訊。最下面的字註明是 ARM CPU,應是 32bit 的 CPU。最後找到這一條訊息,

Controller: ARM HSAK3201, HOLTEK (via HWInfo)

Holtek,就是盛群。在鍵盤應用介紹的網頁找到一顆 MCU 的編號 HT66FB576。依據其文件說明,這是一個 USB RGB LED Flash MCU。不過在文件中說,這是一個 "8-bit high performance RISC",所以可能不是這一個 IC。另外有 "多彩獨立光USB鍵盤" 的應用指南。等有空再來比對接腳,看是不是這一顆 CPU。後來也確定不是。

在這裡可以找到各類相關的開發指南 https://www.holtek.com.tw/professional/usb-mcu

電路板上有 4顆 24pin 的 IC,編號是 HSAK021,後來比對網上其他鍵盤的拆解說明,應是內建 PWM 的 16bit 恒流 LED driver,如 Macroblock 的 MBI5043,但沒找到 HolTek 出的相關 IC。每個 IC 有 16條 LED 控制輸出,RGB 三種顏色分開控制。不過,我可能會把燈光給廢了吧,不想搞這麼複雜。



然後,在 pcstore 上找到一家 "倍創科技",專賣 Holtek 的開發工具,其中 32-bit MCU 燒錄器e-Writer32 售價為新台幣 2千多元。後來找到比較便宜的開發板,約 6百元。測試失敗,又花了快一千元買一塊 e-Link32 Pro,做交叉比對,最後都能成功連上。

比對 "多彩獨立光USB鍵盤" 應用指南與實際量到的電路矩陣,可說是完全使用其參考電路,這倒是比較方便追蹤,不用另外整理按鍵矩陣。

這鍵盤的固件 (firmware,為了搜尋方便,使用中國用語) 是可以更新的,也許可以在不改電路之下,更改鍵盤功能。參考此文,阿米洛68键双模键盘修改固件调换键位,阿米洛固件更新工具 M32 BootLoader_180724.exe,依命名來看,基本上就是 STM32 的 DFU 寫入程式。後來繼續查下去,確認 M32 BootLoader 是給較舊的鍵盤使用的。Miya68 Pro 的更新程式是把程式和資料包在一個執行檔裡,而且資料可能是加密過的。但是我只要確定使用的 MCU,再改用 QMK,所以不用管它原來的 firmware 長得什麼樣。

且先不要破壞電路,看能不能有什麼辦法確定使用的 MCU。在 Linux 連上後,列出的訊息如下。

[  269.812200] usb 1-8.1.2: new full-speed USB device number 9 using xhci_hcd
[  269.885558] usb 1-8.1.2: device descriptor read/64, error -32
[  270.065558] usb 1-8.1.2: device descriptor read/64, error -32
[  270.245532] usb 1-8.1.2: new full-speed USB device number 10 using xhci_hcd
[  270.336711] usb 1-8.1.2: New USB device found, idVendor=04d9, idProduct=8008, bcdDevice= 2.03
[  270.336726] usb 1-8.1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  270.336733] usb 1-8.1.2: Product: USB-HID Keyboard
[  270.336738] usb 1-8.1.2: Manufacturer: HOLTEK
[  270.336743] usb 1-8.1.2: SerialNumber: AP0000000003
[  270.352409] input: HOLTEK USB-HID Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.1/1-8.1.2/1-8.1.2:1.0/0003:04D9:8008.000A/input/input29
[  270.409145] hid-generic 0003:04D9:8008.000A: input,hidraw5: USB HID v1.11 Keyboard [HOLTEK USB-HID Keyboard] on usb-0000:00:14.0-8.1.2/input0
[  270.410300] hid-generic 0003:04D9:8008.000B: hiddev97,hidraw6: USB HID v1.11 Device [HOLTEK USB-HID Keyboard] on usb-0000:00:14.0-8.1.2/input1
[  270.412672] input: HOLTEK USB-HID Keyboard Mouse as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.1/1-8.1.2/1-8.1.2:1.2/0003:04D9:8008.000C/input/input30
[  270.412910] input: HOLTEK USB-HID Keyboard System Control as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.1/1-8.1.2/1-8.1.2:1.2/0003:04D9:8008.000C/input/input31
[  270.469110] input: HOLTEK USB-HID Keyboard Consumer Control as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.1/1-8.1.2/1-8.1.2:1.2/0003:04D9:8008.000C/input/input32
[  270.469257] input: HOLTEK USB-HID Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.1/1-8.1.2/1-8.1.2:1.2/0003:04D9:8008.000C/input/input33
[  270.469402] input: HOLTEK USB-HID Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.1/1-8.1.2/1-8.1.2:1.2/0003:04D9:8008.000C/input/input34
[  270.469606] hid-generic 0003:04D9:8008.000C: input,hiddev98,hidraw7: USB HID v1.11 Mouse [HOLTEK USB-HID Keyboard] on usb-0000:00:14.0-8.1.2/input2
[  270.470828] hid-generic 0003:04D9:8008.000D: hiddev99,hidraw8: USB HID v1.11 Device [HOLTEK USB-HID Keyboard] on usb-0000:00:14.0-8.1.2/input3
lsusb 列出的裝置如下
# lsusb
Bus 001 Device 012: ID 04d9:8008 Holtek Semiconductor, Inc. USB-HID Keyboard

從這些訊息確定是盛群的 IC。

接下來幾天就跑去合歡山看杜鵑花了。出遊期間,腦袋不時會想著該怎麼做。偶爾上綱找一下資料,發現已經有人針對 Holtek 的 MCU 改過 QMK 了,[Quantum Mechanical Keyboard Firmware for POK3R]。繼續追下去,發現要解鎖 MCU 才能用,又找到了陌生的 OpenOCD。接下來就參雜使用 Holtek 的工具和 OpenOCD,試圖確認鍵盤所使用的 MCU。

繞一大圈之後,讀了網上高手的逆向工程教學,有一些基本能力後,開始各種嘗試。

試著使用 HT32 ICP TOOL (V 1.0.39) 來讀取 firmware 的資料,從第一個 target 開始一個一個選,顯示訊息都是 "Target MCU unmatch!"。

直到倒數沒幾個,接近失望之際,BINGO !  選到 HT32F1654,按下 [Read],顯示訊息變成 "Chip is Locked!"。

接下來的工作就會變比較簡單了,有前人的作法可以參考。

HT32F1653, HT32F1654HT32F1655HT32F1656 是同一系列的 MCU -- Cortex-M3 32-Bit Standard MCU,差別在於 Flash 和 SRAM 的大小。HT32F1654 的 Flash 是 64KB,SRAM  是 16KB。

最後,這顆 MCU 已停產,盛群網上公告的訊息,"Holtek 正式提出 HT32F1653/HT32F1654 產品終止到期。上述所提產品之最終訂單截止日為2022年9月30日"。所以官網上找不到它的 datasheet,只能在其他地方下載。 





網誌存檔