トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

SPIで読み取り値が1ビットずれる

  SPI で 読み取り値が 1ビットずれる


現象


CCS C コンパイラ向けの PIC プログラムを書いたのですが、spi_read() を使って読むと、値が1ビットシフトする問題に出くわしました。

setup_spi( SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);

という設定で、

spi_read( address | 0b10000000);
data = spi_read( 0);

として1バイトのデータを読みました。本来「01001000」(二進数)が期待されるのですが、「00100100」が返ってきました。


原因


原因は SPI モードの設定ミス。

// SPI mode definition
#define SPI_MODE_0  (SPI_L_TO_H | SPI_XMIT_L_TO_H)
#define SPI_MODE_1  (SPI_L_TO_H)
#define SPI_MODE_2  (SPI_H_TO_L)
#define SPI_MODE_3  (SPI_H_TO_L | SPI_XMIT_L_TO_H)

SPIモード 3 のデバイスだったのですが、SPIモード 2 の設定で使っていたのが原因でした。

setup_spi( SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16 | SPI_XMIT_L_TO_H);

としたら正常に読み出せました。

参考URL


http://www.ccsinfo.com/forum/viewtopic.php?p=136215

最終更新時間:2010年08月26日 20時03分05秒