8051コアの流れを汲む100円マイコンSTC12C2052(aitendoで販売)のLチカに挑戦しました。
このマイコンはSTC社製ですが、8051コアになっており製品のラインアップで機能が追加されているようです。
一番基本のSTC12C2052を調理することでいろんな応用が期待できます。
また、8051コアは、EZ-USBなどのCPUコアに使われており、ソフトの応用もできそうです。
STC12C2052へのソフトの書き込みは、書き込みの用のローダが内蔵しており、シリアルでの通信でダウンロードができるようですが、ホスト側は専用のソフトが必要のようです。
書き込み方法等についてYoshi様のブログを参考にさせていただきました。
貴重な情報ありがとうございます。(すみません勝手にリンクしました。)
まずは開発環境ですが、とりあえずアセンブラで挑戦することにします。
Z80でも使用していたASxxxxのas8051を使用します。
一応Linux使いなので、RaspberryPi3のRaspbian上で行います。
まずは、asxxxxですが バージョンが新しくなっていたので再インストールしました。
ソースコードを取得します。
wget http://shop-pdp.net/_ftp/asxxxx/asxs5p31.zip
展開します。
unzip -L -a asxs5p31.zip
ビルド会場に移動します
cd asxv5pxx/asxmak/linux/build
コンパイルします。
make
生成された実行ファイルの場所に移動します。
cd ../exe
as8051とaslinkをシステムのbinフォルダーにコピーします。
sudo cp as8051 /usr/local/bin
sudo cp aslink /usr/local/bin
これでアセンブラ環境はできました。
次は、作成したHexファイルをSTC12C2052にダウンロードするためのUSBシリアルケーブの設定を行います。
今回使用したのはamazonで格安な「オーディオファン シリアルケーブル USB-A - TTL シリアルコンソール USB変換ケーブル 1m」を使用しました。
USBシリアルケーブルをRaspberryPiに接続します。
lsusbを実行します。
$ lsusb
Bus 001 Device 006: ID 192f:0416 Avago Technologies, Pte. ADNS-5700 Optical Mouse Controller (3-button)
Bus 001 Device 004: ID 04f3:0103 Elan Microelectronics Corp. ActiveJet K-2024 Multimedia Keyboard
Bus 001 Device 007: ID 1bcf:0c31 Sunplus Innovation Technology Inc. SPIF30x Serial-ATA bridge
Bus 001 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 008: ID 0424:7800 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
リストの中からシリアルデバイスを確認します。
「Bus 001 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port」が該当しますのでこの中の IDを控えます。
このシリアルケーブルはID 067b:2303 となります。
続いて一般ユーザーがシリアルポートを使えるようにするために、シリアルデバイスのルールを追加します。
下記のデレクトリィに移動します。
cd /etc/udev/rules.d/
ルールファイルを新規に作成します。ここでは54-udev.rulesとしました。
sudo vim 54-udev.rules
先ほど控えたシリアルケーブルのIDから、ATTRS{idVendor}==にIDNoの先頭067b、ATTRS{idProduct}==にIDNoの 後方2303にします
KERNEL=="ttyUSB*", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", GROUP="uucp", MODE="0666"
これで、シリアルポートを一般ユーザーが使用できるようになりました。
次に書き込み用のpythonで記述されているstcgalをダウンロードします。
sudo pip3 install stcgal
Lチカのサンプルプログラムを作成します。
今回はP3.5(9pin)にLEDを接続し、点滅するようにしました。
リセット後、0x0000からスタートするので、ljmp命令でmainに飛びます。
mainではポートの設定をしています。P3.5のみ出力で他は入力設定です。
setbで p3.5をHにして、時間待ちのdelayサブルーチン復帰後、p3.5のビット状態を反転し、ループします。
delayルーチンは、stc12c2052仕様書のサンプルプログラムを拝借しました。
全体的なプログラムは下記のようになります。
ファイルネームは 2052_led01.asm としました。
; STC12C2052 LED by Pinecone 2019/11/8
;
; STC12C2052 cpu
; Flash ROM 2Kbyte
; RAM 256byte
; External clock -
; assembler
; program start 000H 0000H-07ffH
; main 100H
;
; assemblers ASxxxx and ASlink V5.31
; file name 2052_led01.asm
; $ as8051 -l -s -o 2052_led01.asm
; $ aslink -i 2052_led01
; $ program download stcgl 2052_led01.ixh
;
P3M0 .equ 0xb1
P3M1 .equ 0xb2
.area TEST(ABS)
.org 0x0000
ljmp main
.org 0x0100
main:
mov P3M0,0b11011111 ;P3.5 output
mov P3M1,0b00100000 ;P3.7 P3.6 P3.4-P3.0 input
setb p3.5
loop: lcall delay
cpl p3.5
sjmp loop
delay:
clr a
mov r0,a
mov r1,a
mov r2,#0x20
delay1:
djnz r0,delay1
djnz r1,delay1
djnz r2,delay1
ret
アセンブルします。
as8051 -l -s -o 2052_led01.asm
リンクします。
aslink -i 2052_led01
これで、2052_led01.ihx が作成されて書き込みの準備ができました。
ハードウエアの準備をします。
回路図は下記の通りです。今回は書き込みのテストということで、ブレッドボードで作成しました。
電源はスマホ対応の電源アダプターから、USBソケット( 電源用マイクロUSBコネクタDIP化キット :秋月電子)を使用しました。
JP1,JP2は、書き込み用ローダを起動させるためにGNDに接続しておきます。 USBシリアルケーブルを接続し、電源アダプターを接続します。
VCC_SWを切りの状態で、書き込みソフトを起動します。
stcgal
実行すると
Waiting for MCU, please cycle power: とメッセージが表示されるので、VCC_SWをONして電源を接続します。
Waiting for MCU, please cycle power: done
Protocol detected: stc12a
Target model:
Name: STC12C2052
Magic: F202
Code flash: 2.0 KB
EEPROM flash: 4.0 KB
Target frequency: 5.762 MHz
Target BSL version: 5.8D
Target options:
low_voltage_reset=low
clock_source=internal
watchdog_por_enabled=False
watchdog_stop_idle=False
watchdog_prescale=256
eeprom_erase_enabled=False
bsl_pindetect_enabled=False
Disconnected!
とメッセージが表示されれば、接続は正常です。
再度VCC_SWを切りVCCをOFFにします。
書き込みを行います。
stcgal 2052_led01.ihx
Waiting for MCU, please cycle power:の表示が出たら VCC_SWをONします。
Protocol detected: stc12a
Target model:
Name: STC12C2052
Magic: F202
Code flash: 2.0 KB
EEPROM flash: 4.0 KB
Target frequency: 5.766 MHz
Target BSL version: 5.8D
Target options:
low_voltage_reset=low
clock_source=internal
watchdog_por_enabled=False
watchdog_stop_idle=False
watchdog_prescale=256
eeprom_erase_enabled=False
bsl_pindetect_enabled=False
Loading flash: 283 bytes (Intel HEX)
Switching to 19200 baud: checking setting testing done
Erasing 2 blocks: done
Writing flash: 640 Bytes [00:00, 2240.02 Bytes/s]
Setting options: done
Disconnected!
の表示で書き込み終了です。
書き込みが終われば、接続しているLEDが点滅するはずです。
なんとか Lちか することできました。