読者です 読者をやめる 読者になる 読者になる

日曜技術者のメモ

趣味でやった事のメモ書きです。

Zedboard SPIで通信してみた -3- (ほんのちょっと動作)

FPGA ZedBoard

SPIでセンサに1byteだけデータを送信する事ができたのでメモ

先週ツイートした通りSPIのSS0信号にバグがある様です。

はい、SS0を使っていました。
という訳でMIOではなくEMIO経由での出力に変えてみました。

以下変更した点

1.「Zynq PS MIO Configurations」でSPIをEMIOに変える(XPS操作)
 SPI1のIOをEMIOにします。

f:id:ginnyu-tei:20121015211631g:plain

2.SPI(EMIO)を上位階層まで配線する(XPS操作)
 PSの配線は以下の階層になっています。
 (以下は名前を「system」にした場合)

  • system_stub <- PlanAheadの「Create Top HDL」で生成
    • system <- XPSで生成
      • processing_system7_0_wrapper

 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固定にする。

f:id:ginnyu-tei:20121015221519g:plain

 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.ダミーロード接続
テスト用に気圧センサではなく抵抗を接続する。
(センサの影響がないように抵抗でとりあえずデータ出力テスト)

f:id:ginnyu-tei:20121015233102g:plain

これで実行するとSPIから信号が出力された。
f:id:ginnyu-tei:20121015233253g:plain:w800
とりあえず信号が出たが、まだまだ不具合がある。

・気圧センサに戻すと信号が出なくなる。
・1byte送信後、さらに1byte送信するとフリーズする。

現段階はここまで。