5 Replies Latest reply on Sep 13, 2019 2:10 AM by AH_96

    PSoC5LP Fixed function I2C component

    MaMi_1205306

      Hi,

       

      We are using fixed function I2C component of PSoC5LP.

       

      Therefore, Datasheet (v3.50) p.36 has the following description.

       

      /***********************************************************************************/

      Fixed-function implementation does not support undefined bus conditions.

      Avoid these conditions, or use the UDB-based implementation instead.

      /***********************************************************************************/

       

      We have the following questions:

      1. When using fixed-function, is the Undefined state when the I2C bus transitions from High to Low?

      2. If it becomes Undefined, will it be a bus busy error?

      3. Is it possible to avoid bus busy errors by turning the I2C component off and then transitioning the bus to Low?

      4. Is fixed-function block reset when returning from Hibernate / Sleep?
      As a reason, it is assumed that BUS_CLK supplied to the fixed-function block stops once.

       

      Regards,

        • 1. Re: PSoC5LP Fixed function I2C component
          AH_96

          Hello MaMi_1205306

           

          PSoC I2C component follows the standard I2C specification given by I2C-bus specification and user manual

           

          There is an undefined condition if the arbitration procedure is still in progress at the moment when one master sends a repeated START or a STOP condition while the other master is still sending data. In other words, the following combinations result in an undefined condition:

          • Master 1 sends a repeated START condition and master 2 sends a data bit.

          • Master 1 sends a STOP condition and master 2 sends a data bit.

          • Master 1 sends a repeated START condition and master 2 sends a STOP condition.

           

          In the event an undefined condition occurs, the state of I2C bus is not guaranteed.

           

          Thanks and regards

          Harigovind

          • 2. Re: PSoC5LP Fixed function I2C component
            MaMi_1205306

            Harigovind-san,

             

            To reduce power consumption,
            The pull-up resistor of the I2C bus is pulled down (not Hi-Z).
            As a result, I2C(fixed) becomes undefined.

             

            Is it correct in the following procedure to return from undefined?

             

            After switching the pull-down resistor of the I2C bus to pull-up,

             

            (a) Stop the I2C(fixed) component and start it (or call Init() API).

            (b) Return from low power mode to active mode.

             

            Regards,

            • 3. Re: PSoC5LP Fixed function I2C component
              AH_96

              Hello MaMi_1205306

               

              The I2C lines in PSoC require an external pull up resistor for correct operation (as per I2C spec).

               

              Thanks and regards

              Harigovind

              • 4. Re: PSoC5LP Fixed function I2C component
                MaMi_1205306

                Harigovind-san,

                 

                My explanation was insufficient.
                SDA and SCL are pulled up by external resistance.
                To enter low power mode,
                Stop the I2C device connected to PSoC5LP,
                I2C pull-up voltage is switched to GND(That means pull down).

                 

                Then, I2C of PSoC5LP becomes undefined.
                We would lile to know how to deal with it.

                 

                Regards,

                • 5. Re: PSoC5LP Fixed function I2C component
                  AH_96

                  Hi MaMi_1205306

                   

                  Once the device comes out of the low power mode, the I2C lines would be pulled HIGH. After this, restarting the I2C component by calling I2C_Start() would be sufficient.

                  Please note that the time when the bus is pulled LOW, the I2C will be in undefined state and during this time, the SCB block may not function as per the requirement.

                   

                  Thanks and regards

                  Harigovind