LUFA MassStorage Bootloaderを使う
環境
- Ubuntu 18.04
開発者がすること
cd qmk_firmware/lib/lufa/Bootloaders/MassStorage
- 40% Keyboards: Self Flashing Planck に沿って
makefile
を書き換える
MCU = atmega32u4 ARCH = AVR8 BOARD = LEONARDO F_CPU = 16000000 FLASH_SIZE_KB = 32 BOOT_SECTION_SIZE_KB = 4
BootloaderMassStorage.c
を適切に書き換える#if (BOARD == BOARD_LEONARDO)
から#elif ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1))
までの間に書くPORT
がプルアップ,DDR
が出力,PIN
が入力値を表す?(わかってないけど雰囲気で書き換えたら動いた)- 適当にビット演算して代入してください
col0がF4, row0がB1であり, ダイオードがcol2rowのときの例:
#if (BOARD == BOARD_LEONARDO) PORTF |= (1 << 4); //F4を入力にしてプルアップ DDRB |= (1 << 1); // Set pin B1 as low B1をGNDに PORTB &= ~(1 << 1); Delay_MS(25); JumpToApplication = ((PINF & (1 << 4)) != 0); //F4がfalseならブートローダーを起動 /* Disable pull-up after the check has completed */ PORTF &= ~(1 << 4);
Arduino as ISPが /dev/ttyACM0
のとき
avrdude -p m32u4 -c avrisp -P /dev/ttyACM0 -b 19200 -e -v avrdude -p m32u4 -c avrisp -P /dev/ttyACM0 -b 19200 -U lfuse:w:0xff:m -U hfuse:w:0xd8:m -U efuse:w:0xc9:m -v
avrdude -p m32u4 -c avrisp -P comXXX -b 19200 -B 4 -U flash:w:"BootloaderMassStorage.hex" -v
- qmk_firmwareを
make keyboard:keymap:flashbin
としてmakeFLASH.bin
ができる
- ユーザーに
FLASH.bin
を渡す
ユーザーがすること
FLASH.bin
を受け取る- 指定されたキーを押しながらキーボードを接続
LUFA BOOT
として認識される
Ubuntu
FLASH.bin
をsudo dd if=FLASH.bin of=/dev/sdb seek=4
で転送(LUFA BOOT
が/dev/sdb1
のとき)LUFA BOOT
をアンマウントする
Windows
FLASH.bin
をドラッグ&ドロップするLUFA BOOT
を「安全に取り外し」- キーボードを抜いて再度接続する
まとめ
Ubuntuでドラッグ&ドロップで転送する方法を見つけられなかったのが悔しい。
ツールをインストールすることなくOS標準のコマンドで転送できるだけで価値があると思う。
.binを作るWebアプリを誰か作ってください(他力本願)