Lispと一緒(32) ラズパイPico2でもuLisp、SPIメモリ読み書き

Joseph Halfmoon

Common Lispの系譜を継ぐuLispをラズパイPico2マイコン上で練習中。前回はSPIの出力波形を堪能。しかし波形を眺めているだけではSPIしたことになりませぬ。今回はSPI接続のSRAM、23LC512をターゲットにSPI経由での書き込みと読み出しを実験。uLispのコードもCのコードも変わらんぜよ。

※Lispと一緒 投稿順 index はこちら

※実機確認は Raspberry Pi Pico2で行ってます。

※使用させていただいとります uLisp のバージョンは 4.6b (Arm用)です。

23LC512、SPI接続SRAM

SPIの実験用に何度となく使ってきたのがSPI接続のSRAM23LC512です。米マイクロチップ社製の512KビットSRAM、8x64K構成です。製品ページが以下に。

23LC512

別シリーズの以下の回でマイクロチップ社のMCUと接続して実験している回(開発ツールはC言語)があったので、今回はそれを踏襲。

PIC三昧(14) MSSP(SPI)で23LC512にRWしてみる、PIC16F18855

ホストをPIC16F18855からラズパイPico2 RP2350に変更、開発ツールはCからuLispに挿げ替え。ちょろいもんだ。ホントか?

まずは接続回路図が以下に。Pico2_23LC512_Schematic

23LC512を読み書きするために作成した uLisp 関数が以下に。

(defun write23LC512 (addr dat)
  (with-spi (str 17)
    (write-byte 2 str)
    (write-byte (logand #xFF (ash addr -8)) str)
    (write-byte (logand #xFF addr) str)
    (write-byte (logand #xFF dat) str)))

(defun read23LC512 (addr)
  (with-spi (str 17)
    (write-byte 3 str)
    (write-byte (logand #xFF (ash addr -8)) str)
    (write-byte (logand #xFF addr) str)
    (read-byte str)))

上記の関数により、64KバイトのSRAMの任意のアドレスに8ビットデータを書き込み、読み出し出来るハズ。

実機で動作確認

動作確認用に以下実行してみました。

(write23LC512 #x2000 85)
(write23LC512 #x2001 170)
(read23LC512 #x2000)
(read23LC512 #x2001)

0x2000番地に85、0x2001番地に170を書き込んでおいて、0x2000番地を読み出し、0x2001番地を読み出しっと。

uLisp上で実行した結果が以下に。uLisp_23LC512_RW

読み書き成功しているようだね。よかった。

Lispと一緒(31) ラズパイPico2でもuLisp、SPI出力 へ戻る

Lispと一緒(33) ラズパイPico2でもuLisp、I2Cポートスキャン へ進む