2 Replies Latest reply on Aug 17, 2017 1:08 PM by user_304040467

    PSoC 6 i2c master issues

    user_304040467

      Hey Everyone,

       

      I've found something interesting with the i2c master mode on the PSoC 6 early access board:

       

      Below you can see a i2c communications snapshot between a temperature sensor and one of my older devices:

      working.jpg

      With the PSoC 6, i'm trying to use that same hardware for an iot weather station application, here is that communication snapshot:

      notworking.jpg

      As you can see, shortly after the start, i'm not getting an acknowledge from the slave (ignore the restart/2nd read, i was trying to force a re-read)

       

      Here is a very simplistic version of my i2c call's i'm trying to do:

      #include "I2C_1.h"
      
      
      int main(void)
      {
      uint8_t temp=0;
          __enable_irq(); /* Enable global interrupts. */
          
          I2C_1_Start();
      
      
          for(;;)
          {
              I2C_1_MasterSendStart(0x40, CY_SCB_I2C_WRITE_XFER, 200);
              I2C_1_MasterWriteByte(0xF5, 200);
              I2C_1_MasterSendReStart(0x40, CY_SCB_I2C_READ_XFER, 200);
              I2C_1_MasterReadByte(CY_SCB_I2C_NAK, &temp, 200);
              I2C_1_MasterSendStop(200);
      
      
      /* breakpoint */
              CyDelay(500);        
          }
      }
      

       

      Originally in the TopDesign, i didn't define the pin's in the I2c module.  One of things I later changed and didn't see much affect (other than less noise on SDL). Both are now defined as Bidirectional, resistive pull-up and i2c fm (400kbps) (the screen shot above is with that mode setup) (Pin's P6[0] and P6[1])

       

      I'm using the June release of the PSoC Creator build for PSoC 6 linked to in this forum.

       

      Regards,

        • 1. Re: PSoC 6 i2c master issues
          rlos

          Hello, I was able to use your code to successfully connect with an I2C slave. Here is the screenshot. (Only changed the I2C slave address).

          Capture.PNG

          Are you sure your slave is connected to the bus?

          • 2. Re: PSoC 6 i2c master issues
            user_304040467

            Thanks Rlos for your reply and confirmation on the code snip-it.  We have success now!

             

            i2cmaster.PNG

             

            Sadly, the PSOC 6 arduino header isn't 100% compatible.  On the shield I was planning to use, (it's got 4 nice weather sensors), I lifted A4/A5 so the i2c bus wouldn't be affected by pins 10.4/10.5 on the psoc, along with shorting 5.0v to 3.3v and lifting 5.0v on the shield (so internally it's now just running at 3.3v).  While this works on a 3.3v arduino, no luck here.

             

            So today i switched to just using one of the same i2c sensor's running at 3.3v, with a very simple 4 wire break out board (scl/sda/gnd/vcc), it just works fine.

             

            Regards,