スレーブから受信したいとき、i2c_master_tx_rx_pollで、送信バッファにアドレスを入れ送信してから、受信するかと思いきや違うらしい。i2c_master_receive_pollの受信バッファの1番目の要素にアドレスを入れて、受信を行うと良いらしい。
d.hatena.ne.jp
ここに答えが書かれていた。
アドレスのR/Wビットが違うからだろうと思い、いろいろ試行錯誤していたが、まさか受信バッファにアドレスを入れるとは思わなかった。
ユーザーマニュアルには確かに送信バッファにアドレスを入れろと書かれていたと思うのだが…。何故、受信バッファにアドレスを入れるのか謎である。しかし、良く気がついたな。
LPC800 User manualには明らかに誤った事が書かれていた。”The slave address with the R/W bit =0 is expected in the first byte of the send buffer. After the task is finished, the slave address with the R/W bit =1 is in the first byte of the receive buffer.”とあった。この通りにやっても全くうまく行かなかった。
安いし、大きさの割にはメモリが多く、高性能そうだったから選んだが、資料の間違いの多さは非常に困る。