verilog書く人

自称ASIC設計者です。どなたかkaggle一緒に出ましょう。

PythonだけでRaspberry piのGPIOピンをALT0に設定するための話

raspberry Pi2を最近いじっているのですが、GPIOピンからクロックをチップに供給したいことがありました。

そのためには、例えばGPIOピン5を通常の入出力ではなく、ALT0 (alternative function 0)に設定する必要があります。

他にもクロック出力を設定できるピンがありますが、詳しくはraspiに搭載されているARMプロセッサであるBCM2835のデータシートを参照してみてください(102pくらい)。↓

https://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf

 

結局色々調べたのですが、Pythonだけで完結できず、こちらのページ↓を参考にしてcプログラムでクロックを出力することに成功。(感謝!)

こじ研(Raspberry Pi)

 

しかし、データ取得・解析にはPythonを使っていたので、できれば動いているコードはPythonだけで統一したいなあと思い、必要なライブラリを実装しました。

 

そのために、RPIOライブラリのカスタマイズを行います。

ただし、私が使っているのはraspberry Pi2なのですが、現在RPIOはraspberry Piに対応していない模様。raspberry Pi2でも使えるようカスタマイズされた

tylerwowen/RPIO · GitHub

を改造し、ALT0への対応を行います。

 

■成果物

できました。フォーク元にプルリクエストを投げましたが、どうなることやら無事速攻でマージされました、感謝。

 

 

■インストール、つかいかた

raspberry Piターミナル上で

 

git clone https://github.com/fukatani/RPIO.git

git clone https://github.com/tylerwowen/RPIO.git

cd RPIO

python setup.py install

 

とうち、ここで完了と思いきや、なぜか私の環境では

 

f:id:segafreder:20151220003925p:plain

 

dist-packagesに未解凍のファイルが置かれます(左下)。シュール。

 

なんででしょうね。前世の行いでしょうかね。知ってる人、教えてくださいね。

しょうがないので、手作業で解凍してやりインストール完了です。

 

例えばPythonスクリプトにて

 

import RPIO

RPIO.setup(5, RPIO.ALT0)

 

とすると、5ピンからGPCLK1(大体20MHz)がでます。嬉しいです。

 

ちなみにGPCLKは波形がグチャグチャでそれなりに高周波ノイズが激しいので、クロックの波形を直で突っ込むとSPIなどの波形がゆがむことがあります。最悪、通信が失敗し、かえって来たデータが信用できなくなるかもしれません。

そういう場合はクロックの後ろに抵抗(100ohmくらい?)つけてみましょう。

高周波成分が除去されて、通信が成功するようになるはずです。

 

なんか今ハードウェアエンジニアっぽいこといってしまった、、、

 

■追伸

うーん、RPIOの一部テストが通りません。フォーク元も。Pi2はピン配変わったからかしら。

raspberry Pi用のTravis CIがあったらいろいろはかどるのになー。

やる気があるひと修正してみましょう(人まかせ)。