6 Replies Latest reply on Sep 24, 2019 11:57 PM by JoMe_264151

    How to use I2C

    keno_4227451

      Hello.

       

      I want to communicate to other device by using PSoC I2C component but I dont know how to use.

      I want to put PSoC as master and the device as slave and just want to write.

      Could anyone give me some easy sample code to use I2C??

        • 1. Re: How to use I2C
          JoMe_264151

          Byte I2C interface is quite simple: After setting up the component and starting it you use

           

              I2C_MasterSendStart(DeviceAddress,I2C_WRITE_XFER_MODE);    // Initialize a transaction for writing

              I2C_MasterWriteByte(Register);                // Indicate which register you want to write to

              I2C_MasterWriteByte(Value);                // Write to register

              I2C_MasterSendStop();                    // End of transaction

           

          When you want to read from a device you use (example for reading two bytes

           

              I2C_MasterSendStart(DeviceAddress,I2C_WRITE_XFER_MODE);    // Initialize a transaction for writing

              I2C_MasterWrite(Register);                // Indicate which register you want to write to

              I2C_MasterSendRestart(DeviceAddress,I2C_READ_XFER_MODE);

              I2C_MasterReadByte(I2C_ACK_DATA);            // Read from register

              I2C_MasterReadByte(I2C_NAK_DATA);            // Read from register, last byte is NAKed

              I2C_MasterSendStop();                    // End of transaction

           

          Not too difficult. Keep in mind that most of the APIs (except those for reading a byte) return a status byte which, when non-zero indicate an error condition.

           

          The high-level APIs must be used in this way:

           

          Writing to slave Count bytes

          I2C_MasterWriteBuf(SlaveAddress,DataPtr,Count,I2C_MODE_COMPLETE_XFER);

           

          Reading from Slave sending register/command byte first:

          I2C_MasterWriteBuf(SlaveAddress,&RegAddress,1,I2C_MODE_NO_STOP);

          I2C_MasterReadBuf(SlaveAddress,DataPtr,Count,I2C_MODE_REPEAT_START);

           

          *** Important: I2C needs two pull-up resistors (~ 2.2K) on SDA and SCL. The pins should be configured as "Open drain, drives low" and the initial drive level = High.

           

          Bob

          2 of 2 people found this helpful
          • 2. Re: How to use I2C
            keno_4227451

            Thank you so much!!!

            I will try it!!

            • 3. Re: How to use I2C
              keno_4227451

              Sorry, I have a question.

               

              When I put

                  I2C_MasterSendStart(DeviceAddress,I2C_WRITE_XFER_MODE);    // Initialize a transaction for writing

                  I2C_MasterWriteByte(Register);                // Indicate which register you want to write to

                  I2C_MasterWriteByte(Value);                // Write to register

                  I2C_MasterSendStop();                    // End of transaction

              and build it, error comes up and that says they are undefined reference.

               

              Is there any other thing I should do??

              • 4. Re: How to use I2C
                JoMe_264151

                Can you please post your complete project or a shortened version that shows the error so that we all can have a look at all of your settings. To do so, use

                Creator->File->Create Workspace Bundle (minimal)

                and attach the resulting file.

                 

                Bob

                • 5. Re: How to use I2C
                  keno_4227451

                  Sorry I dont know how to attach it...

                   

                   

                  I attach the image instead.

                   

                  図2.png図3.png

                  • 6. Re: How to use I2C
                    JoMe_264151

                    For your device the API names are formed as I2C_1_I2CMasterSendStart(). Look into the component's datasheet (right click)

                    To attach a file here, click on "advanced Editor"

                     

                    Bob