MakeCode Arcade は、Web 上のノーコード開発ツール(や Javascript / Python)でゲームなどが作れる環境です。 STEM教育などにも使われています。
いくつかのメーカからハードウェアが発売されていますが、回路図なども公開されているので、自前でハードウェアを作ることも可能です。
手持ちの STM32F401 ボードがありましたので、これ上に MakeCode Arcade の実行環境を構築したいと思います。
今回使ったのは 96Boards というメーカから発売されていた Carbonというボードです。 Zephyr OSのために作られたボードということらしいです。 Zepher は高機能な RTOS なのですが、今流にいえば Unikernel なので、コードのビルドに時間がかかるという開発的にはちょっと使いづらい OS です。
このボード自体は seeed studio のセールで安かったのでいくつか買っていた積みボードの一つです。
ボード上には、メインMCUとして STM32F401RE、サブMCUとして Bluetooth 通信用の nRF51822 が搭載されています。 Bluetooth 用アンテナの半田付けが甘く、取れやすいのが欠点かと。 (今回つかったボードもアンテナ行方不明…)
STM32F4 の bootloader の 元はこちらになります。 https://github.com/mmoskal/uf2-stm32f
これを持ってきて、boards の下に新しいディレクトリ(今回は carbon
)をつくって以下のファイルを board.h
という名前で置きます。
ボタン設定は、ボードのコネクタ上に出ているピンに割り当てています。
#ifndef BOARD_H
#define BOARD_H
#define OSC_FREQ 16
#define USBDEVICESTRING "96B Carbon"
#define USBMFGSTRING "Contoso Ltd."
#define BOARD_FLASH_SECTORS 8
#define BOARD_FLASH_SIZE (512 * 1024)
#ifdef DEFINE_CONFIGDATA
__attribute__((section(".config"))) __attribute__((used)) //
const uint32_t configData[] = {
/* CF2 START */
513675505, 539130489, // magic
32, 100, // used entries, total entries
4, 0x26, // PIN_BTN_A = PC06
5, 0x27, // PIN_BTN_B = PC07
13, 0x03, // PIN_LED = PA03
32, 0x1D, // PIN_DISPLAY_SCK = PB13
33, 0x1E, // PIN_DISPLAY_MISO = PB14
34, 0x1F, // PIN_DISPLAY_MOSI = PB15
35, 0x1c, // PIN_DISPLAY_CS = PB12
36, 0x01, // PIN_DISPLAY_DC = PA01
37, 0xa0, // DISPLAY_WIDTH = 160
38, 0x80, // DISPLAY_HEIGHT = 128
39, 0x020180, // DISPLAY_CFG0 = 0x80 ST7735(160x128 GreenTAB)
39, 0x80, // DISPLAY_CFG0 = 0x80
40, 0x603, // DISPLAY_CFG1 = 0x603
41, 0x16, // DISPLAY_CFG2 = 0x16
43, 0x00, // PIN_DISPLAY_RST = PA00
44, 0x02, // PIN_DISPLAY_BL = PA02
47, 0x22, // PIN_BTN_LEFT = PC02
48, 0x23, // PIN_BTN_RIGHT = PC03
49, 0x24, // PIN_BTN_UP = PC04
50, 0x25, // PIN_BTN_DOWN = PC05
51, 0x26, // PIN_BTN_MENU = PC08
60, 0x16, // PIN_JACK_TX = PB06
64, 0x13, // PIN_JACK_PWREN = PB03
65, 0x1A, // PIN_JACK_SND = PB10
204, 0x80000, // FLASH_BYTES = 0x80000
205, 0x18000, // RAM_BYTES = 0x18000
208, 0x59ea3b60, // BOOTLOADER_BOARD_ID = 0x59ea3b60
209, 0x57755a57, // UF2_FAMILY = STM32F401
210, 0x10, // PINS_PORT_SIZE = PA_16
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* CF2 END */
};
#endif
#endif /* BOARD_H */
置いたら
make BOARD=carbon
でビルドします。ビルドすると bootloader.bin
というファイルができるので、CubeProgrammer などで書き込みます。
ブートローダを書き込んだ後に、PC に接続すると Raspberry Pi zero や mbed ボードのように USB マスストレージデバイスとして見えますので、
USBドライブ上にファームウェアファイル(uf2
) をコピーすれば実行されます。
ファームウェア書き込み待ち。
実行したところ。
いい加減にボードを完成させないと…