2016年7月7日木曜日

SwissMicros DM15Lのfirmware upgrade (2018-09-05更新)

(更新履歴)

* 2020-01-17: V30が公開された
* 2019-06-05: V29が公開された
* 2018-09-05: V27が公開された
* 2018-03-26: V26が公開された
* 2017-12-26: V24が公開された
* 2017-06-14: V23が公開された

(更新履歴ここまで)


2016-03-03にSwissMicros DM15L (RPNなscientific calculatorであるHP-15Cのclone)のfirmware V21が公開されていたことに今更気付いたのでupgradeしてみた。

必要な道具やsoftware


DM15Lのfirmware upgradeをLinux boxで行うには、以下の準備が必要:

* Linux kernelに"CP201x USB to UART Bridge VCP driver" (3.3以降in-tree)を組み込む
* lpc21ispをinstall (In-circuit programming (ISP) of ARM and Cortex microcontrollers)
* Latest firmware (自分の場合はDM15_M1B_21.hex)をdownload

DM15L側は:

* 背面のRESET buttonを押す為の爪楊枝
* PCとDM15Lを接続する為のUSB cable (多分Type-A 〜 mini-B)

環境

(2016-03-03)

* Linux box (ASUS X200LA)
* Linux kernel 4.6.3
* Debian GNU/Linux Sid
* SwissMicros DM15L (DM15 M1B V19)

(2017-06-14)

* Linux box (Shuttle SZ170R8)
* Linux kernel 4.11.3
* Debian GNU/Linux Sid
* SwissMicros DM15L (DM15 M1B V21)

手順


https://www.swissmicros.com/firmware.phpの"Firmware upgrade under Linux"に解説されている。

Upgrade操作により、DM15L内のprogramやregisterの内容は消えてしまうので注意。ただ、firmware upgradeに失敗してもDM15Lが使えなくなったりはしない (所謂「文鎮化」しない)とのこと。

> Don't worry, it is not possible to break or brick the calculator with this or any other upgrade procedure.

実際の手順


* Linux kernelにCP210x USB to UART Bridge VCP driverを組み込む
  + Device drivers → USB support → USB Serial Converter support → USB CP210x family of UART Bridge Controllers
  + Kernelをrebuild → installしてreboot
* Latest firmwareをdownload
* USB cableでDM15LとLinux boxを接続
* dmesgで確認すると/dev/ttyUSB0とかそれっぽいdeviceが検出されているはず
* sudo lpc21isp DM15_M1B_V21.hex /dev/ttyUSB0 115200 12000
* "Synchronizing"とmessageが出ている間にDM15Lの背面にあるRESETを押す
* flashが終わったらcableを外してもう一度DM15LのRESETを押す

(2017-06-14追記)

DM15Lはこんな感じで認識された:

% dmesg
...
[695628.530638] usb 1-5: new full-speed USB device number 9 using xhci_hcd
[695628.700180] usb 1-5: New USB device found, idVendor=10c4, idProduct=ea60
[695628.700181] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[695628.700183] usb 1-5: Product: CP2102 USB to UART Bridge Controller
[695628.700183] usb 1-5: Manufacturer: Silicon Labs
[695628.700184] usb 1-5: SerialNumber: 0001
[695628.709685] usbcore: registered new interface driver cp210x
[695628.709692] usbserial: USB Serial support registered for cp210x
[695628.709707] cp210x 1-5:1.0: cp210x converter detected
[695628.711611] usb 1-5: cp210x converter now attached to ttyUSB0

実際の手順のlog (firmwareは~/Downloadsにある)

% sudo lpc21isp Downloads/DM15_M1B_23.hex /dev/ttyUSB0 115200 12000
lpc21isp version 1.97
File Downloads/DM15_M1B_23.hex:
        loaded...
        converted to binary format...
        image size : 39283
Image size : 39283
Warning:  data not aligned to 32 bits, padded (length was 9973, now 9974)
Synchronizing (ESC to abort).......... OK
Read bootcode version: 2
7
Read part ID: LPC1115.../303, 64 kiB FLASH / 8 kiB SRAM (0x00050080)
Will start programming at Sector 1 if possible, and conclude with Sector 0 to ensure that checksum is written last.
Erasing sector 0 first, to invalidate checksum. OK
Sector 1: ...............................................................................................
Sector 2: ...............................................................................................
Sector 3: ...............................................................................................
Sector 4: ...............................................................................................
Sector 5: ...............................................................................................
Sector 6: ...............................................................................................
Sector 7: ...............................................................................................
Sector 8: ...............................................................................................
Sector 9: ...........................................................
Sector 0: ..............................................................................................
Download Finished... taking 6 seconds
Now launching the brand new code

Documentされていなかった事柄


DM15LのRESETを押すと最後に"PR Error"が出るが、これは"HP-15C Owner's Handbook"にある通り正常な反応。一度offにしてもう一度電源を入れ直すと正常に使える。ちなみに"PR Error"はprogram errorではなくてpower error。

> Pr Error
> Continuous Memory interrupted and reset because of power failure.

cf. 208 Appendix A: Error Conditions - HP-15C Owner's Handbook