Zedboard SPIで通信してみた -3- (ほんのちょっと動作)
SPIでセンサに1byteだけデータを送信する事ができたのでメモ
先週ツイートした通りSPIのSS0信号にバグがある様です。
SPIが動かない犯人は多分おまえだぁぁぁ!!「Zynq-7000、SPI - MIO のマスター モードで SS0 信号がアサートされると SPI コントローラーがリセットされる」japan.xilinx.com/support/answer…
— michuさん (@ginnyu_tei) 10月 13, 2012
はい、SS0を使っていました。
という訳でMIOではなくEMIO経由での出力に変えてみました。
以下変更した点
1.「Zynq PS MIO Configurations」でSPIをEMIOに変える(XPS操作)
SPI1のIOをEMIOにします。
2.SPI(EMIO)を上位階層まで配線する(XPS操作)
PSの配線は以下の階層になっています。
(以下は名前を「system」にした場合)
- system_stub <- PlanAheadの「Create Top HDL」で生成
- system <- XPSで生成
- processing_system7_0_wrapper
- system <- XPSで生成
EMIOを選択しただけでは「processing_system7_0_wrapper」階層から
ポートがでるだけなので「systemc」の設定が必要。
XPSの「Port」設定で(IO_IF)SPI_1をにSPIの信号があるので
以下信号を右クリック-> Make Externalで「system」の外に出す。
- SPI1_SCLK
- SPI1_MOSI
- SPI1_MISO
- SPI1_SS
- SPI1_SS1_O
今回はSS1を使用するのでSS1_0も出力している。
SPI0_SS_Iはnet_vccで1固定にする。
External Portの欄にSPIの信号があればOK。できたらXPSを閉じる。
3.UCFファイルの設定
PlanAheadに戻ったら「Create TOP HDL」でTOP階層を生成する。
その後「Add Source」->「Add or Create Design Source」を選択。
「Add Files」でZedBoarad用のUCFファイルを選択し、
「Create File」でもう一つUCFファイルを生成する。
生成したUCFに以下記述を記載する。
NET processing_system7_0_SPI1_SCLK IOSTANDARD=LVCMOS33 | LOC=AA9; NET processing_system7_0_SPI1_MISO IOSTANDARD=LVCMOS33 | LOC=AA11; NET processing_system7_0_SPI1_MOSI IOSTANDARD=LVCMOS33 | LOC=Y10; NET processing_system7_0_SPI1_SS IOSTANDARD=LVCMOS33 | LOC=AB11; NET processing_system7_0_SPI1_SS1_O_pin IOSTANDARD=LVCMOS33 | LOC=Y11;
ピン設定はPmodのJA1を使用しています。
zedboard用のUCFファイルにJA1のピン設定があるので
そちらに直接指定しても良いですが、
元ファイルを変更したくなかったので新しくファイルを追加しました。
(その為新しいUCFファイルとZedboard用のUCFファイル両方にJA1のピン設定
が記載されている状態になっています。
警告は出ますが、新しいUCFファイルの設定が反映されているのでとりあえずOK)
初め、設定に「ZedBoard_HW_UG_v1_5.pdf」を使用しましたが
記載されているJA1のピンが間違っています。
信号が出ないので回路図を確認していたら気づきました。
「ZedBoard_HW_UG_v1_6.pdf」では修正されているのでこれからはこっちを参照。
4.プログラムの修正
SlaveSelectを0から1にする。
XSpiPs_SetSlaveSelect(SpiInstancePtr, 0x0); ↓ XSpiPs_SetSlaveSelect(SpiInstancePtr, 0x1);
5.ダミーロード接続
テスト用に気圧センサではなく抵抗を接続する。
(センサの影響がないように抵抗でとりあえずデータ出力テスト)
これで実行するとSPIから信号が出力された。
とりあえず信号が出たが、まだまだ不具合がある。
・気圧センサに戻すと信号が出なくなる。
・1byte送信後、さらに1byte送信するとフリーズする。
現段階はここまで。