1 Reply Latest reply on May 7, 2020 6:58 PM by JuyoungJ_06

    Community Translation - I2C Master Implementation in PSoC® 5LP using Low-level APIs - KBA223957

    NoTa_4591161

      Hi,

       

      I would like to translate KBA223957 into Japanese.

       

      Thanks,

      Kenshow


      Original KBA:

      I2C Master Implementation in PSoC® 5LP using Low-level APIs - KBA223957

       

      Translated by Kenshow

      ==============================

       

      タイトル: 低レベルAPIを使用したPSoC® 5LPでのI2Cマスターの実装 - KBA223957

       

      バージョン:**

       

      質問:

      どのように低レベルAPIを使用してPSoC® 5LPでI2Cマスターを実装すればよいのでしょうか?

       

      回答:
      I 2 Cスレーブメモリデバイスとの通信の使用例では、次のコードスニペットを使用します。

       

      1. 書き込みトランザクション

      例えば:

      メモリデバイスのスレーブアドレス: 0x08

      メモリのアドレス: 0x00

      送信されるバイト数: 5

      送信されるデータ: 1、2、3、4、5

      #define SLAVE_ADDRESS (0x08u)

       

      #define SUB_ADDRESS_LOCATION (0x00u)

      #define SUB_ADDRESS_LENGTH (0x01u)

       

      #define WRITE_DATA_LENGTH (5u)

      #define WRITE_DATA_BUFFER_LENGTH (WRITE_DATA_LENGTH + SUB_ADDRESS_LENGTH)

       

      uint8 i = 0;

            uint8 status = 0;

       

      /* 書き込みバッファにサブアドレスの場所と送信するデータをロードします */

                  uint8 write_data_buffer[WRITE_DATA_BUFFER_LENGTH] = { SUB_ADDRESS_LOCATION , 1 , 2 , 3 , 4 , 5 };

       

      /* 開始条件とスレーブアドレスを送信し、その後に書き込みビットを送信します */

                 status = I2C_MasterSendStart(SLAVE_ADDRESS, I2C_WRITE_XFER_MODE);

       

                  /* マスターステータスにエラーがないかどうかを確認します */

                  if(status == I2C_MSTR_NO_ERROR)

            {

       

                        for(i=0; i<WRITE_DATA_BUFFER_LENGTH; i++)

              {

       

      /* 最初に書き込みバッファにロードされたスレーブに書き込まれるデータを送信します */

                      status = I2C_MasterWriteByte(write_data_buffer[i]);

       

                         /* マスターステータスにエラーがないかどうかを確認します */          

                       if(status != I2C_MSTR_NO_ERROR)

             {

                            break;

             }

          }

       

      /* トランザクションの完了後に停止条件を送信します */

      I2C_MasterSendStop();;

       

      2. 読み込みトランザクション

      例えば:

      メモリデバイスのスレーブアドレス: 0x08

      メモリのアドレス: 0x00

      読み取るバイト数: 5

       

      #define SLAVE_ADDRESS (0x08u)

       

      #define SUB_ADDRESS_LOCATION (0x00u)

      #define SUB_ADDRESS_LENGTH (0x01u)

       

      #define READ_DATA_LENGTH (5u)

       

      uint8 i = 0;

            uint8 status = 0;

       

      /* 書き込みバッファにサブアドレスの場所をロードします */

                  uint8 write_data_buffer[SUB_ADDRESS_LENGTH] = { SUB_ADDRESS_LOCATION };

       

      /* 読み取りバッファを初期化します */

                  uint8 read_data_buffer[READ_DATA_LENGTH];

       

      / * 開始条件とスレーブアドレスを送信し、その後に書き込みビットを送信します */

             status = I2C_MasterSendStart(SLAVE_ADDRESS, I2C_WRITE_XFER_MODE);    

       

                  /* マスターステータスにエラーがないかどうかを確認します */

                  if(status == I2C_MSTR_NO_ERROR)

           {

       

                     for(i=0; i< SUB_ADDRESS_LENGTH; i++)

                     {

           

                         /* サブアドレスを送信します */

                         status = I2C_MasterWriteByte(write_data_buffer[i]);

       

                        /* マスターステータスにエラーがないかどうかを確認します */

                        if(status != I2C_MSTR_NO_ERROR)

              {

                             break;

              }

           }

       

             /* 開始条件とスレーブアドレスを送信し、その後に読み取りビットを送信 */

            

              status = I2C_MasterSendRestart(SLAVE_ADDRESS, I2C_READ_XFER_MODE);

               

                 /* マスターステータスにエラーがないかどうかを確認します */

        

           if(status == I2C_MSTR_NO_ERROR)

           {

                      for(i=0; i<(READ_DATA_LENGTH-1); i++)

              {

         

                              /* スレーブから読み取ったデータを読み取りバッファにロードし、その後にACKを続けます */

                              read_data_buffer[i] = I2C_MasterReadByte(I2C_ACK_DATA);

              }

       

                       /* スレーブから最後に読み取られたデータを読み取りバッファにロードし、その後にNACKを続けます */

                        read_data_buffer[i] = I2C_MasterReadByte(I2C_NAK_DATA);

           }

           }

       

           /* トランザクションの完了後に停止条件を送信します */

           I2C_MasterSendStop();

       

       

      APIの詳細については、I 2 Cコンポーネントデータシートを参照してください。

       

      注: WriteBuf()ReadBuf()などの高レベルAPI は、低レベルAPIと組み合わせて使用しないでください。

       

      ==============================

      7-May-2020

      Kenshow