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構成です。製品ページが以下に。
別シリーズの以下の回でマイクロチップ社のMCUと接続して実験している回(開発ツールはC言語)があったので、今回はそれを踏襲。
PIC三昧(14) MSSP(SPI)で23LC512にRWしてみる、PIC16F18855
ホストをPIC16F18855からラズパイPico2 RP2350に変更、開発ツールはCからuLispに挿げ替え。ちょろいもんだ。ホントか?
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番地を読み出しっと。
読み書き成功しているようだね。よかった。