Skip to content

Instantly share code, notes, and snippets.

@stkchp
Last active August 21, 2016 02:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stkchp/9da34771bd139598a3758857b6590395 to your computer and use it in GitHub Desktop.
Save stkchp/9da34771bd139598a3758857b6590395 to your computer and use it in GitHub Desktop.
Arduboyについてのメモ

Arduboyについてのメモ

  • 対象はArduboy v1.0
  • 接続パーツ以外はatmega32u4のchip内蔵機能やCPUによるEmulationで実装するので、CPUに関する事の方が多いかも。

Spec

  • CPU: atmega32u4
  • Memory: 2.5KB(on chip)
  • Flash: 32KB(on chip)
  • EEPROM: 1KB(on chip)
  • Display: OLED1306(SPI)

Pin

  • PB0 -> SS(SPI)(RX LED) - OUTPUT

  • PB1 -> SCK(SPI) - OUTPUT

  • PB2 -> MOSI(SPI) - OUTPUT

  • PB3 -> MISO(SPI) - INPUT(Auto Config by Chip)

  • PB4 -> A Button(left) - INPUT PULLUP

  • PB5 -> BLUE LED - OUTPUT(Analog)

  • PB6 -> RED LED - OUTPUT(Analog)

  • PB7 -> GREEN LED - OUTPUT(Analog)

  • PC6 -> Speaker1 - OUTPUT

  • PC7 -> Speaker2 - OUTPUT

  • PD0

  • PD1

  • PD2

  • PD3

  • PD4 -> D/C#(OLED1306) - OUTPUT

  • PD5 -> (TX LED) - OUTPUT

  • PD6 -> CS#(OLED1306) - OUTPUT

  • PD7 -> RES#(OLED1306) - OUTPUT

  • PE2 -> (HWB HardWareBoot) - INPUT

  • PE6 -> B Button(right) - INPUT PULLUP

  • PF0

  • PF1

  • PF4 -> Down - INPUT PULLUP

  • PF5 -> Left - INPUT PULLUP

  • PF6 -> Right - INPUT PULLUP

  • PF7 -> Up - INPUT PULLUP

  • 注意

    • 未接続に見える部分も何かに使われているかもしれない
    • OLED1306のvsyncに使われるFRはピンに接続されていない模様(そもそもmoduleから足が出てない?)
    • ButtonのInputは押されたらLOW、離されたらHIGHを示す
    • MISOのINPUT設定はSPI関連レジスタを弄った際に自動設定される

Arduino Leonardo Pin

Default Layout

  • 0 -> PD2
  • 1 -> PD3
  • 2 -> PD1
  • 3 -> PD0
  • 4 -> PD4
  • 5 -> PC6
  • 6 -> PD7
  • 7 -> PE6
  • 8 -> PB4
  • 9 -> PB5
  • 10 -> PB6
  • 11 -> PB7
  • 12 -> PD6
  • 13 -> PC7
  • A0 -> PF7
  • A1 -> PF6
  • A2 -> PF5
  • A3 -> PF4
  • A4 -> PF1
  • A5 -> PF0
  • SS -> PB0
  • SCK -> PB1
  • MOSI -> PB2
  • MISO -> PB3
  • RX -> PD5
  • TX -> PB0

参考: VGM12864SPI-Wを使う際の配線

VGM12864SPI-Wの配線図

ArduboyではHardware SPIを使用

  • 3.3V -> 3V
  • CS -> PD6 -> 12
  • A0 -> PD4 -> 4
  • SDA -> MOSI
  • SCK -> SCK
  • RES -> PD7 -> 6
  • GND -> GND(⏚)

Bootloader

  • Arduino Leonardo(標準)のものを使用
  • USB 2.0(要確認)でソフトウェアの書き込み等(avr109のself programming機能相当)を担当する

Software

  • Speaker, LED, OLED, Buttonを扱うClassがArduinoのLibraryに入っている

  • Library Managerがあるので、それを使ってArduboyを探してInstallすればOK

  • サンプルスケッチの中にHello World等があるので、それをベースに開発を進めると楽

  • Flash/Memoryが少ないのでリソースに気を付けながらプログラミングを行う(最悪Bootloader領域に書き込むと別途AVRプログラマが必要)

  • HelloWorldの時点で使用リソースが多い問題

    • Arduboy Classに起因する部分は有志の人が容量削減・効率化に励んでいるのでversion上がる毎に改善されそう(githubを見た感じ活発)
    • Arduino標準機能であるUSB SerialやHID、Bootloaderの切り替えを担当する機能が入っているので、コードサイズがデフォルトで大きい
    • 専用のhex loaderとbootloader作れば容量削減出来るかも

バイナリ調査

  • elfファイルをobj-dumpを使いsファイルを作成し、以下のコマンドでどの命令が多いか調査可能
 $ cat hogehoge.s | egrep '^[ \t]+[a-f0-9]+:' | cut -b24- | awk '{print $1}' | egrep '^[a-z]{2,}' | sort | uniq -c | sort -n
  • 参考としてhelloworldプログラムは以下の結果となった
      1 mulsu
      1 nop
      1 sbic
      1 sbis
      1 sei
      1 sleep
      2 bst
      2 ijmp
      2 inc
      2 wdr
      3 cbi
      4 brtc
      4 neg
      5 reti
      5 sbi
      7 asr
      7 brge
      7 brpl
      7 icall
      8 brcc
      9 lsr
     10 brcs
     10 rcall
     11 ror
     12 brlt
     13 mul
     14 sbrc
     15 cli
     16 dec
     23 sbrs
     26 cpse
     29 cp
     30 sbiw
     32 or
     33 eor
     33 sub
     36 com
     39 adiw
     39 sbc
     44 and
     52 out
     53 andi
     60 ori
     61 lpm
     61 st
     63 breq
     63 cpc
     64 brne
     64 jmp
     66 sbci
     66 subi
     68 cpi
     69 in
     73 adc
     78 ld
     79 add
     81 std
     84 ret
    111 call
    119 ldd
    123 mov
    180 lds
    201 movw
    201 sts
    214 rjmp
    269 push
    293 pop
    429 ldi

疑問に思ったことと答え

  • V-Syncは出来る?
  • Devkitって何?
    • 試作機(prototype)で、Speakerは1つ、KEY接続ピンやLED個数が異なる
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment