8051コア
はじめに
Duoで使用されているCPUには8051コアが含まれています。8051サブシステムはRTCによって独立して電源供給されるモジュール内に位置しています。サブシステムは8051、I2C/UART/SPI NOR/SDコントローラ、タイマー/WDT、割り込み管理、Mailbox IPで構成されています。システムソフトウェアは8051を利用してスリープモード中のウェイクアップ条件の管理や、外部デバイスとの通信を行うことができます。
クイックスタート
8051コアのコンパイルガイド
ソースコード: github
実行例:
git clone https://github.com/milkv-duo/duo-8051.git
cd duo-8051/sdcc/mars/project/base_project
make clean && make
コンパイルが成功すると、sdcc/mars/project/base_project/outputにmars_mcu_fw.binが生成されます。
ファームウェアの書き込み方法
まずファームウェアとツールをダウンロードし、zipパッケージを解凍します:firmware.zip
Ⅰ. 8051-SRAMにファームウェアを書き込む場合:
-
8051_up,mars_mcu_fw.bin,blink.shを/mnt/dataにコピーし、実行・読取権限を付与します。 -
8051_upを実行してファームウェアを自動更新し、8051コアを起動します。 -
blink.shを実行します。このスクリプトは8051コアにデータを送信し、青色LEDを点滅させます(実行前に/mnt/system/blink.shが削除されていることを確認してください)。
この方法で動作する8051カーネルファームウェアは8KBを超えてはいけません。超えると動作しない場合があります。
Ⅱ. DDRメモリにファームウェアを書き込む場合:
- SDKのメモリ割り当てを変更し、
build/boards/[chip model]/[board config]/memmap.pyを修正します。
MemoryMapに以下を追加:
# ==============
# 8051
# ==============
CHIP8051_SIZE = 512 * SIZE_1K
CHIP8051_ADDR = DRAM_BASE + DRAM_SIZE - CHIP8051_SIZE
以下を修正:
# ==============
# C906L FreeRTOS
# ==============
FREERTOS_SIZE = 768 * SIZE_1K
# FreeRTOSは8051の後
FREERTOS_ADDR = CHIP8051_ADDR - FREERTOS_SIZE
FSBL_C906L_START_ADDR = FREERTOS_ADDR

-
ファームウェアを再コンパイルし、Duoボードに書き込みます。
-
8051_up,mars_mcu_fw.bin,blink.sh,8051_boot_cfg.iniを/mnt/dataにコピーし、実行・読取権限を付与します。 -
8051_upを実行してファームウェアを自動更新し、8051コアを起動します。 -
blink.shを実行します。このスクリプトは8051コアに情報を送信し、青色LEDを点滅させます(実行前に/mnt/system/blink.shが削除されていることを確認してください)。
8051のDDRメモリサイズをカスタマイズしたい場合は、以下を修正してください:
CHIP8051_SIZE = 512 * SIZE_1K
ここで512はカスタムサイズです。また、8051_boot_cfg.iniのアドレスもカスタムアドレスに変更してください。
Duoのアドレス計算式は「2147483648+ 64*1048576-[カスタムサイズ]*1024」です。
Duo-256Mのアドレス計算式は「2147483648+256*1048576-[カスタムサイズ]*1024」です。
(configファイルにアドレスを記入する際は、必ず16進数アドレス 0xXXXXXXX に変換してください。)