主要的動機是要在鍵盤上加小紅點,想直接用鍵盤上原有的 MCU。目前拆解的鍵盤是阿米洛 68鍵鍵盤 Miya68 Pro,上面的主控是 HSAK3201,只知道是 Holtek 出的 ARM CPU。
參考連結:
- Hardware Debugging for Reverse Engineers Part 1: SWD, OpenOCD and Xbox One Controllers
- Snake on a Keyboard - Intro
- Using docker for embedded systems development
- HT32 Unlocking
- OpenOCD添加第三方设备支持:HT32F52352 Cortex-M0
- CMSIS-DAP和openOCD那些事
先在 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 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 的資料了。
到這裡,算是成功的一小步,接下來有空再慢慢進一步的研究。
沒有留言:
張貼留言