0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MacからMachiKaniaへシリアル通信でファイルを転送する方法

Posted at

はじめに

PicoCalcのキーボードでプログラムを入力するのがちょっと面倒なのでMacでMacで入力・編集することが多いです。そのプログラムの実行までには意外と手間がかかるのでMachiKaniaに簡単に転送できないかなと思い、シリアル通信でプログラムを転送する方法を試してましたのでそれをまとめました。

Macで入力・編集したプログラムをMachiKaniaで実行するまでの流れ

MachiKaniaで実行するプログラムをMacで入力・編集した場合、そのプログラムを実行するには次の手順を経ます。

  1. Macのエディタでプログラムを入力・編集
  2. MachiKania用のSDカードをMacにマウント
  3. 入力・編集したプログラムをSDカードにコピー
  4. SDカードをMacからアンマウント
  5. SDカードをPicoCalcに挿入
  6. PicoCalcの電源を投入
  7. F1キーを押してファイル一覧を表示
  8. 実行するプログラムを選択してロード
  9. F4キーを押してプログラムを実行

以上のように意外と手間がかかります。

検証環境

今回は下記の環境でプログラムを作成し、動作を確認しました。

  • macOS : 15.6.1
  • PicoCalc : Raspberry Pi Pico 2 W搭載
  • MachiKania : PicoCalc版Phyllosoma 1.6.0
  • USB-シリアルモジュール:CP2102 USB to UART Bridge Controller

USB-シリアルモジュールは数年前にIchigojam用に購入したものです。

IMG_2017.jpeg

接続

MacとPicoCalcをUSB-シリアルモジュールで接続します。接続するピンは次のとおりです。

USB-リアルモジュール PicoCalc
RX UART0_TX
TX UART0_RX
GND GND

PicoCalcのGPIO端子のUART端子はRaspberry Pi Picoの次の端子に繋がっています(clockworks_Mainboard_V2.0_Schematic.pdfにより

PicoCalc外部端子 Raspberry Pi Pico
UART0_RX GP1
UART0_TX GP0
UART1_RX GP12
UART1_TX GP11

MachiKaniaではUARTに使用するGPIOピンはSDカード内の設定ファイルMACHIKAP.INIの131,132行目で次に示すように送受信に使用するGPIOピンを指定します。

131:UARTTX=0
132:UARTRX=1

シリアル通信で転送の流れ

Macに保存されているBASICのプログラムをシリアル通信でMachiKania(PicoCalc)に転送する手順は次のとおりです。

  1. MacとMachiKania(PicoCalc)をUSB-シリアルモジュールで接続
  2. MachiKaniaで受信プログラムを実行
  3. Macのターミナルで転送用コマンドでBASICのプログラムを送信
  4. MachiKaniaの受信プログラムを終了

受信プログラム

MachiKaniaの受信プログラムは入門MachiKaniaの35ページ目のシリアル通信の使用例(1)「 115.2Kbpsでシリアルデータを読み込み、SDカードに「TEST.TXT」というファイル名で保存する。ESCキーで終了する。」のプログラムを流用し、保存するファイルの入力をプログラムを冒頭に追加しました。
プログラムの流れは次のとおりです。

  1. 受信したプログラムを保存するファイル名を入力
  2. 同じ名前のファイルがある場合は再入力
  3. 115200bpsでシリアル回線を開く
  4. 入力されたファイル名のファイルを書き込みモードで開く
  5. シリアル回線から受信したデータをファイルに書き込む
  6. ESCキーが押されるまで受信を繰り返す
SRX.BAS
PRINT "=== Serial receive ==="

DO
  PRINT "Enter FILENAME: ";
  F$ = INPUT$()
  L = LEN(FFIND$(F$))
  IF L != 0 then PRINT "File ";F$;" is existed!"
LOOP UNTIL L = 0

SERIAL 115200,0
FOPEN F$,"W"
WHILE 1
  A=SERIALIN()
  IF A>=0 THEN FPUTC A
  IF INKEY() =  27 THEN BREAK
WEND
FCLOSE

END

Macからプログラムをシリアル転送

Macからのシリアル転送のためにminicomを使います。インストールされていない場合はbrewでインストールします。

$ brew install minicom

minicomをインストールするとASCIIファイル転送コマンドのascii-xfrも同時にインストールされるのでこのコマンドとminicomを組み合わせてBASICのソースファイルを転送します。

以下がそのシェルスクリプトです。

ascii-xfrの出力をパイプでminicomへ渡して転送します。

tx.sh
#!/bin/bash

echo "File send to MachiKania"

if [ -f $1 ]
then
    DEV=`ls /dev/cu.usb* | grep usb`
    FILE="$1"
    ascii-xfr -s -v -n "$FILE" | minicom -D "$DEV" -b 115200 -o
else
    echo "File $1 not found!"
fi

ascii-xfrコマンドのオプションの意味は次のとおりです。

オプション 意味
-s ファイル送信
-v 進捗表示
-n CRからCRLF、その逆の変換をしない

minicomのオプションの意味は次のとおりです。

オプション 意味
-D デバイスファイルの指定
-b 転送速度の指定
-o 初期化をスキップ

スクリプトの引数に転送するBASICのプログラムのファイル名を指定します。

実行例

MachiKaniで受信プログラムを実行し、保存するファイル名を入力します。

IMG_2018.jpeg

次にMacのターミナルで転送するソースファイル、たとえばJMA.basを転送するときの例を示します。スクリプトの実行が完了すると画面がクリアされます。

$ ./tx.sh JMA.bas
File send to MachiKania
ASCII upload of "JMA.bas"

0.4 Kbytes transferred at 401 CPS... Done.

Welcome to minicom 2.10

OPTIONS:
Compiled on Feb 22 2025, 10:10:35.
Port /dev/cu.usbserial-0001, 20:09:25 [F]

Press Meta-Z for help on special keys
$

Macのシェルスクリプトの実行が完了したらMachiKaniaで実行中のプログラムをESCキーを押して終了します。

F1キーでファイル一覧を表示して、転送されていることを確認し、ロード後実行します。

さいごに

シリアル通信でのMacからMachiKaniaへのBASICプログラムの転送ができました。機器を直結しているので特に問題なく転送できています。
今回の逆のプログラムも作らないといけないですね。

参考サイトなど

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?