3 Replies Latest reply on Apr 7, 2019 11:44 PM by user_3987996

    I2Cで1バイトのアドレスの送信

    user_3987996

      AN75779のサンプルコードはイメージセンサーに2バイトのアドレスでの送信になっていますが、

      使用するイメージセンサーは1バイトのアドレスなので、書き換えたいのですが

      サンプルコードでSensorWriteの関数を

      preamble.buffer[0] = slaveAddr;

      preamble.buffer[1] = highAddr;

      preamble.buffer[2] = lowAddr;

      preamble.length    = 3;

      preamble.ctrlMask  = 0x0000;

       

      apiRetStatus = CyU3PI2cTransmitBytes (&preamble, buf, count, 0);

       

      となっているところを

       

      preamble.buffer[0] = slaveAddr;

      preamble.buffer[1] = highAddr;

      preamble.length    = 2;

      preamble.ctrlMask  = 0x0000;

       

      apiRetStatus = CyU3PI2cTransmitBytes (&preamble, buf, count, 0);

       

      といように書き換えればいいでしょうか?

        • 1. Re: I2Cで1バイトのアドレスの送信
          HirotakaT_91

          はい、その変更により1バイトアドレスのイメージセンサーとの通信に対応出来るようになります。

          結局は、CyU3PI2cTransmitBytes() でI2Cスレーブにデータを書き込むので、このAPIが使いやすいように関数にデータを渡してあげれば良いです。

          APIの詳細は、C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc\firmware\FX3APIGuide.pdf 等でご確認いただけます。

           

          よろしくお願い致します。

          Hirotaka Takayama

          • 2. Re: I2Cで1バイトのアドレスの送信
            user_3987996

            別スレッドでのMCLKとSTDBY信号は上手く動きました。

             

            I2Cが上手く動きません。

            1バイト送信する関数をSensorWrite1という名前で作成しました。

            ビルドでのエラーは無いのですが、APIを正しく使えてないようで、波形を確認すると

            同じデータを送っています。

             

            Sensor.cのファイルを添付すます。

             

            イメージセンサーに必要な処理をStep2_PLL_Timingの関数にまとめました。

            例として

            SensorWrite1 (SENSOR_ADDR_WR, 0x03, 0x00);

            の場合

            0x03アドレスに0x00のデータを書き込みたいです。

             

            何処が悪いのかご教示ください。

            • 3. Re: I2Cで1バイトのアドレスの送信
              user_3987996

              この件は自己解決しました。